2015-11-03 102 views
1

我对gstreamer很陌生,试图在现有管道上获取一些指标。管道被设置为'appsrc队列mpegvideoparse avdec_mpeg2video deinterlace videobalance xvimagesink'。gstreamer获取视频播放事件

xvimagesink只有一个接收板,我不确定它的输出连接到哪里以及如何连接,但我有兴趣知道实际视频设备/缓冲区何时显示第一个I帧,然后视频开始滚动。

该应用程序将流水线状态设置为“播放”很早,因此,聆听此事件并没有帮助。

问候,

回答

3

退房GST_MESSAGE_STREAM_STARTprobes。但是,我不确定你想要什么:在GStreamer级别,你只能通过某个元素检测缓冲区的时间,而不是实际显示的时间。

xvimagesink没有srcpad(输出),只有sinkpad(输入)。

你可以阅读有关的前贴片位置:http://cgit.freedesktop.org/gstreamer/gstreamer/tree/docs/design/part-preroll.txt

请务必阅读GStreamer的手动头: http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/index.html

+0

我会考虑更有效地使用探头,但我的问题是,出现在第一个I帧屏幕,然后大约需要2秒才能开始播放视频。我试图找出是什么原因造成了这种延迟,并且能够测量任何变化的影响,我想从视频解码器获得一个事件/打印,并以此为基础进行调用。我在我的gstreamer日志中看到ffmpeg视频解码器的提及,你知道我如何从播放器中获取IFrame,视频播放等事件吗? –

+1

让我推荐你我的[GStreamer profiler](https://github.com/kirushyk/gst-instruments),你可以找出你的时间元素。 –

+0

看起来很有用,我会试试看。但是,在探测器建议之后,现在我可以监视管道中的数据流,但是当数据进入xvimagesink元素时,它全部消失。我也想从视频解码器(ffmpeg)获取一些指标。因为,我们的应用程序将mpeg-2 ts从文件提供给appsrc,然后在appsrc和队列之间有我们的插件,可以实现软解复用。因此,我想确保数据能够有效地为viddec调整数据。我特别感兴趣的事件是首先显示的I-帧和视频播放/停止/暂停转换。 –