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

GStreamer音视频网络流接收合并与splitmuxsink配置求助

解决GStreamer音视频合并传输并生成分段MP4的问题

方案1:基于MPEG-TS复用传输(推荐,简单可靠)

MPEG-TS天生支持多流复用,适合网络传输场景,能保证音视频同步和传输完整性。

发送端命令

将音视频流复用为MPEG-TS后通过UDP发送:

gst-launch-1.0 -v \
  videotestsrc ! videoconvert ! x264enc key-int-max=30 tune=zerolatency ! h264parse ! mpegtsmux name=mux \
  audiotestsrc ! audioconvert ! audioresample ! avenc_aac bitrate=128000 ! aacparse ! mux. \
  mux ! udpsink host=127.0.0.1 port=5000
  • key-int-max=30:每30帧生成一个关键帧,适配流媒体播放需求
  • tune=zerolatency:优化低延迟传输
  • mpegtsmux:将音视频流打包为单一路MPEG-TS流,简化网络传输逻辑

接收端命令

接收MPEG-TS流,分离音视频后合并生成分段MP4:

gst-launch-1.0 -v -e \
  udpsrc port=5000 ! application/x-mpegts ! tsdemux name=demux \
  demux.video_0 ! queue ! h264parse ! mp4mux name=mux \
  demux.audio_0 ! queue ! aacparse ! mux. \
  mux ! splitmuxsink location=/tmp/output-%05d.mp4 max-size-time=1000000000
  • tsdemux:解析MPEG-TS流,分离出视频(video_0)和音频(audio_0)轨
  • queue:添加缓冲,缓解网络抖动导致的音视频不同步
  • mp4mux:将音视频流合并为标准MP4格式
  • splitmuxsink:按max-size-time=1000000000(1秒)分割生成多个可独立播放的MP4文件

方案2:基于RTP会话多流传输(灵活度更高)

如果需要单独控制音视频的RTP传输参数,可使用rtpbin管理多流会话:

发送端命令

gst-launch-1.0 -v rtpbin name=rtpbin \
  videotestsrc ! videoconvert ! x264enc key-int-max=30 tune=zerolatency ! h264parse ! rtph264pay config-interval=1 pt=96 ! rtpbin.send_rtp_sink_0 \
  rtpbin.send_rtp_src_0 ! udpsink host=127.0.0.1 port=5000 \
  rtpbin.send_rtcp_src_0 ! udpsink host=127.0.0.1 port=5001 sync=false async=false \
  udpsrc port=5005 ! rtpbin.recv_rtcp_sink_0 \
  audiotestsrc ! audioconvert ! audioresample ! avenc_aac bitrate=128000 ! aacparse ! rtpaacpay pt=97 ! rtpbin.send_rtp_sink_1 \
  rtpbin.send_rtp_src_1 ! udpsink host=127.0.0.1 port=5002 \
  rtpbin.send_rtcp_src_1 ! udpsink host=127.0.0.1 port=5003 sync=false async=false \
  udpsrc port=5006 ! rtpbin.recv_rtcp_sink_1
  • 视频流使用端口5000(RTP)、5001/5005(RTCP同步反馈)
  • 音频流使用端口5002(RTP)、5003/5006(RTCP同步反馈)

接收端命令

gst-launch-1.0 -v -e rtpbin name=rtpbin \
  udpsrc port=5000 caps="application/x-rtp,media=video,clock-rate=90000,encoding-name=H264,payload=96" ! rtpbin.recv_rtp_sink_0 \
  rtpbin.recv_rtp_src_0 ! rtph264depay ! h264parse ! queue ! mp4mux name=mux \
  udpsrc port=5001 ! rtpbin.recv_rtcp_sink_0 \
  rtpbin.send_rtcp_src_0 ! udpsink host=127.0.0.1 port=5005 sync=false async=false \
  udpsrc port=5002 caps="application/x-rtp,media=audio,clock-rate=44100,encoding-name=AAC,payload=97" ! rtpbin.recv_rtp_sink_1 \
  rtpbin.recv_rtp_src_1 ! rtpaacdepay ! aacparse ! queue ! mux. \
  udpsrc port=5003 ! rtpbin.recv_rtcp_sink_1 \
  rtpbin.send_rtcp_src_1 ! udpsink host=127.0.0.1 port=5006 sync=false async=false \
  mux ! splitmuxsink location=/tmp/output-rtp-%05d.mp4 max-size-time=1000000000
  • 分别接收音视频RTP流,解封装后合并到mp4mux,最终生成分段MP4

关键注意事项

  • 发送端与接收端的编码格式、RTP caps必须完全匹配,否则会出现流无法解析的问题
  • splitmuxsink的max-size-time单位为纳秒,1秒对应1000000000
  • 务必添加-e参数,确保程序退出时发送EOS信号,生成的MP4文件才能正常播放
  • queue元素可有效缓解网络抖动导致的音视频不同步问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:32:05