Gstreamer合并异源音视频推流RTMP及麦克风降噪问题问询
问题1:合并音频到RTMP推流命令的实现
你原有的推流命令中已经定义了flvmux name=mux封装元件,只需新增音频采集编码分支,将处理完成的音频流送入mux的音频输入端即可,完整命令如下:
gst-launch-1.0 -e v4l2src device=/dev/v4l/by-path/platform-fe801000.csi-video-index0 ! video/x-raw,format=UYVY,framerate=20/1 ! videoconvert ! videoscale ! video/x-raw, width=1280,height=720 ! videocrop top=0 left=0 right=800 bottom=0 ! videoflip method=counterclockwise ! omxh264enc ! h264parse ! mux. \ alsasrc device="hw:1,0" ! audio/x-raw,format=S16LE,rate=44100,channels=2 ! audioconvert ! audioresample ! voaacenc ! aacparse ! mux. \ flvmux name=mux streamable=true ! rtmpsink sync=true async=true location='rtmp://XXXXX live=true'
参数说明:
- 音频分支采用AAC编码适配RTMP协议标准要求,若提示找不到
voaacenc元件,执行apt install gstreamer1.0-plugins-bad安装对应插件即可 - 移除了原音频录制命令中的
num-buffers=1000参数,避免推流过程中音频提前中断 - 音视频流都通过后缀
.mux绑定到预定义的flvmux元件,完成音视频同步封装后再推送至RTMP服务器
问题2:音频采集噪声大的解决方法
- 调整硬件输入增益:执行
alsamixer命令,按F6选择外接的麦克风声卡,找到麦克风增益调节项,将增益降至70%以下测试,输入增益过高是最常见的噪声来源 - 新增软件降噪模块:在音频分支的
audioconvert元件后添加WebRTC音频处理模块,修改后的音频分支片段如下:
alsasrc device="hw:1,0" ! audio/x-raw,format=S16LE,rate=44100,channels=2 ! audioconvert ! webrtcdsp noise-suppression-level=3 gain-control=true ! audioresample ! voaacenc ! aacparse ! mux.
webrtcdsp支持噪声抑制、自动增益控制,降噪等级可设置1-3,等级越高降噪强度越大。若提示找不到该元件,执行apt install gstreamer1.0-plugins-good安装即可
- 排查硬件干扰:检查麦克风接线是否接触不良,将音频线远离充电器、主板等电磁辐射源,也可更换带屏蔽层的音频线测试
- 增加频段滤波:如果存在稳定的低频底噪,可在
audioconvert后添加audiowsincband low-frequency=300 high-frequency=3400,过滤人声范围外的无用频段噪声
内容的提问来源于stack exchange,提问作者mevlut topal
相关产品推荐
相关产品推荐

