You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于GStreamer的IP摄像头音视频RTSP管道构建问题求助

处理IP摄像头音视频双流的GStreamer RTSP管道问题

当摄像头仅发送视频流时,以下管道可正常运行:

rtspsrc location=%s latency=0 !  
rtph264depay ! h264parse !  
video/x-h264,stream-format=byte-stream,alignment=au ! queue ! appsink sync=TRUE emit-signals=TRUE name=appsink-video  

但摄像头同时推送音视频流时,管道无法正常工作,以下是两次失败的尝试及问题:

第一次尝试

管道代码:

rtspsrc location=%s name=source ! application/x-rtp,payload=96,media=video ! rtph264depay ! h264parse ! appsink sync=TRUE emit-signals=TRUE name=appsink-video  
source. ! application/x-rtp,payload=97,media=audio,clock-rate=8000,encoding-name=MPEG4-GENERIC,mode=AAC-hbr ! rtpmp4gdepay ! aacparse ! audio/mpeg,mpegversion=4,stream-format=adts ! queue ! appsink sync=TRUE emit-signals=TRUE name=appsink-audio  

出现错误:

DEBUG aacparse gstaacparse.c:306:gst_aac_parse_sink_setcaps:<aacparse0> setcaps: audio/mpeg, mpegversion=(int)4, stream-format=(string)raw  
ERROR aacparse gstaacparse.c:354:gst_aac_parse_sink_setcaps:<aacparse0> Need codec_data for raw AAC  

第二次尝试

管道代码:

rtspsrc location=%s latency=0 !  
capsfilter caps=application/x-rtp,media=video,payload=96,encoding-name=H264 !  
rtph264depay ! h264parse !  
video/x-h264,stream-format=byte-stream,alignment=au ! queue !  
appsink sync=TRUE emit-signals=TRUE name=appsink-video  
rtspsrc location=%s latency=0 !  
capsfilter caps=application/x-rtp,media=audio,payload=97,encoding-name=MPEG4-GENERIC,clock-rate=8000,mode=AAC-hbr !  
rtpG726depay ! parsebin !  
audio/mpeg,mpegversion=4,stream-format=adts ! queue !  
appsink sync=TRUE emit-signals=TRUE name=appsink-audio  

该尝试同样失败。

环境说明

  • 基于Buildroot构建的嵌入式环境,GStreamer配置极简,插件有限
  • 无需转码,仅需实现流的隧道传输

解决方案建议

  1. 修复音频管道插件错误:第二次尝试误用了rtpG726depay,你的音频流是MPEG4-GENERIC(AAC),应使用rtpmp4gdepay,与第一次尝试保持一致。

  2. 解决AAC codec_data缺失问题:

    • 跳过aacparse直接传输:如果仅需隧道传输,不需要解析AAC格式,可直接移除aacparse和audio/mpeg,mpegversion=4,stream-format=adts部分,让rtpmp4gdepay的输出直接进入queue ! appsink。
    • 确认SDP携带codec_data:检查摄像头RTSP SDP是否包含AAC配置信息,若存在,rtspsrc会将其传递给rtpmp4gdepay,此时aacparse可正常工作。可通过gst-launch-1.0 rtspsrc location=... ! fakesink -v查看caps是否包含codec_data字段。
  3. 复用单个rtspsrc:避免使用两个rtspsrc连接同一摄像头,复用同一个rtspsrc的两个分支更高效,还能保证音视频同步。

推荐调整后的管道:

rtspsrc location=%s name=source latency=0 ! 
application/x-rtp,payload=96,media=video ! rtph264depay ! h264parse ! 
video/x-h264,stream-format=byte-stream,alignment=au ! queue ! appsink sync=TRUE emit-signals=TRUE name=appsink-video
source. ! 
application/x-rtp,payload=97,media=audio,clock-rate=8000,encoding-name=MPEG4-GENERIC,mode=AAC-hbr ! rtpmp4gdepay ! queue ! appsink sync=TRUE emit-signals=TRUE name=appsink-audio

内容的提问来源于stack exchange,提问作者Luca Olimpio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 01:52:38