Trying to play a video .... such a problem
-
Hi everybody !
I'm trying to make a QML plugin which can play a video. So I tryed some things :
- using Multimedia Toolkit : but I am under Windows OS (XP for developping and 7 for the execution)
- using Qt5.0 (great job guys ;)) on 7 looks great, but it still don't work on XP. Moreover QtQuick 2.0 have change the OpenGL version ... it can't work with my app ...
- using Phonon : it's a good widget, but when I add OpenGL, perfs are soooo bad ....
- using QMovie : I can't open a video file format :| just images are supported ....
So ...
Does anybody has the same problem or a resolution of this one (like the creation of a plugin ....) ?
Thank you guys !
-
You don't have to create anything. MultimediaPlayer, Audio and Video are the things ("link":http://doc-snapshot.qt-project.org/5.0-newdocs/qtmultimedia/qml-multimedia.html).
-
In fact, I have already try QT5.0 with QtQuick 2.0 .... but it isn't compatible with my app : I really need to use OpenGL as it was in the last version ...
Moreover : this doesn't work on my Win XP ....
-
I have done this recently based on Qt4.8/QtQuick1 using the VLC libraries (QtMediaHub was a good guidance on how to do this). Note that a VLC installation on Windows already contains the required VLC-Sdk. For me this works flawlessly on an XP machine. You can take a look at my code here: https://www.dropbox.com/s/djf3bav7ftcoa26/MediaPlayer.tar.gz This is of course work in progress...
I tried to mimic the behavior of the MediaPlayer and VideoOutput components that are provided by QtQuick2.
If you're buidling on a Windows machine don't forget to setup the paths to the VLC-Sdk in the MediaPlayer.pro file. On Linux you propably will have to install the vlc sdk separately.
mrc
-
Thank you so much mrcdrc ! This works quite well ... But I still face some problems ....
First, the video output has to be the last thing that my QML file draw otherelse my video won't be played (qml error message : main vout display error: Failed to set on top.).
Then, if I try to insert an Image object, my video don't play anymore ... Like a non-managed exception in qmlviewer, my app close and this qml error message : main vout display error: Failed to set on top.
Have you ever face this bug ? And do you have any lead to resolve this problem ?
Thank you folks !
Olivier -
Actually, the error message "main vout display error: Failed to set on top" is related to vlc. When i noticed it first, i googled a bit and found people stating that it can safely be ignored...
Are you using QGLWidget as i proposed in the provided example code? I meanwhile changed this to be conditionally invoked only if at least OpenGL 2.1 is present, i otherwise experienced significant performance hits on an older XP machine.I did something like:
@
if(QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_2_1) {
QGLWidget *glw = new QGLWidget;
viewer.setViewport(glw);
}
@So far i wasn't able to reproduce your problem when placing an 'Image {...}' on top - it shows up as expected while video is playing...
Maybe you can provide a stripped down code snipped to see if i can reproduce the problem (and possibly fix it).
Cheers
mrc -
Ok, well I made a C++ plugin which use your abstractmediaplayer, videooutput, videopresenter and your videoplayer. This plugin is a DLL file which expose my VideoPlayer and VideoOutput types.
Then, I made a Main.qml which contains @Rectangle
{
id:root
width:1024
height:768
VideoPlayer{
id: player
source: "D:/Aspen.avi"
autoPlay: true
function togglePlayback() {
if(!player.playing) {
player.play()
}else if(!player.paused)
player.pause()
else
player.resume()
}
}Rectangle{ id:snd width:root.width*2/3 height: root.height x:root.width/3 color:"green" } Rectangle{ id:charts width:root.width/3 height:root.height/2 y:root.height/2 Image{ width: parent.width height: parent.height fillMode: Image.PreserveAspectFit source: "img/toto.png" } } Rectangle{ width:root.width/3 height:root.height/2 color:"black" VideoOutput { id: videoOutput source: player anchors.fill: parent fillMode: VideoOutput.PreserveAspectFit smooth: true } }
}@
This main imports the VideoOutput & VideoPlayer with a qmldir. When I load an Image, my VS Just in Time debogger is warning me and asks me if I want to debug my app .... But I don't know why... When I delete the Image tag, my Video runs as I want...
Thank you !
Oliv -
Hey guys ! I don't know what happend but my plugin works quite well ! I just add some QDebug (I think that I previously have a compilation bug ...) and now my video is playing quite well !!
Thank you so much !
-
Hey Oliv,
this is great news!
I meanwhile tried your Main.qml example with my non-plugin based code and it worked as expected. No matter were i place the VideoOutput element, with or without the Image element - makes no difference. So it really might be compiler related (my builds are all based on gcc - linux&win32).
Cheers
mrc -
Erf, actually, I have a bad news...
The video works... but just when my computer want it... So I can't tell what is my new bug... I will try to find an explanation or something...
Thank you guys !