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. Media player not working for multiple videos
Forum Updated to NodeBB v4.3 + New Features

Media player not working for multiple videos

Scheduled Pinned Locked Moved Solved General and Desktop
qt 5.5videosurfacemedia playergraphicview
41 Posts 8 Posters 9.7k 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

    @jsulm
    I got a lambda issue for "m_playButton" . The message is " m_play Button in capture list does not name a variable.

    jsulmJ Offline
    jsulmJ Offline
    jsulm
    Lifetime Qt Champion
    wrote on last edited by jsulm
    #26

    @Kinesis Please show your code...
    You need to put the code I shown AFTER you created m_playButton.

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

    K 1 Reply Last reply
    0
    • K Kinesis

      @jsulm
      I got a lambda issue for "m_playButton" . The message is " m_play Button in capture list does not name a variable.

      aha_1980A Offline
      aha_1980A Offline
      aha_1980
      Lifetime Qt Champion
      wrote on last edited by
      #27

      @Kinesis I will tell you my insights from reading this thread: you should really take a C++ book and start with simple examples.

      you are lacking simple programming knowledge, sorry. most of your problems are not related to Qt.

      So please, start learning C++. it will help you a lot.

      Qt has to stay free or it will die.

      K 1 Reply Last reply
      0
      • aha_1980A aha_1980

        @Kinesis I will tell you my insights from reading this thread: you should really take a C++ book and start with simple examples.

        you are lacking simple programming knowledge, sorry. most of your problems are not related to Qt.

        So please, start learning C++. it will help you a lot.

        K Offline
        K Offline
        Kinesis
        wrote on last edited by
        #28

        @aha_1980
        Thanks for your suggestion . I am learning c++ now . I also like to try writing UI that's why I am approaching QT .

        1 Reply Last reply
        0
        • jsulmJ jsulm

          @Kinesis Please show your code...
          You need to put the code I shown AFTER you created m_playButton.

          K Offline
          K Offline
          Kinesis
          wrote on last edited by
          #29

          @jsulm
          Here is the code

          MainWindow::MainWindow(QWidget *parent) :
              QMainWindow(parent),
              ui(new Ui::MainWindow)
          {
              ui->setupUi(this);
              
              ui->listWidget->setFlow(QListView::LeftToRight);
              ui->listWidget->setMinimumSize(1200,350);
              ui->listWidget->setGridSize(QSize(360, 360));
              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()));
                  // mediaPlayer->setMedia(playlist);
                  videoItem = new QGraphicsVideoItem;
                  videoItem->setSize(QSize(320,240));
                  QGraphicsScene *scene = new QGraphicsScene(this);
                  QGraphicsView *graphicsView = new QGraphicsView(scene);
                  
                  
                  
                  
                  mediaPlayer->setVideoOutput(videoItem);
                  player.append(mediaPlayer);
                  scene->addItem(videoItem);
                  
                  connect(mediaPlayer, &QMediaPlayer::stateChanged, this, &MainWindow::mediaStateChanged);
                  
                  connect(mediaPlayer, &QMediaPlayer::positionChanged, this, &MainWindow::positionChanged);
                  connect(mediaPlayer, &QMediaPlayer::durationChanged, this, &MainWindow::durationChanged);
                  
                  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;
                      }
                  });
                  
                  
                  //connect(m_playButton, &QAbstractButton::clicked, this, &MainWindow::play);
                  //connect(m_positionSlider, &QAbstractSlider::sliderMoved,this, &MainWindow::setPosition);
                  
                  
                  
                  m_positionSlider = new QSlider(Qt::Horizontal);
                  m_positionSlider->setRange(0, 0);
                  
                  
                  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,1);
                  vb->addWidget(graphicsView,9);
                  vb->addLayout(controlLayout);
                  widget->setLayout(vb);
                  widget->setMinimumSize(340, 340);
                  ui->listWidget->setItemWidget(item,widget);
                  
                  
              }
                  
          }
          MainWindow::~MainWindow()
          {
              delete ui;
          }
          QSize MainWindow::sizeHint() const
          {
              return (videoItem->size() * qreal(3) / qreal(2)).toSize();
          }
          
          void MainWindow::positionChanged(qint64 position)
          {
              m_positionSlider->setValue(position);
          }
          
          void MainWindow::durationChanged(qint64 duration)
          {
              m_positionSlider->setRange(0, duration);
          }
          
          void MainWindow::setPosition(int position)
          {
              QMediaPlayer *mediaPlayer = player[1];
              mediaPlayer->setPosition(position);
          }
          
          jsulmJ D 2 Replies Last reply
          0
          • K Kinesis

            @jsulm
            Here is the code

            MainWindow::MainWindow(QWidget *parent) :
                QMainWindow(parent),
                ui(new Ui::MainWindow)
            {
                ui->setupUi(this);
                
                ui->listWidget->setFlow(QListView::LeftToRight);
                ui->listWidget->setMinimumSize(1200,350);
                ui->listWidget->setGridSize(QSize(360, 360));
                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()));
                    // mediaPlayer->setMedia(playlist);
                    videoItem = new QGraphicsVideoItem;
                    videoItem->setSize(QSize(320,240));
                    QGraphicsScene *scene = new QGraphicsScene(this);
                    QGraphicsView *graphicsView = new QGraphicsView(scene);
                    
                    
                    
                    
                    mediaPlayer->setVideoOutput(videoItem);
                    player.append(mediaPlayer);
                    scene->addItem(videoItem);
                    
                    connect(mediaPlayer, &QMediaPlayer::stateChanged, this, &MainWindow::mediaStateChanged);
                    
                    connect(mediaPlayer, &QMediaPlayer::positionChanged, this, &MainWindow::positionChanged);
                    connect(mediaPlayer, &QMediaPlayer::durationChanged, this, &MainWindow::durationChanged);
                    
                    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;
                        }
                    });
                    
                    
                    //connect(m_playButton, &QAbstractButton::clicked, this, &MainWindow::play);
                    //connect(m_positionSlider, &QAbstractSlider::sliderMoved,this, &MainWindow::setPosition);
                    
                    
                    
                    m_positionSlider = new QSlider(Qt::Horizontal);
                    m_positionSlider->setRange(0, 0);
                    
                    
                    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,1);
                    vb->addWidget(graphicsView,9);
                    vb->addLayout(controlLayout);
                    widget->setLayout(vb);
                    widget->setMinimumSize(340, 340);
                    ui->listWidget->setItemWidget(item,widget);
                    
                    
                }
                    
            }
            MainWindow::~MainWindow()
            {
                delete ui;
            }
            QSize MainWindow::sizeHint() const
            {
                return (videoItem->size() * qreal(3) / qreal(2)).toSize();
            }
            
            void MainWindow::positionChanged(qint64 position)
            {
                m_positionSlider->setValue(position);
            }
            
            void MainWindow::durationChanged(qint64 duration)
            {
                m_positionSlider->setRange(0, duration);
            }
            
            void MainWindow::setPosition(int position)
            {
                QMediaPlayer *mediaPlayer = player[1];
                mediaPlayer->setPosition(position);
            }
            
            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #30

            @Kinesis And exactly this code does not build?

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

            1 Reply Last reply
            0
            • K Kinesis

              @jsulm
              Here is the code

              MainWindow::MainWindow(QWidget *parent) :
                  QMainWindow(parent),
                  ui(new Ui::MainWindow)
              {
                  ui->setupUi(this);
                  
                  ui->listWidget->setFlow(QListView::LeftToRight);
                  ui->listWidget->setMinimumSize(1200,350);
                  ui->listWidget->setGridSize(QSize(360, 360));
                  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()));
                      // mediaPlayer->setMedia(playlist);
                      videoItem = new QGraphicsVideoItem;
                      videoItem->setSize(QSize(320,240));
                      QGraphicsScene *scene = new QGraphicsScene(this);
                      QGraphicsView *graphicsView = new QGraphicsView(scene);
                      
                      
                      
                      
                      mediaPlayer->setVideoOutput(videoItem);
                      player.append(mediaPlayer);
                      scene->addItem(videoItem);
                      
                      connect(mediaPlayer, &QMediaPlayer::stateChanged, this, &MainWindow::mediaStateChanged);
                      
                      connect(mediaPlayer, &QMediaPlayer::positionChanged, this, &MainWindow::positionChanged);
                      connect(mediaPlayer, &QMediaPlayer::durationChanged, this, &MainWindow::durationChanged);
                      
                      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;
                          }
                      });
                      
                      
                      //connect(m_playButton, &QAbstractButton::clicked, this, &MainWindow::play);
                      //connect(m_positionSlider, &QAbstractSlider::sliderMoved,this, &MainWindow::setPosition);
                      
                      
                      
                      m_positionSlider = new QSlider(Qt::Horizontal);
                      m_positionSlider->setRange(0, 0);
                      
                      
                      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,1);
                      vb->addWidget(graphicsView,9);
                      vb->addLayout(controlLayout);
                      widget->setLayout(vb);
                      widget->setMinimumSize(340, 340);
                      ui->listWidget->setItemWidget(item,widget);
                      
                      
                  }
                      
              }
              MainWindow::~MainWindow()
              {
                  delete ui;
              }
              QSize MainWindow::sizeHint() const
              {
                  return (videoItem->size() * qreal(3) / qreal(2)).toSize();
              }
              
              void MainWindow::positionChanged(qint64 position)
              {
                  m_positionSlider->setValue(position);
              }
              
              void MainWindow::durationChanged(qint64 duration)
              {
                  m_positionSlider->setRange(0, duration);
              }
              
              void MainWindow::setPosition(int position)
              {
                  QMediaPlayer *mediaPlayer = player[1];
                  mediaPlayer->setPosition(position);
              }
              
              D Offline
              D Offline
              Devopia53
              wrote on last edited by
              #31

              @Kinesis

              Declare QPushButton as a local variable like a mediaPlayer. A lambda function can not capture member variables of this.

              aha_1980A 1 Reply Last reply
              0
              • D Devopia53

                @Kinesis

                Declare QPushButton as a local variable like a mediaPlayer. A lambda function can not capture member variables of this.

                aha_1980A Offline
                aha_1980A Offline
                aha_1980
                Lifetime Qt Champion
                wrote on last edited by
                #32

                @Devopia53 No, it can:

                auto l = [this]() {
                  // use members of this here
                }
                

                Qt has to stay free or it will die.

                D 1 Reply Last reply
                0
                • K Offline
                  K Offline
                  Kinesis
                  wrote on last edited by Kinesis
                  #33

                  @jsulm - Yes it does not work
                  @Devopia53 - When I declare local variable , it works.
                  @aha_1980 - I will also try like U said .
                  Sorry for replying in the same reply . Because I am a new user . I can only post per every 600s

                  1 Reply Last reply
                  0
                  • K Offline
                    K Offline
                    Kinesis
                    wrote on last edited by Kinesis
                    #34

                    I still have a question . I replaced the slider slots into loop but I can't control the sliders and sliders are not moving when the videos are running .
                    Here is the slider code

                    QSlider *m_positionSlider = new QSlider(Qt::Horizontal);
                            m_positionSlider->setRange(0, 0);
                    
                           
                            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(mediaPlayer , &QMediaPlayer::setPosition, [mediaPlayer ,this] (int position){
                    
                                mediaPlayer->setPosition(position);
                            });
                    
                    
                    jsulmJ 1 Reply Last reply
                    0
                    • K Kinesis

                      I still have a question . I replaced the slider slots into loop but I can't control the sliders and sliders are not moving when the videos are running .
                      Here is the slider code

                      QSlider *m_positionSlider = new QSlider(Qt::Horizontal);
                              m_positionSlider->setRange(0, 0);
                      
                             
                              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(mediaPlayer , &QMediaPlayer::setPosition, [mediaPlayer ,this] (int position){
                      
                                  mediaPlayer->setPosition(position);
                              });
                      
                      
                      jsulmJ Offline
                      jsulmJ Offline
                      jsulm
                      Lifetime Qt Champion
                      wrote on last edited by jsulm
                      #35

                      @Kinesis What is this:

                      connect(mediaPlayer , &QMediaPlayer::setPosition, [mediaPlayer ,this] (int position){
                      
                                  mediaPlayer->setPosition(position);
                              });
                      

                      ?
                      QMediaPlayer::setPosition() is a slot not a signal.
                      I think you need to change the range

                      m_positionSlider->setRange(0, 0);
                      

                      You can use http://doc.qt.io/qt-5/qmediaplayer.html#duration-prop to set the range.

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

                      K 1 Reply Last reply
                      1
                      • aha_1980A aha_1980

                        @Devopia53 No, it can:

                        auto l = [this]() {
                          // use members of this here
                        }
                        
                        D Offline
                        D Offline
                        Devopia53
                        wrote on last edited by Devopia53
                        #36

                        @aha_1980

                        I know that well(as [&] or [=]). But what I have described is that you have captured the member variables of the this object directly. Take a look at his source code. here: connect(mediaPlayer, &QMediaPlayer::stateChanged, [m_playButton, this](QMediaPlayer::State state)
                        A m_playButton is a member of the this.

                        1 Reply Last reply
                        1
                        • jsulmJ jsulm

                          @Kinesis What is this:

                          connect(mediaPlayer , &QMediaPlayer::setPosition, [mediaPlayer ,this] (int position){
                          
                                      mediaPlayer->setPosition(position);
                                  });
                          

                          ?
                          QMediaPlayer::setPosition() is a slot not a signal.
                          I think you need to change the range

                          m_positionSlider->setRange(0, 0);
                          

                          You can use http://doc.qt.io/qt-5/qmediaplayer.html#duration-prop to set the range.

                          K Offline
                          K Offline
                          Kinesis
                          wrote on last edited by
                          #37

                          @jsulm
                          Thanks for your suggestion . Now the slider is running along with video.But to use it like skip slider how should I correct this "QMediaPlayer::setPosition() " which is a slot but not a signal ?By the way , sorry for late response .

                          jsulmJ 1 Reply Last reply
                          0
                          • K Kinesis

                            @jsulm
                            Thanks for your suggestion . Now the slider is running along with video.But to use it like skip slider how should I correct this "QMediaPlayer::setPosition() " which is a slot but not a signal ?By the way , sorry for late response .

                            jsulmJ Offline
                            jsulmJ Offline
                            jsulm
                            Lifetime Qt Champion
                            wrote on last edited by
                            #38

                            @Kinesis You don't need

                            connect(mediaPlayer , &QMediaPlayer::setPosition, [mediaPlayer ,this] (int position){
                            
                                        mediaPlayer->setPosition(position);
                                    });
                            

                            You're already using QMediaPlayer::positionChanged...

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

                            K 1 Reply Last reply
                            0
                            • jsulmJ jsulm

                              @Kinesis You don't need

                              connect(mediaPlayer , &QMediaPlayer::setPosition, [mediaPlayer ,this] (int position){
                              
                                          mediaPlayer->setPosition(position);
                                      });
                              

                              You're already using QMediaPlayer::positionChanged...

                              K Offline
                              K Offline
                              Kinesis
                              wrote on last edited by
                              #39

                              @jsulm
                              I got this. It's done now. My code is working fully 100% now . Thanks a lot for helping me . I fell bad that I wasted your time . By the way should I upload my
                              code ? It might help someone . Thanks.

                              jsulmJ 1 Reply Last reply
                              1
                              • K Kinesis

                                @jsulm
                                I got this. It's done now. My code is working fully 100% now . Thanks a lot for helping me . I fell bad that I wasted your time . By the way should I upload my
                                code ? It might help someone . Thanks.

                                jsulmJ Offline
                                jsulmJ Offline
                                jsulm
                                Lifetime Qt Champion
                                wrote on last edited by
                                #40

                                @Kinesis No need to feel bad - I'm helping here voluntary :-)
                                I don't think you need to upload your code. If somebody has questions he/she can ask.

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

                                1 Reply Last reply
                                2
                                • W Offline
                                  W Offline
                                  WoodyLanes
                                  Banned
                                  wrote on last edited by WoodyLanes
                                  #41
                                  This post is deleted!
                                  1 Reply Last reply
                                  0

                                  • Login

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