将PTS / DTS写入MPEG流(Gstreamer)

时间:2014-05-31 01:39:59

标签: encoding gstreamer mpeg-2 pts

因此,对于GNURadio项目,我正在向我的电视发送带有PSIP数据的MPEG-2视频。所述数据和视频的实际传递很好,但是视频没有被正确解码。它几乎是空白的,到处都是闪烁的块,快速移动的场景有更多的“垃圾”。它有点looks like this,除了大多数是黑色,“块”随机出现和消失。这应该是to look like this.

我在使用videtestsrc之前将其添加到我的调音台进行测试。我尝试了avconv,无论出于什么原因,它都没有这个问题。

这是管道,也在下面:

VIDEOFORMATIN='video/x-raw, format=UYVY, width=1920, height=1080, framerate=60/1, interlaced='true''
gst-launch-1.0 -v videotestsrc do-timestamp=true is-live=true ! $VIDEOFORMATIN \
! videoconvert ! queue ! \
avenc_mpeg2video bitrate=15000000 rc-max-rate=17000000 rc-min-rate=14000000 rc-buffer-size=300000 \
rc-buffer-aggressivity=0.25 ! \
filesink location=video.mpeg

它在mpv,SMPlater和TSReader中可以播放视频,但mpv命令输出中显示的错误是“

"[libav] NULL: start time is not set in estimate_timings_from_pts"

和...

"No PTS found! Making something up"

知道会发生什么事吗?当它是实时源时,如何编写正确的PTS / DTS值?是的,我必须使用MPEG-2和gstreamer。

2 个答案:

答案 0 :(得分:0)

正如您所注意到的那样,您缺少PTS / DTS值,这些值是解码器的基本时间戳:它告诉您何时解码并呈现帧。我不认为您可以手动生成它,因为它通常在多路复用操作期间完成。

似乎mpv成功地模仿了它们,这就是为什么你有一个干净的渲染,但显然你的电视不能。

您是否尝试与ffmpeg进行多路复用?

答案 1 :(得分:0)

这也可能是因为编码管道严重受压。

您是否收到有关该编码管道的警告?以GST_DEBUG=3为例。 您使用的是什么版本的GStreamer?

通过videotestsrc生成一个1920x1080 @ 60fps的流是非常cpu密集的(它用于调试目的)。