我正在开发一个示例GStreamer应用程序来播放MPEG2TS视频。
我的管道是:
appsrc! h264parse! ffdec_h264! ffmpegcolorspace! ximagesink
如果我在没有设置任何时间戳的情况下抽取数据,则会播放所有帧
videoBuffer = gst_app_buffer_new (rawVideo, bufSize, test_free_video, rawVideo);
但是如果我将时间戳设置为缓冲区,则只会播放I帧:
videoBuffer = gst_app_buffer_new (rawVideo, bufSize, test_free_video, rawVideo);
GST_BUFFER_TIMESTAMP(videoBuffer) = calc_timestamp(rawVideo);
calc_timestamp()
是根据PES标题信息计算时间戳的函数
来自GST_LOGS:
Dropping non-keyframe (seek/init)
Dropping non-keyframe (seek/init)
Dropping non-keyframe (seek/init)
以上日志正在重复进行。我没有任何线索,为什么会这样?任何意见都将不胜感激。
提前致谢, Kranti
答案 0 :(得分:0)
最后我发现了问题。计算非密钥[p / b]帧的时间戳时出现问题,因为解码器正在丢弃所有非关键帧。
如果您遇到与我相同的问题,请重新检查发送给解码器的帧的时间戳计算