通过 webRTC 进行全品质 MP3 流式传输
Full quality MP3 streaming via webRTC
我对 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 或 pluginless 选项?
编辑:我也偶然发现了这个 'shoutcast kinda' 人 http://unltd.fm/ ,他们宣称他们正在使用 webRTC 提供高质量的无线电广播,包括流式 mp3。如果是,那又如何?
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看到区别
我是 unltd.fm 的创始人。
igorpavlov 是对的,但我无法评论答案。我们还在 WebRTC 上使用 OPUS(立体声/48Khz)编解码器。
使用 webaudio 解码 mp3(或任何其他音频格式)然后在 OPUS 中编码是可行的方法。您 "just" 需要强制 SDP 协商使用 OPUS。
您应该给我们发一封电子邮件,这样您就可以节省您的 50 分 ;)
您可以通过将 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
我对 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 或 pluginless 选项?
编辑:我也偶然发现了这个 'shoutcast kinda' 人 http://unltd.fm/ ,他们宣称他们正在使用 webRTC 提供高质量的无线电广播,包括流式 mp3。如果是,那又如何?
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看到区别
我是 unltd.fm 的创始人。
igorpavlov 是对的,但我无法评论答案。我们还在 WebRTC 上使用 OPUS(立体声/48Khz)编解码器。 使用 webaudio 解码 mp3(或任何其他音频格式)然后在 OPUS 中编码是可行的方法。您 "just" 需要强制 SDP 协商使用 OPUS。
您应该给我们发一封电子邮件,这样您就可以节省您的 50 分 ;)
您可以通过将 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