【发布时间】: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() 提供了很多魔法,其中处理传入缓冲区的动态解码。
解决此问题的两种可能方法是:
- 使用多个
<audio>元素并手动同步它们 - 使用 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