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

Is it possible to switch between video tracks in HTML5 MSE?

我正在使用 HTML5 Media source extensions (MSE) to stream a video using DASH. I created my media segments using MP4Box from a MP4 file with two video tracks in it. So what I have is a single initialisation segment with moov->sidx boxes and multiple media-segments moof->mdat containing both video tracks. If I push them to the sourceBufferappendBuffer 函数,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,使客户端可以 select 解码哪个轨道?我想将视频轨道分成不同的适应集(创建单独的 mp4 文件,每个文件中有一个视频轨道)可能是一种解决方案,但我对这种方法不感兴趣。

谢谢大家。

好的,我找到了一种方法来做到这一点。使用 videoTracks attribute we can access the video tracks and change its 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;
    }
}