Support Web Video Text Tracks Format subtitles
This commit is contained in:
parent
dd7064d9e4
commit
0877a1f193
|
@ -15,6 +15,7 @@ wav audio/wav
|
|||
webm video/webm
|
||||
ogv video/ogg
|
||||
mp4 video/mp4
|
||||
vtt text/vtt
|
||||
|
||||
tgz !application/octet-stream
|
||||
tar !application/x-gtar
|
||||
|
|
|
@ -0,0 +1,64 @@
|
|||
<?php
|
||||
/*
|
||||
* Code to language name in the language corresponding to the code.
|
||||
*
|
||||
* @author Schplurtz le Déboulonné <Schplurtz@laposte.net>
|
||||
*/
|
||||
$code2lang['af']='Afghani';
|
||||
$code2lang['ar']='Arabic';
|
||||
$code2lang['be']='Беларуская';
|
||||
$code2lang['bg']='Български';
|
||||
$code2lang['bn']='Bengali';
|
||||
$code2lang['ca']='Català';
|
||||
$code2lang['cs']='Čeština';
|
||||
$code2lang['da']='Dansk';
|
||||
$code2lang['de']='Deutsch';
|
||||
$code2lang['de-informal']='Deutsch informal';
|
||||
$code2lang['el']='Ελληνικά';
|
||||
$code2lang['en']='English';
|
||||
$code2lang['eo']='Esperanto';
|
||||
$code2lang['es']='Español';
|
||||
$code2lang['et']='Eesti';
|
||||
$code2lang['eu']='Euskara';
|
||||
$code2lang['fa']='فارسی';
|
||||
$code2lang['fi']='Suomi';
|
||||
$code2lang['fr']='Français';
|
||||
$code2lang['gl']='Galego';
|
||||
$code2lang['he']='תירבע';
|
||||
$code2lang['hi']='Hindi';
|
||||
$code2lang['hr']='Hrvatski';
|
||||
$code2lang['hu']='Magyar';
|
||||
$code2lang['hu-formal']='Magyar (formal)';
|
||||
$code2lang['id']='Bahasa Indonesia';
|
||||
$code2lang['is']='Íslenska';
|
||||
$code2lang['it']='Italiano';
|
||||
$code2lang['ja']='日本語';
|
||||
$code2lang['ka']='ქართული';
|
||||
$code2lang['kk']='Қазақ';
|
||||
$code2lang['km']='Khmer';
|
||||
$code2lang['ko']='한국어';
|
||||
$code2lang['ku']='Kurdî';
|
||||
$code2lang['lt']='Lietuviškai';
|
||||
$code2lang['lv']='Latviski';
|
||||
$code2lang['mk']='Македонски';
|
||||
$code2lang['ml']='Malayalam';
|
||||
$code2lang['mr']='Marathi';
|
||||
$code2lang['ne']='Nepali';
|
||||
$code2lang['nl']='Nederlands';
|
||||
$code2lang['pl']='Polski';
|
||||
$code2lang['pt']='Português';
|
||||
$code2lang['pt-br']='Português do Brasil';
|
||||
$code2lang['ro']='Română';
|
||||
$code2lang['ru']='Русский';
|
||||
$code2lang['sk']='Slovenčina';
|
||||
$code2lang['sl']='Slovenščina';
|
||||
$code2lang['sq']='Shqip';
|
||||
$code2lang['sr']='Српски';
|
||||
$code2lang['sv']='Svenska';
|
||||
$code2lang['ta']='Tamil';
|
||||
$code2lang['th']='Thai';
|
||||
$code2lang['tr']='Türkçe';
|
||||
$code2lang['uk']='Українська';
|
||||
$code2lang['vi']='Tiếng Việt';
|
||||
$code2lang['zh']='中文(简体)';
|
||||
$code2lang['zh-tw']='中文(繁體)';
|
|
@ -278,7 +278,7 @@ function init_paths(){
|
|||
*/
|
||||
function init_lang($langCode) {
|
||||
//prepare language array
|
||||
global $lang, $config_cascade;
|
||||
global $lang, $code2lang, $config_cascade;
|
||||
$lang = array();
|
||||
|
||||
//load the language files
|
||||
|
@ -299,6 +299,7 @@ function init_lang($langCode) {
|
|||
}
|
||||
}
|
||||
}
|
||||
require(DOKU_INC.'inc/code2lang.php');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -2453,4 +2453,41 @@ function media_supportedav($mime, $type=NULL){
|
|||
return in_array($mime, $supportedAv);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return track media files with the same base name
|
||||
* but extensions that indicate kind and lang.
|
||||
* ie for foo.webm search foo.sub.lang.vtt, foo.cap.lang.vtt...
|
||||
*
|
||||
* @param string $src - ID of media file
|
||||
* @return array - array(mediaID => array( kind, srclang, lang ))
|
||||
*
|
||||
* @author Schplurtz le Déboulonné <Schplurtz@laposte.net>
|
||||
*/
|
||||
function media_trackfiles($src){
|
||||
global $code2lang;
|
||||
$kinds=array(
|
||||
'sub' => 'subtitles',
|
||||
'cap' => 'captions',
|
||||
'des' => 'descriptions',
|
||||
'cha' => 'chapters',
|
||||
'met' => 'metadata'
|
||||
);
|
||||
|
||||
$files = array();
|
||||
$re='/\\.(sub|cap|des|cha|met)\\.([^.]+)\\.vtt$/';
|
||||
$baseid=pathinfo($src, PATHINFO_FILENAME);
|
||||
$pattern=mediaFN($baseid).'.*.*.vtt';
|
||||
$list=glob($pattern);
|
||||
foreach($list as $track) {
|
||||
if(preg_match($re, $track, $matches)){
|
||||
$files[$baseid.'.'.$matches[1].'.'.$matches[2].'.vtt']=array(
|
||||
$kinds[$matches[1]],
|
||||
$matches[2],
|
||||
$code2lang[$matches[2]]
|
||||
);
|
||||
}
|
||||
}
|
||||
return $files;
|
||||
}
|
||||
|
||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||
|
|
|
@ -1777,6 +1777,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
|
|||
* Embed video(s) in HTML
|
||||
*
|
||||
* @author Anika Henke <anika@selfthinker.org>
|
||||
* @author Schplurtz le Déboulonné <Schplurtz@laposte.net>
|
||||
*
|
||||
* @param string $src - ID of video to embed
|
||||
* @param int $width - width of the video in pixels
|
||||
|
@ -1794,6 +1795,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
|
|||
|
||||
$posterUrl = '';
|
||||
$files = array();
|
||||
$tracks = array();
|
||||
$isExternal = media_isexternal($src);
|
||||
|
||||
if ($isExternal) {
|
||||
|
@ -1805,6 +1807,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
|
|||
$extensions = array('webm', 'ogv', 'mp4');
|
||||
$files = media_alternativefiles($src, $extensions);
|
||||
$poster = media_alternativefiles($src, array('jpg', 'png'));
|
||||
$tracks = media_trackfiles($src);
|
||||
if(!empty($poster)) {
|
||||
$posterUrl = ml(reset($poster), '', true, '&');
|
||||
}
|
||||
|
@ -1833,6 +1836,19 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
|
|||
$fallback .= $this->$linkType($file, $title, null, null, null, $cache = null, $linking = 'linkonly', $return = true);
|
||||
}
|
||||
|
||||
// output each track if any
|
||||
foreach( $tracks as $trackid => $info ) {
|
||||
list( $kind, $srclang, $labellang ) = $info;
|
||||
$out .= "<track kind=$kind srclang=$srclang ";
|
||||
if( $labellang ) {
|
||||
$out .= "lang=$srclang label=\"".hsc($labellang).'" ';
|
||||
}
|
||||
else {
|
||||
$out .= "label=$srclang ";
|
||||
}
|
||||
$out .= 'src="'.ml($trackid, '', true).'">'.NL;
|
||||
}
|
||||
|
||||
// finish
|
||||
$out .= $fallback;
|
||||
$out .= '</video>'.NL;
|
||||
|
|
Loading…
Reference in New Issue