【问题标题】:Full quality MP3 streaming via webRTC通过 webRTC 流式传输全品质 MP3
【发布时间】:2015-04-10 23:12:36
【问题描述】:

我对 webRTC 能够从用户的机器 P2P 直播 mp3 音频感兴趣。唯一的例子,我发现的是:https://webrtc-mp3-stream.herokuapp.com/ from this article http://servicelab.org/2013/07/24/streaming-audio-between-browsers-with-webrtc-and-webaudio/

但是,正如您所看到的,接收端的音频质量很差(45kb\sec),有没有办法获得完整质量的 MP3 流媒体 + 处理该流数据的能力(如使用均衡器调整频率)在每个用户的一边?

如果无法通过 webRTC,是否有任何其他 flash-plugin 或无插件选项?

编辑:我还偶然发现了这个'shoutcast kinda'家伙http://unltd.fm/,宣称他们正在使用webRTC来提供高质量的广播,包括流媒体mp3。如果是,那又如何?

【问题讨论】:

  • 好吧,我假设您可以从将 mp3 转码为 OPUS 的服务器进行流式传输,然后在客户端获得流式传输后,您可以使用音频 API 进行所有您想要的操作.
  • 但是如果我们谈论的是 peer2peer,即这里没有涉及服务器?
  • WebRTC 根本不直接支持 MP3 流。在通过对等连接发送之前,mp3 必须在某个时候由某人转码为 PCMA/U 或 Opus。我唯一能想到的另一件事是某种数据连接并以数据块的形式通过 mp3 发送并在另一端重新编译它们以播放,但我不确定这是否可能。
  • 我建议您将标题稍微更改为“通过 webRTC 进行全质量 MP3 流式传输”(添加一个空格),以便更好地进行搜索。
  • 完成,感谢您的建议。

标签: mp3 html5-audio webrtc audio-streaming p2p


【解决方案1】:

WebRTC 支持 2 种音频编解码器:OPUS(最大比特率 510kbit/s)和 G711。你坚持使用 OPUS,它是 2012 年推出的,它更现代,更有前途。

webrtc-mp3-stream 中的主要文件已过期 2 年(2013 年 7 月 18 日)。我在代码中找不到 OPUS 偏好,所以演示可能通过 G711 运行。

webrtc-mp3-stream 演示执行编码工作(MP3 作为媒体源),然后通过 WebRTC 通过 UPD/TCP 传输数据。我认为您不需要在接收器端将其解码为 MP3,这将是一种矫枉过正。只需尝试启用 OPUS 以使 webrtc-mp3-stream 的代码更新。

请参考Is there a way to choose codecs in WebRTC PeerConnection? 让OPUS 看到差异。

【讨论】:

  • Opus 听起来很有趣(unltd 上的那些人也很喜欢它)目前我无法花一天时间研究那个 webrtc-mp3-stream 示例,更改编解码器并测试所有可能性,我需要,这似乎是一条正确的路,因此,赏金不能再等一个星期,我接受你的回答,赏金是你的,谢谢。
  • 哦,等一下,我可以接受答案,不悬赏,哦,那么,如果你不介意,我再等几天,谁知道呢,说不定还会出现一些有趣的回复,如果没有,那么赏金就是你的了)
  • 顺便说一句。目前是否有任何理由,无法将此 OPUS 流提供给双方的网络音频 api,并通过一个来操作它们?
  • 我不确定我是否完全理解您,您能否告诉我们“将此 OPUS 流提供给双方的网络音频 api,并通过一个操作它们”是什么意思?跨度>
  • 也许是我的英语背叛了我,或者我对音频 api 有一些了解,但我的意思是使用网络音频 api 在一侧播放初始音频文件,并在另一侧使用相同的 api 播放收到的 OPUS 流+ 使用 api 操作音频数据的能力,特别是制作图形均衡器等
【解决方案2】:

我是 unltd.fm 的创始人。

igorpavlov 是对的,但我无法评论答案。我们还通过 WebRTC 使用 OPUS(立体声/48Khz)编解码器。 使用 webaudio 解码 mp3(或任何其他音频格式)然后在 OPUS 中对其进行编码是可行的方法。您“只是”需要强制 SDP 协商使用 OPUS。

您应该向我们发送一封电子邮件,您会节省 50 分;)

【讨论】:

  • 由于某种原因我没有考虑过,但是看到您的直接回复真的很高兴,谢谢)那 50 分已经厌倦了坐在一个地方。所有这些 WebRTC 运动都非常吸引人,音频流已经完全成为可能,而且似乎全尺寸 p2p 视频流正在路上。啊,未来……遗憾的是,我们还没有气垫板。
【解决方案3】:

您可以通过将 SDP 设置为立体声并增加 maxaveragebitrate 来提高流的质量:

let answer = await peer.conn.createAnswer(offerOptions);
answer.sdp = answer.sdp.replace('useinbandfec=1', 'useinbandfec=1; stereo=1; maxaveragebitrate=510000');
await peer.conn.setLocalDescription(answer);

这应该输出一个 SDP 字符串,如下所示:

a=fmtp:111 minptime=10;useinbandfec=1; stereo=1; maxaveragebitrate=510000

这为立体声提供了 520kb/s 的潜在最大比特率,即每通道 260kps。实际比特率取决于您的网络速度和信号强度。

您可以阅读更多关于其他可用 SDP 属性的信息:https://www.rfc-editor.org/rfc/rfc7587

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 2019-06-16
    • 1970-01-01
    • 2016-03-19
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多