2

我正在使用 HTML5媒体源扩展 (MSE)使用DASH流式传输视频。我使用MP4Box从一个包含两个视频轨道的 MP4 文件创建了我的媒体片段。所以我所拥有的是一个带有moov->sidx盒子和多个moof->mdat包含两个视频轨道的媒体段的初始化段。如果我将它们推送到sourceBufferwithappendBuffer函数,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 文件,每个文件都有一个视频轨道)可能是一种解决方案,但我对这种方法不感兴趣。

谢谢你们。

4

1 回答 1

3

好的,我找到了一种方法来做到这一点。使用videoTracks属性,我们可以访问视频轨道并更改其选定属性。所以这很简单。

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

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;
    }
}
于 2016-04-19T15:17:01.867 回答