GStreamer构建RTP发送端传输H264/AAC报错,求修正方法
问题修正方案
错误原因分析
- 命名引用错误:你将
mp4mux命名为mp4,但后续引用时误写为mp40.,导致GStreamer无法找到对应的sink元件,触发No sink-element named "(null)"错误。 - 管道逻辑错误:
rtph264pay仅能处理H264裸码流,而mp4mux输出的是封装后的MP4容器流,两者不兼容,会导致链路无法正常工作。
修正方案
根据你的需求选择以下两种方案之一:
方案1:分别传输H264视频与AAC音频RTP流(双UDP端口)
如果需要独立传输音视频RTP流,直接去掉mp4mux,分别对音视频做RTP打包:
gst-launch-1.0 -e -vv \ v4l2src device=/dev/video0 ! videoconvert ! queue ! openh264enc ! h264parse ! rtph264pay ! udpsink host=127.0.0.1 port=5003 \ autoaudiosrc ! queue ! audioconvert ! audioresample ! avenc_aac ! aacparse ! rtpaacpay ! udpsink host=127.0.0.1 port=5004
- 视频流通过5003端口发送,音频流通过5004端口发送,接收端可分别解析两个RTP流。
方案2:封装为MP4后通过RTP传输(单UDP端口)
如果需要将音视频封装为MP4再用RTP发送,需修正命名引用并替换为适配MP4流的rtpmp4pay元件:
gst-launch-1.0 -e -vv \ v4l2src device=/dev/video0 ! videoconvert ! queue ! openh264enc ! h264parse ! mp4. \ autoaudiosrc ! queue ! audioconvert ! audioresample ! avenc_aac ! aacparse ! mp4. \ mp4mux name=mp4 ! rtpmp4pay ! udpsink host=127.0.0.1 port=5003
- 修正了
mp4mux的引用(mp4.而非mp40.),使用rtpmp4pay处理MP4容器流的RTP打包。
内容的提问来源于stack exchange,提问作者R.A.
相关产品推荐
相关产品推荐

