• 13465阅读
  • 6回复

试用qt-gstreamer(1) [复制链接]

上一主题 下一主题
离线cycloneii
 

只看楼主 倒序阅读 楼主  发表于: 2011-04-14
前两天偶然在网上看到gstreamer有了qt绑定qt-gstreamer,而且可以在windows下使用了,正好觉得qt没有一个好的多媒体框架(phonon无论是用mplayer、vlc还是ds9后端总感觉可以控制的参数不够多,而且只能解码不能编码,),于是就google了一把,按照 http://gstreamer.freedesktop.org/wiki/QtGStreamer/BuildingOnWindows里面的指令,费了两天的时间,再虚拟机里面装好了先后装好了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是一个非常不错的玩具,但是不适合用于正式的产品开发。
我很懒,不愿意截图,以后有时间的、大家又对这个感兴趣的话再上图片吧。
离线yyy30876

只看该作者 1楼 发表于: 2011-04-14
期待教程
离线br4hssm9
只看该作者 2楼 发表于: 2011-04-15
Re:[原创]试用qt-gstreamer(1)
离线jacke_wang
只看该作者 3楼 发表于: 2011-12-21
Hi 你好,我最近也在windows下搭建QtGstreamer环境,编译过程遇到问题,能否发一份你当时编译出来的QtGstreamer SDK 给我呢?万分感谢,邮箱:jacke_wang@yeah.net
离线cycloneii

只看该作者 4楼 发表于: 2011-12-22
嗯,没有想到这么久的帖子还有人顶。我来说说后续的一点小发行吧。
今天为了帮jacke_wang编译qtgstreamer,我无意中发现如果用qt creator打开player工程的player.pro,加QT += gui,结果编译出来的player.exe执行是不再显示命令行窗口了,同样,如果用qmake而不是cmake来编译recorder和voip例子,在生成的pro文件里面加上QT += gui,同样可以不再显示命令行窗口。cmake和qmake的行为为什么不同,还没有分析出来,不过总的来说我觉得qtgstreamer应该可以用来开发windows下的音视频应用了,虽然它支持的格式和渲染器还不够多,性能比directshow的要差一些,不过作为开源,而且跨平台的框架,你还能要求更多吗?那就自己动手去改吧,为开源做贡献
离线xiao8458442
只看该作者 5楼 发表于: 2012-01-01
linux下的recoder例程支持录制x11的屏幕,不过只能记录为ogv格式,测试编码25帧发现cpu占用率较低,而且录制的视频很流畅,就是码率比较高,不过那是因为没有设置录制的码率。
流水账记录完了,这个总结吧。个人感觉,gstreamer用在linux下开发音视频程序是一个不错的选择,特别是在很多嵌入式平台上没有mplayer和vlc的硬件加速插件,但是会有gstreamer插件(如freescale和ti的cpu就会提供)。有qt-gstreamer的帮助,能降低用qt开发音视频程序的难度。
LINUX 非常强大。
离线pysz
只看该作者 6楼 发表于: 2012-05-11
回 楼主(cycloneii) 的帖子
我想请教一下,有没有试过交叉编译QtGstreamer?
我交叉编译用的是arm-none-linux-gnueabi-gcc,而QtGstreamer的编译用的是cmake,这导致在交叉编译的时候出现库不兼容的错误,请问如何解决?
快速回复
限100 字节
 
上一个 下一个