【问题标题】:Streaming multi-track audio using DASH使用 DASH 流式传输多轨音频
【发布时间】:2016-09-21 12:55:58
【问题描述】:

我们正在创建一个基于网络浏览器的音乐流媒体服务,该服务可以流式传输包含单独、同步音轨的文件。这些文件基本上是 mp4,但带有一些额外的框。

流式传输将按照 MPEG-DASH 标准进行,希望无需重新发明轮子(例如,dash.js)。


更新 160525 - 添加更多背景:

MPEG-DASH 是该项目的一项要求,既是因为它的功能(适应性、简单的服务器设置等),也是因为我正在处理的项目仅使用 MPEG 标准。

流媒体本身是静态文件的按需播放,即没有实时流媒体。播放将有两种模式;仅播放曲目的静态模式,以及用户可以更改音量、平移等的交互模式。目前,静态播放很好。


现在,流式同步多轨音频似乎并不是最常见的事情,我遇到了几个问题:

1。遵循 MPEG-DASH 标准

MPEG-DASH 似乎高度关注视频流。

是否有任何我找不到的关于纯音频流的文档或指南?

2。 HTML5 元素与网络音频 API

AFAIK,<video><audio> 元素一次只支持一个音轨。它们通过MediaSource.addSourceBuffer() 提供了很多魔法,其中处理传入缓冲区的动态解码。

解决此问题的两种可能方法是:

  1. 使用多个 <audio> 元素并手动同步它们
  2. 使用 Web 音频 API (a) 将缓冲区组合为发送到音频上下文目标的单个信号,或 (b) 为每个轨道创建 AudioNodes 并手动同步它们。这意味着我们必须负责解码

还有其他或更好的方法来传输多个同步的音轨吗?

3。使用现有库

dash.js 参考播放器遵循 DASH-AVC/264 指南,据我了解,该指南处理视频流并将同时播放的音轨数量限制为一个。

它还使用了 HTML5 <video> 元素,这导致了上面 2. 中的问题。

不过,它确实包含 大量 与 DASH 相关的功能,例如自适应流、MPD 清单解析等。

dash.js 是否适合多轨音乐流式传输,还是最终会成为 hack?


如果我有任何误解,我非常乐意回答问题或得到纠正!

【问题讨论】:

  • 非常好的问题,也是一个棘手的问题。你能澄清几件事吗?你直播多久?这是某种直播,还是只需要在下载数据时播放数据?为什么要使用 DASH? DASH 是否有您想要的特定功能,或者您只是将 DASH 作为获得多个音轨的一种方式?获得音轨后,您需要对它们做什么?大概你会想要某种混音器界面,或者以其他方式独立操纵轨道?
  • @Brad 我已经更新到有更多背景的问题。
  • AudioTrack 看起来很有希望,尽管浏览器支持不是很好。你知道任何使用它的参考或示例播放器吗?
  • @JohnnyM 是否需要同时播放一个或多个音频文件的混合?

标签: javascript html5-audio audio-streaming web-audio-api mpeg-dash


【解决方案1】:

我知道的一些答案:

  1. 您说得对,DASH 讨论主要集中在视频上,但仅音频 DASH 仍然非常可行。
  2. a) 媒体源扩展 API (MediaSource.addSourceBuffer()) 绝对是在 JavaScript 中实现单个源的 DASH 播放的正确方法。 DASH 和 MSE 是同时开发的,旨在共同工作。寻找有关 MSE 和 DASH 的更多参考资料。
  3. b) 通过 MSE 播放单个 DASH 源流后,您需要将两个源混合到一个输出中,这可能会使用 Web Audio API,尽管我不是熟悉该 API 的详细信息。

我将添加一条评论,除非有您未提及的要求,否则在客户端合并两个轨道似乎不是一个好主意。对我来说,使用 ffmpeg 或类似的媒体服务器工具在服务器端进行混合更有意义,然后您的客户端只需要担心单个流。如果需要同步不同的源流,那么在浏览器中使用 JavaScript 实现可能是不现实的。

【讨论】:

  • 感谢您的回答,科林!用户将在浏览器中实时操作每个音轨,因此需要客户端同步。
猜你喜欢
  • 1970-01-01
  • 2011-08-22
  • 2013-04-12
  • 2012-01-18
  • 1970-01-01
  • 2010-12-11
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多