繁体   English   中英

使用DASH流式传输多轨音频

[英]Streaming multi-track audio using 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.使用现有库

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

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

它,然而,含有大量的DASH相关的功能,如自适应流,MPD清单解析等等等等。

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


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

我知道的一些答案:

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

我将添加一个注释,即在客户端组合两个轨道似乎不是一个好主意,除非有你没有提到的要求。 使用ffmpeg或类似的媒体服务器工具在服务器端进行混合更有意义,然后您的客户端只需要担心单个流。 如果需要同步不同的源流,那么在浏览器中使用JavaScript可能是不现实的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM