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 last edited by
    #3

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

    jsulmJ 1 Reply Last reply
    0
    • K Kinesis

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

      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on 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 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);
        }

        jsulmJ 1 Reply Last reply
        0
        • K Kinesis

          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);
          }

          jsulmJ Offline
          jsulmJ Offline
          jsulm
          Lifetime Qt Champion
          wrote on 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 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 .

            jsulmJ 1 Reply Last reply
            0
            • K Kinesis

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

              jsulmJ Offline
              jsulmJ Offline
              jsulm
              Lifetime Qt Champion
              wrote on 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 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.

                jsulmJ 1 Reply Last reply
                0
                • K Kinesis

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

                  jsulmJ Offline
                  jsulmJ Offline
                  jsulm
                  Lifetime Qt Champion
                  wrote on 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 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 :(

                    jsulmJ 1 Reply Last reply
                    0
                    • K Kinesis

                      @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 :(

                      jsulmJ Offline
                      jsulmJ Offline
                      jsulm
                      Lifetime Qt Champion
                      wrote on 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 last edited by
                        #13

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

                        mrjjM 1 Reply Last reply
                        0
                        • K Kinesis

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

                          mrjjM Offline
                          mrjjM Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on 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
                          2
                          • mrjjM mrjj

                            @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 last edited by
                            #15

                            @mrjj
                            Thanks alot.

                            1 Reply Last reply
                            0
                            • K Offline
                              K Offline
                              Kinesis
                              wrote on 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