使用DASH流式传输多轨音频

时间:2016-05-24 10:49:40

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

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

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

更新160525 - 添加更多背景资料:

MPEG-DASH是项目的一项要求,包括其功能(适应性,简易服务器设置等)以及我正在使用的项目仅使用MPEG标准。

流式传输本身是静态文件的按需播放,即没有直播。播放将有两种模式;一个只播放曲目的静态模式,以及一个用户可以改变音量,平移等的交互模式。现在,静态播放很好。

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

1。遵循MPEG-DASH标准

MPEG-DASH似乎非常关注视频流。

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

2。 HTML5元素与Web Audio API

AFAIK,<video><audio>元素一次只支持一个音频轨道。它们通过MediaSource.addSourceBuffer()提供了大量的魔法,可以对输入缓冲区进行即时解码。

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

  1. 使用多个<audio>元素并手动同步
  2. 使用Web Audio API(a)将缓冲区合并为发送到音频上下文目的地的单个信号,或(b)为每个轨道创建AudioNode并手动同步它们。这意味着我们必须处理解码
  3. 是否有其他或更好的方法来流式传输多个同步音轨?

    3。使用现有的库

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

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

    但它确实包含巨大的数量的DASH相关功能,例如自适应流媒体,MPD清单解析等等。

    dash.js是多轨音乐流媒体的最佳选择,还是会成为黑客?

    如果我误解了任何事情,我非常乐意回答问题或纠正错误!

1 个答案:

答案 0 :(得分:1)

我知道的一些答案:

  1. 你是对的,DASH讨论主要集中在视频上,但纯音频DASH仍然非常可行。
  2. a)Media Source Extensions API(MediaSource.addSourceBuffer())绝对是在JavaScript中实现单个源的DASH播放的正确方法。 DASH&amp; MSE是在同时开发的,旨在共同努力。寻找有关MSE和DASH的更多参考资料。
  3. b)一旦你通过MSE播放一个DASH源流,那么你需要将两个源混合在一起组成一个输出,这可能会使用Web Audio API,尽管我不是熟悉该API的细节。
  4. 我将添加一条评论,即除非有您没有提及的要求,否则在客户端组合两个曲目似乎不是一个好主意。使用ffmpeg或类似的媒体服务器工具在服务器端进行混合更有意义,然后您的客户端只需要担心单个流。如果需要同步不同的源流,那么在浏览器中使用JavaScript可能是不现实的。