Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QT Multimedia players for multiple video files
Forum Updated to NodeBB v4.3 + New Features

QT Multimedia players for multiple video files

Scheduled Pinned Locked Moved Solved General and Desktop
multimediavideosgraphics viewc++mediaplayer
16 Posts 4 Posters 6.5k Views 3 Watching
  • 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.
  • K Offline
    K Offline
    Kinesis
    wrote on 19 Jun 2018, 10:28 last edited by Kinesis
    #1

    Is QT cable of creating multiple multimedia players for many video files??
    I want to filter video files from a directory and display all videos on each media players (I use QGraphicView and media player).

    1 Reply Last reply
    0
    • S Offline
      S Offline
      SGaist
      Lifetime Qt Champion
      wrote on 19 Jun 2018, 21:21 last edited by
      #2

      Hi and welcome to devnet,

      It's up to you to create as many player as you want/need.

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      1
      • K Offline
        K Offline
        Kinesis
        wrote on 21 Jun 2018, 02:31 last edited by
        #3

        I want to know the way how to create media players for each video file

        J 1 Reply Last reply 21 Jun 2018, 04:46
        0
        • K Kinesis
          21 Jun 2018, 02:31

          I want to know the way how to create media players for each video file

          J Offline
          J Offline
          jsulm
          Lifetime Qt Champion
          wrote on 21 Jun 2018, 04:46 last edited by
          #4

          @Kinesis Like shown in the documentation: http://doc.qt.io/qt-5/qmediaplayer.html ?

          https://forum.qt.io/topic/113070/qt-code-of-conduct

          1 Reply Last reply
          1
          • K Offline
            K Offline
            Kinesis
            wrote on 21 Jun 2018, 07:17 last edited by
            #5

            Yes I use qmediaplayer . But not like that . Here is my mainwindow.cpp.But it is for only 1 video with 1 player . I want multiple media players for multiple videos.

            //mainwindow.cpp
            MainWindow::MainWindow(QWidget parent) :
            QMainWindow(parent),
            ui(new Ui::MainWindow)
            {
            ui->setupUi(this);
            QString directory = QFileDialog::getOpenFileName(this,tr("Open File"),"All files(
            .*)");
            m_mediaPlayer = new QMediaPlayer(this, QMediaPlayer::VideoSurface);
            const QRect screenGeometry = QApplication::desktop()->screenGeometry(this);
            m_videoItem = new QGraphicsVideoItem;
            m_mediaPlayer->setMedia(QUrl::fromLocalFile(directory));
            m_videoItem->setSize(QSizeF(screenGeometry.width() / 3.2, screenGeometry.height() / 2.4));
            QGraphicsScene *scene = new QGraphicsScene(this);
            ui->graphicsView->setScene(scene);
            scene->addItem(m_videoItem);

            ui->pushButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
            connect(ui->pushButton, &QAbstractButton::clicked, this, &MainWindow::play);

            m_mediaPlayer->setVideoOutput(m_videoItem);
            connect(m_mediaPlayer, &QMediaPlayer::stateChanged,
            this, &MainWindow::mediaStateChanged);
            connect(m_mediaPlayer, &QMediaPlayer::positionChanged, this, &MainWindow::positionChanged);
            connect(m_mediaPlayer, &QMediaPlayer::durationChanged, this, &MainWindow::durationChanged);

            ui->horizontalSlider->setRange(0, 0);
            connect(ui->horizontalSlider, &QAbstractSlider::sliderMoved,
            this, &MainWindow::setPosition);
            MainWindow::~MainWindow()
            {
            delete ui;
            }

            QSize MainWindow::sizeHint() const
            {
            return (m_videoItem->size() * qreal(3) / qreal(2)).toSize();
            }

            bool MainWindow::isPlayerAvailable() const
            {
            return m_mediaPlayer->isAvailable();
            }

            void MainWindow::play()
            {
            switch (m_mediaPlayer->state()) {
            case QMediaPlayer::PlayingState:
            m_mediaPlayer->pause();
            break;
            default:
            m_mediaPlayer->play();
            break;
            }
            }

            void MainWindow::mediaStateChanged(QMediaPlayer::State state)
            {
            switch(state) {
            case QMediaPlayer::PlayingState:
            ui->pushButton->setIcon(style()->standardIcon(QStyle::SP_MediaPause));
            break;
            default:
            ui->pushButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
            break;
            }
            }

            void MainWindow::positionChanged(qint64 position)
            {
            ui->horizontalSlider->setValue(position);
            }

            void MainWindow::durationChanged(qint64 duration)
            {
            ui->horizontalSlider->setRange(0, duration);
            }

            void MainWindow::setPosition(int position)
            {
            m_mediaPlayer->setPosition(position);
            }

            J 1 Reply Last reply 21 Jun 2018, 08:03
            0
            • K Kinesis
              21 Jun 2018, 07:17

              Yes I use qmediaplayer . But not like that . Here is my mainwindow.cpp.But it is for only 1 video with 1 player . I want multiple media players for multiple videos.

              //mainwindow.cpp
              MainWindow::MainWindow(QWidget parent) :
              QMainWindow(parent),
              ui(new Ui::MainWindow)
              {
              ui->setupUi(this);
              QString directory = QFileDialog::getOpenFileName(this,tr("Open File"),"All files(
              .*)");
              m_mediaPlayer = new QMediaPlayer(this, QMediaPlayer::VideoSurface);
              const QRect screenGeometry = QApplication::desktop()->screenGeometry(this);
              m_videoItem = new QGraphicsVideoItem;
              m_mediaPlayer->setMedia(QUrl::fromLocalFile(directory));
              m_videoItem->setSize(QSizeF(screenGeometry.width() / 3.2, screenGeometry.height() / 2.4));
              QGraphicsScene *scene = new QGraphicsScene(this);
              ui->graphicsView->setScene(scene);
              scene->addItem(m_videoItem);

              ui->pushButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
              connect(ui->pushButton, &QAbstractButton::clicked, this, &MainWindow::play);

              m_mediaPlayer->setVideoOutput(m_videoItem);
              connect(m_mediaPlayer, &QMediaPlayer::stateChanged,
              this, &MainWindow::mediaStateChanged);
              connect(m_mediaPlayer, &QMediaPlayer::positionChanged, this, &MainWindow::positionChanged);
              connect(m_mediaPlayer, &QMediaPlayer::durationChanged, this, &MainWindow::durationChanged);

              ui->horizontalSlider->setRange(0, 0);
              connect(ui->horizontalSlider, &QAbstractSlider::sliderMoved,
              this, &MainWindow::setPosition);
              MainWindow::~MainWindow()
              {
              delete ui;
              }

              QSize MainWindow::sizeHint() const
              {
              return (m_videoItem->size() * qreal(3) / qreal(2)).toSize();
              }

              bool MainWindow::isPlayerAvailable() const
              {
              return m_mediaPlayer->isAvailable();
              }

              void MainWindow::play()
              {
              switch (m_mediaPlayer->state()) {
              case QMediaPlayer::PlayingState:
              m_mediaPlayer->pause();
              break;
              default:
              m_mediaPlayer->play();
              break;
              }
              }

              void MainWindow::mediaStateChanged(QMediaPlayer::State state)
              {
              switch(state) {
              case QMediaPlayer::PlayingState:
              ui->pushButton->setIcon(style()->standardIcon(QStyle::SP_MediaPause));
              break;
              default:
              ui->pushButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
              break;
              }
              }

              void MainWindow::positionChanged(qint64 position)
              {
              ui->horizontalSlider->setValue(position);
              }

              void MainWindow::durationChanged(qint64 duration)
              {
              ui->horizontalSlider->setRange(0, duration);
              }

              void MainWindow::setPosition(int position)
              {
              m_mediaPlayer->setPosition(position);
              }

              J Offline
              J Offline
              jsulm
              Lifetime Qt Champion
              wrote on 21 Jun 2018, 08:03 last edited by
              #6

              @Kinesis As @SGaist said you can create as many of them as you need.
              What is the problem?
              If you can create one you can create many in the same way...

              https://forum.qt.io/topic/113070/qt-code-of-conduct

              1 Reply Last reply
              1
              • K Offline
                K Offline
                Kinesis
                wrote on 21 Jun 2018, 08:41 last edited by
                #7

                @jsulm
                The Problem is I don't know how to create multiple media players for multiple videos which are filtered from directory with looping or some QClasses .

                J 1 Reply Last reply 21 Jun 2018, 08:42
                0
                • K Kinesis
                  21 Jun 2018, 08:41

                  @jsulm
                  The Problem is I don't know how to create multiple media players for multiple videos which are filtered from directory with looping or some QClasses .

                  J Offline
                  J Offline
                  jsulm
                  Lifetime Qt Champion
                  wrote on 21 Jun 2018, 08:42 last edited by
                  #8

                  @Kinesis Please specify what exactly the problem is.
                  Is it: how to filter files in a directory?

                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                  1 Reply Last reply
                  0
                  • K Offline
                    K Offline
                    Kinesis
                    wrote on 21 Jun 2018, 08:51 last edited by Kinesis
                    #9

                    @jsulm
                    Filtering the video file is not the problem.
                    The problem is I don't know how to show the filtered videos with media players.
                    It means that 1 video per 1 player , 5 videos per 5 players.

                    J 1 Reply Last reply 21 Jun 2018, 09:01
                    0
                    • K Kinesis
                      21 Jun 2018, 08:51

                      @jsulm
                      Filtering the video file is not the problem.
                      The problem is I don't know how to show the filtered videos with media players.
                      It means that 1 video per 1 player , 5 videos per 5 players.

                      J Offline
                      J Offline
                      jsulm
                      Lifetime Qt Champion
                      wrote on 21 Jun 2018, 09:01 last edited by
                      #10

                      @Kinesis You iterate over all the video files and create a player for each (like you already did above for one).

                      https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      2
                      • K Offline
                        K Offline
                        Kinesis
                        wrote on 21 Jun 2018, 09:08 last edited by Kinesis
                        #11

                        @jsulm
                        I know the logic but when it comes to coding I am really weak . please show me how to do it(just 1 example) . please :(

                        J 1 Reply Last reply 21 Jun 2018, 09:09
                        0
                        • K Kinesis
                          21 Jun 2018, 09:08

                          @jsulm
                          I know the logic but when it comes to coding I am really weak . please show me how to do it(just 1 example) . please :(

                          J Offline
                          J Offline
                          jsulm
                          Lifetime Qt Champion
                          wrote on 21 Jun 2018, 09:09 last edited by
                          #12

                          @Kinesis Sorry, I will not write the code for you.
                          I really don't understand what the problem is as you already managed to create one player for one file...

                          https://forum.qt.io/topic/113070/qt-code-of-conduct

                          1 Reply Last reply
                          2
                          • K Offline
                            K Offline
                            Kinesis
                            wrote on 21 Jun 2018, 09:47 last edited by
                            #13

                            @jsulm
                            Thanks for your help.I really appreciate that.

                            mrjjM 1 Reply Last reply 21 Jun 2018, 15:14
                            0
                            • K Kinesis
                              21 Jun 2018, 09:47

                              @jsulm
                              Thanks for your help.I really appreciate that.

                              mrjjM Offline
                              mrjjM Offline
                              mrjj
                              Lifetime Qt Champion
                              wrote on 21 Jun 2018, 15:14 last edited by
                              #14

                              @Kinesis
                              Hi
                              It is easier to help if you break down task in steps and ask pr step what we
                              would suggest.
                              Like getting all files in a folder you could do

                              #include <QDir>
                              //assume the directory exists and contains some files 
                              QDir directory("c:/xx/yyy"); // point to real folder
                              // ask for mp4 and avi. adjust to your needs
                              QStringList vids= directory.entryList(QStringList() << "*.mp4" << "*.avi",QDir::Files);
                              foreach(const QString &filename, vids) {
                              // new a player 
                              // insert to form or show as window
                              // give it file
                              // tell it to play
                              }
                              
                              K 1 Reply Last reply 22 Jun 2018, 04:24
                              2
                              • mrjjM mrjj
                                21 Jun 2018, 15:14

                                @Kinesis
                                Hi
                                It is easier to help if you break down task in steps and ask pr step what we
                                would suggest.
                                Like getting all files in a folder you could do

                                #include <QDir>
                                //assume the directory exists and contains some files 
                                QDir directory("c:/xx/yyy"); // point to real folder
                                // ask for mp4 and avi. adjust to your needs
                                QStringList vids= directory.entryList(QStringList() << "*.mp4" << "*.avi",QDir::Files);
                                foreach(const QString &filename, vids) {
                                // new a player 
                                // insert to form or show as window
                                // give it file
                                // tell it to play
                                }
                                
                                K Offline
                                K Offline
                                Kinesis
                                wrote on 22 Jun 2018, 04:24 last edited by
                                #15

                                @mrjj
                                Thanks alot.

                                1 Reply Last reply
                                0
                                • K Offline
                                  K Offline
                                  Kinesis
                                  wrote on 16 Jul 2018, 07:02 last edited by
                                  #16

                                  I got the answer . MainWindow.cpp is like that

                                   ui->listWidget->setFlow(QListView::LeftToRight);
                                      ui->listWidget->setMinimumSize(1050,800);
                                      ui->listWidget->setGridSize(QSize(340, 320));
                                      ui->listWidget->setResizeMode(QListView::Adjust);
                                      ui->listWidget->setViewMode(QListView::ListMode);
                                      ui->listWidget->setWrapping(true);
                                  
                                      QDir directory = QFileDialog::getExistingDirectory(this, tr("Open Directory"),"/home",
                                  
                                                                                         QFileDialog::ShowDirsOnly| QFileDialog::DontResolveSymlinks);
                                  
                                      directory.setNameFilters({"*.mp4" , "*.avi" , "*.flv" , "*.mwv"});
                                  
                                      for(const QFileInfo & finfo: directory.entryInfoList()){
                                          QMediaPlayer *mediaPlayer = new QMediaPlayer();
                                          mediaPlayer->setMedia(QUrl::fromLocalFile(finfo.absoluteFilePath()));
                                          videoItem = new QGraphicsVideoItem;
                                          videoItem->setSize(QSize(300,240));
                                          QGraphicsScene *scene = new QGraphicsScene(this);
                                          QGraphicsView *graphicsView = new QGraphicsView(scene);
                                          mediaPlayer->setVideoOutput(videoItem);
                                  
                                          QPushButton *m_playButton = new QPushButton();
                                          m_playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
                                  
                                          connect(m_playButton, &QAbstractButton::clicked, [mediaPlayer]() {
                                              switch (mediaPlayer->state()) {
                                              case QMediaPlayer::PlayingState:
                                                  mediaPlayer->pause();
                                                  break;
                                              default:
                                                  mediaPlayer->play();
                                                  break;
                                              }
                                          });
                                  
                                  
                                          connect(mediaPlayer, &QMediaPlayer::stateChanged, [m_playButton, this](QMediaPlayer::State state) {
                                              switch(state) {
                                              case QMediaPlayer::PlayingState:
                                                  m_playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPause));
                                                  break;
                                              default:
                                                  m_playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
                                                  break;
                                              }
                                          });
                                  
                                  
                                  
                                          QSlider *m_positionSlider = new QSlider(Qt::Horizontal,this);
                                          m_positionSlider->setRange(0,mediaPlayer->duration() / 1000);
                                  
                                  
                                          connect(mediaPlayer, &QMediaPlayer::positionChanged ,[m_positionSlider, this](qint64 position){
                                  
                                              m_positionSlider->setValue(position);
                                          });
                                  
                                          connect(mediaPlayer, &QMediaPlayer::durationChanged ,[m_positionSlider, this](qint64 duration){
                                  
                                              m_positionSlider->setRange(0,duration);
                                          });
                                  
                                  
                                          connect(m_positionSlider ,&QAbstractSlider::sliderMoved, [mediaPlayer ,this] (int position){
                                  
                                              mediaPlayer->setPosition(position);
                                          });
                                  
                                  
                                  
                                  
                                          auto    item = new QListWidgetItem("", ui->listWidget);
                                          auto    widget = new QWidget;
                                          auto    label = new QLabel(finfo.fileName());
                                          auto    vb = new QVBoxLayout;
                                  
                                          QBoxLayout *controlLayout = new QHBoxLayout;
                                          controlLayout->setMargin(0);
                                          controlLayout->addWidget(m_playButton);
                                          controlLayout->addWidget(m_positionSlider);
                                  
                                          vb->addWidget(label);
                                          vb->addWidget(graphicsView);
                                          vb->addLayout(controlLayout);
                                          widget->setLayout(vb);
                                          widget->setMinimumSize(320, 320);
                                          ui->listWidget->setItemWidget(item,widget);
                                          player.append(mediaPlayer);
                                          scene->addItem(videoItem);
                                  
                                  
                                  
                                      }
                                  
                                  1 Reply Last reply
                                  1

                                  • Login

                                  • Login or register to search.
                                  • First post
                                    Last post
                                  0
                                  • Categories
                                  • Recent
                                  • Tags
                                  • Popular
                                  • Users
                                  • Groups
                                  • Search
                                  • Get Qt Extensions
                                  • Unsolved