如何修改GStreamer 1.18.4管道消除警告及Chrome播放问题
GStreamer 1.18.4管道警告与Chrome播放错误修复方案
问题背景
当前使用GStreamer 1.18.4的管道可生成符合需求的MP4文件,但在Chrome的JSVideoPlayer中触发媒体错误4,同时出现多条GStreamer警告:
appsrc format=time is-live=true do-timestamp=true name=src ! application/x-rtp ! rtph264depay ! h264parse ! splitmuxsink max-size-time=300000000000 muxer=mp4mux muxer-factory=mp4mux muxer-properties="properties,streamable=true,reserved-moov-update-period=1000000000" location=video%02d.mp4
触发的警告信息
FIXME default gstutils.c:4025:gst_pad_create_stream_id_internal:<src:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id FIXME basesink gstbasesink.c:3384:gst_base_sink_default_event:<sink> stream-start event without group-id. Consider implementing group-id handling in the upstream elements WARN qtmux gstqtmux.c:3076:gst_qt_mux_start_file:<mp4mux0> Robust muxing requires reserved-moov-update-period to be set FIXME aggregator gstaggregator.c:1365:gst_aggregator_aggregate_func:<mp4mux0> Subclass should call gst_aggregator_selected_samples() from its aggregate implementation.
修复方案
针对警告和播放问题,调整管道配置如下:
1. 解决随机Stream-ID与Group-ID警告
在appsrc后添加identity元素,手动指定固定的stream-id和group-id,替代默认的随机生成逻辑:
identity stream-id="h264_stream_01" group-id="video_group_01" !
2. 修正reserved-moov-update-period参数传递
原管道中muxer-properties的格式不符合GStreamer 1.18的要求,需改用muxer-property逐个配置参数:
splitmuxsink max-size-time=300000000000 muxer=mp4mux muxer-property="streamable=true" muxer-property="reserved-moov-update-period=1000000000" location=video%02d.mp4
3. 处理aggregator内部FIXME警告
该警告属于GStreamer 1.18版本中mp4mux的实现缺陷,无法通过管道配置消除,但不影响功能稳定性。若要彻底解决,需升级到GStreamer 1.20及以上版本(后续版本已修复此问题)。
4. 解决Chrome媒体错误4
Chrome媒体错误4多因MP4文件的时间戳或moov原子位置异常导致,在h264parse后添加queue元素稳定数据流,同时确保mp4mux的streamable参数正确设置:
h264parse ! queue !
完整修复后的管道
appsrc format=time is-live=true do-timestamp=true name=src ! identity stream-id="h264_stream_01" group-id="video_group_01" ! application/x-rtp ! rtph264depay ! h264parse ! queue ! splitmuxsink max-size-time=300000000000 muxer=mp4mux muxer-property="streamable=true" muxer-property="reserved-moov-update-period=1000000000" location=video%02d.mp4
额外说明
- 若在应用代码中使用
appsrc,建议直接通过代码发送GST_EVENT_STREAM_START事件并手动设置stream-id和group-id,比identity元素更高效。 - 升级GStreamer版本不仅能消除aggregator警告,还能提升MP4封装的兼容性,进一步降低Chrome播放异常概率。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

