是否可以在HTML5 MSE中的视频轨道之间切换?

时间:2016-04-19 14:06:51

标签: javascript html5 video streaming media-source

我正在使用HTML5 Media source extensions (MSE)使用DASH流式传输视频。我使用MP4Box从MP4文件创建了我的媒体片段,其中包含两个视频轨道。所以我所拥有的是一个包含moov->sidx框的单个初始化细分和包含两个视频轨道的多个媒体细分moof->mdat。如果我将它们推送到具有appendBuffer功能的sourceBuffer,MSE将解码并仅显示第一个视频轨道(我假设第二个视频轨道中的数据刚刚被丢弃)。

以下是我的代码中的相关部分:

sourceBuffer = mediaSource.addSourceBuffer(stats.mimeType); // mime type: video/mp4
...
// after downloading mediasegment append its contents 'data' to sourceBuffer
sourceBuffer.appendBuffer(new Uint8Array(data));

所以我的问题是,是否可以控制sourceBuffer,以便客户端可以选择要解码的轨道?我认为将视频轨道分成不同的自适应集(创建单独的mp4文件,每个单独的视频轨道)可能是一个解决方案,但我对这种方法不感兴趣。

谢谢你们。

1 个答案:

答案 0 :(得分:3)

好的,我找到了一种方法。使用videoTracks属性,我们可以访问视频曲目并更改其selected属性。所以这很简单。

以下是如何在下载第三段后切换曲目的示例:

if(segmentCnt==3 && sourceBuffer.videoTracks.length == 2)
{
    console.log('tracks cnt: ' + sourceBuffer.videoTracks.length);
    for(var i=0; i<sourceBuffer.videoTracks.length; i=i+1) {
        var trackID = sourceBuffer.videoTracks[i].id;
        var trackSelected = sourceBuffer.videoTracks[i].selected;
        console.log('trackID: ' + trackID + ' selected: ' + trackSelected);
        sourceBuffer.videoTracks[i].selected = !trackSelected;
    }
}