0

我正在开发一个示例 GStreamer 应用程序来播放 MPEG2TS 视频。

我的管道是:

应用程序!h264解析!ffdec_h264 !ffmpeg色彩空间!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)

上述日志不断重复。我没有任何线索,为什么会发生这种情况?任何输入将不胜感激。

在此先感谢,克兰蒂

4

1 回答 1

0

最后我发现了问题。计算非关键 [p/b] 帧的时间戳时出现问题,因为哪个解码器丢弃了所有非关键帧。

如果您遇到与我相同的问题,请重新检查发送到解码器的帧的时间戳计算

于 2013-04-15T04:35:46.213 回答