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
我正在使用以下 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