gstreamer-vaapi管道,为什么它不工作以及如何解决它?

时间:2012-03-14 02:10:04

标签: video gstreamer glib

我正在尝试使用gstreamer,我觉得这很有效:

gst-launch-0.10 -v filesrc location=/path/to/file.mp4 ! qtdemux ! vaapidecode ! vaapisink

我希望能够将视频输出到我的窗口,我已经尝试了但没有成功

gst-launch-0.10 -v filesrc location=/path/to/file.mp4 ! qtdemux ! vaapidecode ! vaapidownload | appsink

这个例子很简单,因为我还在学习gstreamer,所以我的想法是为gstreamer提供我自己的opengl纹理来播放vaapi解码的视频。任何提示都将受到高度赞赏。

编辑:

gst-inspect of:

vaapidecode http://pastebin.com/8TSJF7jN

vaapidownload http://pastebin.com/JzV17v33

vaapisink http://pastebin.com/ZkMBVh8v

appsink http://pastebin.com/ehkQsraM

这是第二个管道的输出:http://pastebin.com/9mqjsLUq

更新

相同的输出,但日志级别为3:http://pastebin.com/GRGTVYVm

3 个答案:

答案 0 :(得分:0)

格式很好。否则会导致未协商或数据流错误。我怀疑由于某种原因,表面不是“可下载的”。如果您运行GST_DEBUG =“*:3”gst-launch ....或更高版本,日志会提供更多信息吗?

答案 1 :(得分:0)

根据您为第二个命令行发布的输出,看起来该命令正在运行。 vaapidecode将视频解码为x-surface,vaapidownload占用x-surface并输出x-raw-yuv,而appsink绝对消耗任何而不产生任何其他东西(因此它看起来什么都不做)。尝试将原始YUV复用到YUV4MPEG(.y4m)文件中:

gst-launch-0.10 -v filesrc location=/path/to/file.mp4 ! qtdemux ! vaapidecode ! vaapidownload | y4menc ! filesink location=decoded-video.y4m

查看该命令是否生成.y4m文件,然后使用VLC或MPlayer或ffplay观看该视频以验证其是否正确。

答案 2 :(得分:0)