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