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