代码之家  ›  专栏  ›  技术社区  ›  Max Yari

通过webRTC传输高品质MP3流

  •  4
  • Max Yari  · 技术社区  · 10 年前

    我对webRTC从用户机器上P2P直播mp3音频的能力很感兴趣。我发现的唯一一个例子是: https://webrtc-mp3-stream.herokuapp.com/ 来自本文 http://servicelab.org/2013/07/24/streaming-audio-between-browsers-with-webrtc-and-webaudio/

    但是,正如您所看到的,接收端的音频质量非常差(45kb/sec),有没有任何方法可以获得完全质量的MP3流+在每个用户端处理该流的数据(如使用均衡器调整频率)的能力?

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

    编辑:我也偶然发现了这个“Shootcast”的家伙 http://unltd.fm/ ,宣称他们正在使用webRTC来提供包括流媒体mp3在内的高质量无线电广播。如果是,那怎么办?

    3 回复  |  直到 9 年前
        1
  •  3
  •   Community    7 年前

    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看到差异。

        2
  •  2
  •   Yannick Gouez    9 年前

    我是unltd.fm的创始人。

    伊戈帕夫洛夫是对的,但我不能评论这个答案。我们还在WebRTC上使用OPUS(立体声/48Khz)编解码器。 使用webaudio解码mp3(或任何其他音频格式),然后在OPUS中编码。你“只”需要迫使SDP谈判使用OPUS。

    您应该向我们发送一封电子邮件,这样您就可以节省50分;)

        3
  •  1
  •   Community    3 年前

    您可以通过将SDP设置为立体声并提高最大平均比特率来提高流的质量:

    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