Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Trying to play a video .... such a problem

    QML and Qt Quick
    3
    10
    6109
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • O
      OlivierH last edited by

      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 !

      1 Reply Last reply Reply Quote 0
      • sierdzio
        sierdzio Moderators last edited by

        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).

        (Z(:^

        1 Reply Last reply Reply Quote 0
        • O
          OlivierH last edited by

          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 ....

          1 Reply Last reply Reply Quote 0
          • M
            mrcdrc last edited by

            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

            1 Reply Last reply Reply Quote 0
            • O
              OlivierH last edited by

              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

              1 Reply Last reply Reply Quote 0
              • M
                mrcdrc last edited by

                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

                1 Reply Last reply Reply Quote 0
                • O
                  OlivierH last edited by

                  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

                  1 Reply Last reply Reply Quote 0
                  • O
                    OlivierH last edited by

                    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 !

                    1 Reply Last reply Reply Quote 0
                    • M
                      mrcdrc last edited by

                      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

                      1 Reply Last reply Reply Quote 0
                      • O
                        OlivierH last edited by

                        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 !

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post