如何在播放期间切换音轨

Posted

技术标签:

【中文标题】如何在播放期间切换音轨【英文标题】:How can I switch audio track during playback 【发布时间】:2015-04-21 11:00:01 【问题描述】:

我使用 dash.js 将以下清单中的内容加载到 html5 视频中:MPD file。它包含一个视频和四个音轨。我试图弄清楚如何枚举和启用/禁用可用的不同音轨。

我了解,如果将它们作为 TRACK 元素添加到 VIDEO 元素中,我可以通过 video.audioTracks 启用/禁用它们,但这是不可能的,因为它们是从清单加载的。

任何关于我如何解决这个问题的指针将不胜感激。

【问题讨论】:

我发现根本不需要<track> 元素;只需 <video><source>,我就能够成功地操纵 video.audioTracks[i].enabled 来切换 Jeoffrey Mendez 回答的声音轨道。浏览器支持 is abysmal,但是,据称截至 2018 年 2 月,Safari 和 IE 衍生产品仍仅支持。 【参考方案1】:
videoObject.audioTracks[audioTrackIndex].enabled = true;

【讨论】:

虽然这可能会解决问题,但请始终说明您所提议的内容为何有效。代码本身不可搜索。 大多数浏览器尚不支持audioTracks。有没有其他办法?【参考方案2】:

以下是获取可用品质列表的方法:

// assuming player is the instance of MediaPlayer
var metricsExt = player.getMetricsExt();
var num_qualities = metricsExt.getMaxIndexForBufferType('audio', 0 /*that's the period index*/);
var qualities = [];
for (var i = 0; i < num_qualities; i++) 
     qualities.push(metricsExt.getBandwidthForRepresentation(i+1));

然后如果用户选择另一种质量:

player.setQualityFor('audio', newQualityIdx);
// newQualityIdx is the 0-based index of the chosen quality

您可能还想关闭auto-switch-quality,以防用户手动选择质量:

player.setAutoSwitchQuality(false);

【讨论】:

感谢您的回复,但这并不是我所追求的。我想在四个音频 AdaptationSet 之间进行选择。现在 dash.js 将选择第一个可用的,在这种情况下是丹麦语(第 16 行)。除了拦截清单并在将其提供给播放器之前删除不需要的音轨之外,我还没有找到任何其他方法。问题是;如果我想更改音轨,我必须重新解析 ofc 重置流的清单:(

以上是关于如何在播放期间切换音轨的主要内容,如果未能解决你的问题,请参考以下文章

电脑上有啥视频播放器可以用快捷键切换音轨(配音的)

如何在音轨中的特定点触发事件或回调?

当前以 HTML5 结尾时如何播放下一个音轨?

HTML5视频,如何检测没有音轨?

HTML5视频,如何检测没有音轨?

如何在 C++ 中使用 ffmpeg 动态更改视频的音轨?