【问题标题】:Streaming music over WebRTC cutting in and out通过 WebRTC 切入和切出流式传输音乐
【发布时间】:2021-01-05 20:51:20
【问题描述】:

我们希望能够在另一个标签(比如 YouTube、Spotify、Soundcloud 等)中播放音乐,然后通过 WebRTC 连接将其流式传输到其他对等方。

我们通过屏幕共享进行此操作,而且它大部分时间都在工作,但音乐有时会为听众切入和切出,从而产生断断续续的声音。换句话说,对于发送它的人来说听起来很流畅(即从原始 URL 共享它),但对于 WebRTC 连接的接收方来说听起来很不稳定。

对可能导致这种情况的任何想法?这是缓冲问题吗?如果是这样,它更有可能在发送端或接收端进行缓冲?

非常感谢您的帮助!

【问题讨论】:

    标签: webrtc streaming buffer audio-streaming screensharing


    【解决方案1】:

    WebRTC 倾向于低延迟而不是质量,目的是确保您可以进行正常的语音通信。为此,您的音频会发生很多事情:

    • 播放速率不断变化。如果播放落后,速度会加快。如果它超前,它会减慢速度。
    • 有一个非常小缓冲区,为播放缓冲区干涸创造了更多机会。
    • 如果数据包丢失,他们时间的音频将被简单地丢弃......跳过。播放不太可能稍作缓冲然后继续。
    • 当音频丢失时,会合成一些拖尾。这对语音来说很好,但对音乐来说听起来很糟糕。

    在媒体捕获端,还有一些音频“增强功能”旨在处理坏的网络摄像头麦克风,如果配置不正确,有时可以将其应用于其他媒体流。其中包括:

    • 回声消除
    • 降噪
    • 自动增益控制

    最后,默认情况下音频比特率通常很低。如果您想要立体声高品质音频,通常必须使用 SDP。

    综上所述,如果您关心质量,WebRTC 可能不是您的正确选择。我经常使用 MediaRecorder API。

    【讨论】:

    • 谢谢布拉德。很高兴了解 WebRTC。 MediaRecorder API 是否允许我将音频流式传输给其他对等方?从在线文档来看,听起来好像只是为了录制音频;我误读了吗?另外,我可以录制音频并同时将其流式传输回来吗?还是我首先需要完成录制曲目给他们流式传输?
    • @Leo 没有便捷的方式向其他对等方进行流式传输。您必须将 MediaRecorder 设置为每隔一两秒输出一次,然后获取这些块并以某种方式分发。您可以通过 WebRTC 对等数据连接发送此数据。这会带来很多延迟和令人头疼的问题,但您将获得质量更好的音频。
    • 所以基本上我会以延迟为代价在发送端手动创建一个更大的缓冲区。但是在接收端呢?如果问题是接收端的缓冲区不够大怎么办?
    • 在接收端,您可以缓冲和播放。我最近没有检查过 MediaRecorder 的输出是否可以与 MediaSource Extensions 一起使用……但这是最简单的方法,如果它确实有效的话。我过去所做的是在服务器端完成一些工作,并在接收端使用指向 Node.js 服务器的简单 <video> 标记进行回放。
    • 抱歉,没有完全关注。如果我使用 WebRTC 流式传输它,那么在接收端我将无法控制缓冲区(至少据我所知)。那么我将如何在接收端进行缓冲 - 再次使用 MedaRecorder 记录 1-2 秒的小块并播放它?附带问题 - 使用 Web Audio API 而不是 WebRTC 将音频发送给对等点怎么样?
    猜你喜欢
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 2015-04-10
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多