试用qt-gstreamer(1)前两天偶然在网上看到gstreamer有了qt绑定qt-gstreamer,而且可以在windows下使用了,正好觉得qt没有一个好的多媒体框架(phonon无论是用mplayer、vlc还是ds9后端总感觉可以控制的参数不够多,而且只能解码不能编码,),于是就google了一把,按照 里面的指令,费了两天的时间,再虚拟机里面装好了先后装好了qt开发环境,gstreamer开发环境和qt-gstreamer开发环境。
接下来就是运行qt-gstreamer的例子,首先运行player.exe,嗯?!怎么除了图形界面之外还有一个命令行窗口?faint,这样太丑了吧。
然后打开了一个windows xp自带的一个avi文件c:\windows\clock.avi,这个视频时显示一个时钟,从0秒走到12秒。结果在命令行窗口上显示打开资源失败的字样,用vs2008调试,发现送给gstreamer的uri是file://c:/windows/clock.avi,一般windows路径名转换成uri好像应该是file:///c:/wndows/clock.avi吧,于是修改player。cpp的setUri函数,将file://改成file:///重新编译之后,终于能够打开文件了。可是仍然显示什么d3dvideosink无法创建,我这个是虚拟机,不带3d加速的,难道是因为这个原因所以无法使用d3dvideosink?不知道怎么修改gstreamer的videosink优先级,于是将libgstd3dvideosink.dll改名,这样gstreamer就使用directshow插件来显示视频了,终于可以看到图像了,可是显示的仍然有问题,不是一个圆形的时钟,而是两个斜着的扁扁的椭圆,用ffplay也有同样的问题,用vlc播放就是正常的,用mediainfo查看这个文件的编码方式,是microsoft RLE编解码器,太罕见了,姑且忽略这个问题吧。
接下来用MP4文件测试了一下,还行,能够播放,只是cpu占用率有点高,大概是用vlc和ffplay播放时cpu占用率的2倍,按理来说播放MP4文件gstreamer使用的是ffmpeg后端,和ffplay播放应该是一样的性能才对啊。开始怀疑是qt显示的问题,于是用gst-player.exe进行播放,发现cpu占用率没有变,仍然很高,需要说明的是我测试用的这个ffplay用的ffmpeg和gstreamer用的是同一个dll文件,因此看来应该是图形输出的问题才对。于是不播放视频文件,改播放MP3和aac文件,这下就和vlc播放时的cpu占用率一致了。看来我怀疑是视频输出插件的问题是有道理的。而且用qt-gstreamer的例程player.exe播放视频时还有一个问题,就是如果失去焦点的时候,有时候过一会视频显示窗口就不见了,全部变成空白状态,此时移动窗口,或者用其他窗口覆盖一次,视频窗口又出来了。gst-player.exe播放时没有这个问题,估计是qt控件刷新模式的问题吧。
我没有摄像头因此无法测试windows下qt-gstreamer的录像功能。
然后再linux下编译了一下qt-gstreamer,还不错,这linux下player例程和vlc、mplayer的cpu暂用率完全一样,而且播放时也没有显示异常的问题。linux下的recoder例程支持录制x11的屏幕,不过只能记录为ogv格式,测试编码25帧发现cpu占用率较低,而且录制的视频很流畅,就是码率比较高,不过那是因为没有设置录制的码率。
流水账记录完了,这个总结吧。个人感觉,gstreamer用在linux下开发音视频程序是一个不错的选择,特别是在很多嵌入式平台上没有mplayer和vlc的硬件加速插件,但是会有gstreamer插件(如freescale和ti的cpu就会提供)。有qt-gstreamer的帮助,能降低用qt开发音视频程序的难度。
但是在windows平台上,很遗憾,我觉得gstreamer是一个非常不错的玩具,但是不适合用于正式的产品开发。
我很懒,不愿意截图,以后有时间的、大家又对这个感兴趣的话再上图片吧。
阅读(3698) | 评论(0) | 转发(0) |