如何使用.mpd文件中的破折号沙卡播放器添加多个字幕?

时间:2016-02-15 13:43:20

标签: javascript html5 video mpeg-dash

总结:我不知道如何在.mpd / shaka-player中添加(和显示)多个字幕选项。

我设置了一个网站,通过互联网提供视频,使用shaka-player库,以便谷歌浏览器用户可以观看它们。因此,使用以下教程,我可以设法部署一个简单的演示视频:

https://shaka-player-demo.appspot.com/docs/tutorial-player.html

在我的情况下,所有.mp4音频和视频文件(加密的),以及希腊语和英语(未加密)字幕的.vtt文件都在同一文件夹(web文件夹)中;根据上面提到的教程,在该文件夹中还有.mpd文件,用于加载视频。

根据上述教程,.mpd文件按以下方式加载:

// Construct a DashVideoSource to represent the DASH manifest.
var mpdUrl = 'https://turtle-tube.appspot.com/t/t2/dash.mpd';
var estimator = new shaka.util.EWMABandwidthEstimator();
var source = new shaka.player.DashVideoSource(mpdUrl, null, estimator);
// Load the source into the Player.
player.load(source);

我还使用以下.mdp文件添加了字幕支持:

<?xml version="1.0" encoding="utf-8"?>
<MPD xmlns:xsd="http://www.w3.org/2001/XMLSchema"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" type="static"      xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011      http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-     DASH_schema_files/DASH-MPD.xsd" mediaPresentationDuration="PT7120S"      maxSegmentDuration="PT10S" minBufferTime="PT10S"      profiles="urn:mpeg:dash:profile:isoff-on-demand:2011"      xmlns="urn:mpeg:dash:schema:mpd:2011">
   <Period>
     <AdaptationSet mimeType="video/mp4" minBandwidth="247684" maxBandwidth="848398" segmentAlignment="true" startWithSAP="1">
       <ContentComponent id="1" contentType="video" />
       <SegmentTemplate initialization="Video$RepresentationID$.mp4"  media="Video$RepresentationID$-$Number$.mp4" duration="10" startNumber="1" />
       <Representation id="0" bandwidth="247684" codecs="avc1.42c01e" />
       <Representation id="1" bandwidth="511973" codecs="avc1.42c01e" />
       <Representation id="2" bandwidth="848398" codecs="avc1.42c01e" />
       <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" />
       <ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" />
     </AdaptationSet>
     <AdaptationSet mimeType="audio/mp4" minBandwidth="65311" maxBandwidth="65311" segmentAlignment="true" startWithSAP="1">
       <ContentComponent id="1" contentType="audio" />
       <SegmentTemplate initialization="Audio$RepresentationID$.mp4" media="Audio$RepresentationID$-$Number$.mp4" duration="10" startNumber="1" />
       <Representation id="3" bandwidth="65311" codecs="mp4a.40.5" />
       <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" />
       <ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" />
     </AdaptationSet>

     <AdaptationSet contentType="text" lang="el" mimeType="text/vtt">
         <Role value="main" />
         <Representation id="4" bandwidth="1000">
             <BaseURL>MySubtitle.el.vtt</BaseURL>
         </Representation>
    </AdaptationSet>

    <AdaptationSet contentType="text" lang="en" mimeType="text/vtt">
        <Representation id="5" bandwidth="1000">
            <BaseURL>MySubtitle.en.vtt</BaseURL>
        </Representation>
    </AdaptationSet>
    </Period>
</MPD>

在Google Chrome网络浏览器中我可以播放这部电影,我可以看到多个控件,如音量和“CC”,这意味着字幕;因此,当我按下“CC”时,我可以激活字幕;但是,我在.mpd文件(希腊语和英语)中配置了两个字幕语言,但按下“CC”控件,它只能激活或取消激活希腊语中的字幕(在.mpd文件中设置的第一个.vtt字幕文件上面),但我不知道如何激活或显示菜单来选择不同语言的字幕。

2 个答案:

答案 0 :(得分:0)

前面提到的.mpd文件包含两个不同字幕语言的两个条目,它是正确的。选择一个副标题或另一个副标题的方法是使用以下方法:

getTextTracks()
selectTextTrack(id)

那是:

// Load the source into the Player.
player.load(source).then(function() {
var textTracks = player.getTextTracks();
console.log("TextTrack Len: " + textTracks.length);
// Selecting the second text track got from
// getTextTracks()
player.selectTextTrack(textTracks[1].id);
video.play();
});

当然,有必要将此逻辑添加到用户界面控件(HTML5)中,以便用户可以选择合适的字幕。

在播放器的工具栏中添加一个新控件(其中有音量控制,放大等)可能会很好,它会执行此功能,但我不知道如何添加它。 / p>

答案 1 :(得分:0)

您似乎无法在视频播放器的工具栏中添加更多选项;因此,您可以使用HTML添加菜单选项,然后调用shaka-player库的相应方法;比如“getTextTracks”,“selectTextTrack”,...