【问题标题】:Is it possible to switch between video tracks in HTML5 MSE?是否可以在 HTML5 MSE 中的视频轨道之间切换?
【发布时间】:2016-04-19 14:06:50
【问题描述】:

我正在使用 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 文件,每个文件都有一个视频轨道)可能是一种解决方案,但我对这种方法不感兴趣。

谢谢你们。

【问题讨论】:

    标签: javascript html video streaming media-source


    【解决方案1】:

    好的,我找到了一种方法来做到这一点。使用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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-20
      • 2012-09-26
      • 2013-07-03
      • 2020-01-09
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      相关资源
      最近更新 更多