Gstreamer opusec 编码器产生 distorted/choppy 音频

Gstreamer opusenc encoder produces distorted/choppy audio

我正在使用以下 gstreamer 管道获取 RTMP src 并使用 opusec 编码器对其进行转码,并将其作为 rtp 数据包发送到 Mediasoup(一个 webrtc 库)。

gst-launch-1.0 \
  -v \
  rtpbin name=rtpbin rtp-profile=avpf do-retransmission=true \
  rtmpsrc location=rtmp://3.126.121.45:1935/live/qonda-injecttest-orig \
  ! flvdemux name=demux \
  demux.audio \
  ! queue \
  ! decodebin \
  ! "audio/x-raw,channels=2,rate=48000" \
  ! audioconvert \
  ! opusenc \
  ! rtpopuspay pt=101 ssrc=11111111 \
  ! rtpbin.send_rtp_sink_1 \
  rtpbin.send_rtp_src_1 ! udpsink host="3.69.236.199" port="41269" sync=true \
  rtpbin.send_rtcp_src_1 ! udpsink host="3.69.236.199" port="48143" sync=false async=false

但这会产生非常 choppy/distorted 的音频。样本 here.

我做错了什么?

听起来像是立体声音频隔行扫描问题,每个其他样本都被跳过了。您提供的输出样本是立体声 MP3,但两个声道完全相同。

尝试使用 channels=1 或尝试或删除 demux 处理。

找到解决问题的方法。所以回答我自己的问题。

我认为它与 mediasoup(我正在使用的 WebRTC 框架)更相关,它使用设置为 channels=2 & rate=48000 的 OPUS,但 gstreamer 中的 opusec 可以使用通道 1 或 8。设置 24000 的采样率解决了问题。

只需要在opusec之前添加如下一行:

! audioresample ! audio/x-raw, rate=24000