Lichee Pi TH1520上使用omxh264enc与mp4mux报错“Buffer has no PTS”求助
解决GStreamer MP4Mux/QTMux "Buffer has no PTS" 错误
问题根源
MP4Mux和QTMux都依赖媒体帧的**PTS(显示时间戳)**构建容器时间轴,你的管线中rawvideoparse use-sink-caps=true环节丢失了原始视频帧的PTS信息,导致封装器无法完成时间轴同步,最终触发报错。
解决方案
方案1:替换rawvideoparse为格式转换组件(推荐)
移除rawvideoparse,改用videoconvert适配编码器格式,同时完整保留原始时间戳:
gst-launch-1.0 filesrc location=test_h264.mp4 ! decodebin \ ! videoconvert ! video/x-raw,format=NV12 \ ! omxh264enc ! h264parse config-interval=1 ! mp4mux ! filesink location=t_h264.mp4
videoconvert:自动转换视频格式以匹配omxh264enc的输入要求,同时完整保留原始帧的PTS。video/x-raw,format=NV12:指定Lichee Pi TH1520平台OMX编码器兼容的常用格式(可根据硬件实际支持调整)。h264parse config-interval=1:强制编码器每隔1个关键帧输出SPS/PPS参数,确保MP4Mux能正确识别视频规格并初始化容器。
方案2:修复rawvideoparse的时间戳传递
如果必须保留rawvideoparse,需显式指定视频参数以确保时间戳正常传递:
gst-launch-1.0 filesrc location=test_h264.mp4 ! decodebin \ ! rawvideoparse use-sink-caps=true framerate=30/1 width=1920 height=1080 format=NV12 \ ! omxh264enc ! h264parse config-interval=1 ! mp4mux ! filesink location=t_h264.mp4
注意:需将framerate、width、height替换为输入视频的实际参数,否则仍可能出现时间戳不匹配问题。
验证方法
运行修改后的管线后,可使用ffprobe检查输出文件的时间戳信息:
ffprobe t_h264.mp4
若输出中start_time、duration等时间参数显示正常,则说明问题已解决。
内容的提问来源于stack exchange,提问作者Sakura286
相关产品推荐
相关产品推荐

