我有这个应用程序,我在这里显示内容与视频文件在一起。视频文件可以是image/jpeg(根据vlc的MJPG格式)或video/x-h264格式。
为了做到这一点,我使用了一个结合了视频输出元素的mediassource来显示视频。当使用h264时,这是完美的。但是,对于mjpg视频文件,这根本不起作用。但是我不知道该怎么做。我已经阅读了使用ffmpeg或vlc的库,但我似乎找不到与QML元素结合使用的库,只能使用常规的QWidgets。
这里是一些相关的代码,它真的很简单,我宁愿保持简单。所以理想情况下,我只是在寻找一种方法来获得一个编解码器到项目或类似的东西。
property string videoLocation
FileDialog {
id: videoFileDialog
onAccepted: {
videoLocation = fileUrl
}
}
MediaPlayer {
id: mediaplayer
source: videoLocation
autoPlay: false
}
VideoOutput {
id: videoOutput
source: mediaplayer
}
可能有关:我的系统是ubuntu 13.04,我用的是qt 5.3。提前谢谢
编辑:我已经找到了我认为的问题:流是使用gstreamer> 1.0记录的。由于某些原因,它不会在0.10中重新播放。如果我使用相同的设置进行记录,但是使用gstreamer 0.10,那么一切都很好,我的应用程序也可以工作(尽管这个选项是不可行的,我真的需要使用> 1进行捕获)
下面是我用来捕获流到文件的代码:
gst-launch-0.10 v4l2src device=/dev/cam1 ! image/jpeg,width=320,height=240,framerate=30/1 ! matroskamux ! filesink location=videotest.mkv
关于新旧streamer之间兼容的设置有什么建议吗?
在*nix平台上,QtMultimedia使用GStreamer作为其后端。在GStreamer的网站上,JPEG似乎是一种支持的格式(人们会假设它包括motion JPEG)。
检查你的包管理器,确保你已经安装了所有的GStreamer插件。Ubuntu上至少有三个不同的GStreamer插件包
所以我通过使用avi容器而不是matroska容器来修复它。不知道为什么现在管用,而对matroska没用。我只能诚实地认为这一定是一个bug。