2016-03-08 109 views
0

我在Linux上開發的Qt應用程序,它可以播放多種媒體文件,同時,但在這個應用程序的源是媒體文件,現在我想打RTP視頻Qt的Linux應用程序,意味着我的來源是「RTSP :// IP地址:端口/ test.sdp」。視頻流使用RTP

請幫我開發應用對QT Linux應用程序使用RTP流媒體直播。

編輯: 我的代碼同時播放多個視頻。

#include "mainwindow.h" 
#include "ui_mainwindow.h" 

int max=0; 
int row=0; 
int column=0; 
int flag = 0; 
extern int he; 
extern int wi; 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    //disable other option before choose layout... 
    ui->menuFile->setDisabled(1); 
    ui->menuVideo->setDisabled(1); 
    ui->actionOpen->setDisabled(1); 
    ui->actionPlay->setDisabled(1); 
    ui->actionPause->setDisabled(1); 
    ui->actionStop->setDisabled(1); 
} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 


//for 1_row x 1_column 
void MainWindow::on_action1_X_1_triggered(){ 

    row = 1; 
    column = 1; 

    ui->menuFile->setEnabled(1); 
    ui->menuVideo->setEnabled(1); 
    ui->actionOpen->setEnabled(1); 
    ui->actionPlay->setEnabled(1); 
    ui->actionPause->setEnabled(1); 
    ui->actionStop->setEnabled(1); 

    video_layout(); 
} 

//for 2_row x 2_column 
void MainWindow::on_action2_X_2_triggered(){ 

    row = 2; 
    column = 2; 

    ui->menuFile->setEnabled(1); 
    ui->menuVideo->setEnabled(1); 
    ui->actionOpen->setEnabled(1); 
    ui->actionPlay->setEnabled(1); 
    ui->actionPause->setEnabled(1); 
    ui->actionStop->setEnabled(1); 

    video_layout(); 
} 

//for 3_row x 3_column 
void MainWindow::on_action3_X_3_triggered(){ 

    row = 3; 
    column = 3; 

    ui->menuFile->setEnabled(1); 
    ui->menuVideo->setEnabled(1); 
    ui->actionOpen->setEnabled(1); 
    ui->actionPlay->setEnabled(1); 
    ui->actionPause->setEnabled(1); 
    ui->actionStop->setEnabled(1); 

    video_layout(); 
} 

//for 4_row x 4_column 
void MainWindow::on_action4_X_4_triggered(){ 

    row = 4; 
    column = 4; 

    ui->menuFile->setEnabled(1); 
    ui->menuVideo->setEnabled(1); 
    ui->actionOpen->setEnabled(1); 
    ui->actionPlay->setEnabled(1); 
    ui->actionPause->setEnabled(1); 
    ui->actionStop->setEnabled(1); 

    video_layout(); 
} 


//for custom row and column 
void MainWindow::on_actionCustom_triggered(){ 

    //Pop-up window call to get data of Row and Column 
    Dialog* popup = new Dialog(); 
    popup->exec(); 

    ui->menuFile->setEnabled(1); 
    ui->menuVideo->setEnabled(1); 
    ui->actionOpen->setEnabled(1); 
    ui->actionPlay->setEnabled(1); 
    ui->actionPause->setEnabled(1); 
    ui->actionStop->setEnabled(1); 

    video_layout(); 
} 


//Create Layout with MultiMedia and Player as per Row and Column... 
void MainWindow::video_layout(){ 
    static int k = 0; 
    int a=0; 

    //clear older layout if created... 
    while(k>0){ 
     view[a]->close(); 
     slider[a]->close(); 
     bar[a]->close(); 
     slider1[a]->close(); 
     k--; 
     a++; 
    } 

    //set size of Video Screen 
    if(flag == 0){ 
     wi -= 40; 
     he -= 120; 
     flag = 1; 
    } 

    //create Layout with Player 
    for(int i=0; i<row; i++){ 
     for(int j=0; j<column; j++){ 
      view[k] = new QGraphicsView(this->centralWidget()); 
      view[k]->setGeometry((j*((wi/column)+5))+10,(i*((he/row)+5))+10,wi/column,he/row); 
      view[k]->show(); 

      player[k] = new QMediaPlayer; 
      vw[k] = new QVideoWidget; 

      player[k]->setVideoOutput(vw[k]); 
      view[k]->setViewport(vw[k]); 

      slider[k] = new QSlider(this); 
      bar[k] = new QProgressBar(this); 
      slider1[k] = new QSlider(this); 

      slider[k]->setOrientation(Qt::Horizontal); 

      ui->statusBar->addPermanentWidget(slider[k]); 
      ui->statusBar->addPermanentWidget(bar[k]); 
      ui->statusBar->addPermanentWidget(slider1[k]); 

      connect(player[k],&QMediaPlayer::durationChanged,slider[k],&QSlider::setMaximum); 
      connect(player[k],&QMediaPlayer::positionChanged,slider[k],&QSlider::setValue); 
      connect(slider[k],&QSlider::sliderMoved,player[k],&QMediaPlayer::setPosition); 

      slider1[k]->setValue(50); 
      connect(slider1[k],&QSlider::sliderMoved,player[k],&QMediaPlayer::setVolume); 

      connect(player[k],&QMediaPlayer::durationChanged,bar[k],&QProgressBar::setMaximum); 
      connect(player[k],&QMediaPlayer::positionChanged,bar[k],&QProgressBar::setValue); 

      k++; 
      max = k; 
     } 
    } 
} 

//select video file for Open.. 
void MainWindow::on_actionOpen_triggered() 
{ 
    QString filename = QFileDialog::getOpenFileName(this,"Open a File","","Video File (*.*)"); 
    on_actionStop_triggered(); 

    for(int i=0; i<max; i++){ 
     player[i]->setMedia(QUrl::fromLocalFile(filename)); 
    } 
    on_actionPlay_triggered(); 
} 

//Play video... 
void MainWindow::on_actionPlay_triggered() 
{ 
    for(int i=0; i<max; i++) 
     player[i]->play(); 
    ui->statusBar->showMessage("Playing"); 
} 

//Pause Video... 
void MainWindow::on_actionPause_triggered() 
{ 
    for(int i=0; i<max; i++) 
     player[i]->pause(); 

    ui->statusBar->showMessage("Paused..."); 
} 

//Stop Video... 
void MainWindow::on_actionStop_triggered() 
{ 
    for(int i=0; i<max; i++) 
     player[i]->stop(); 

    ui->statusBar->showMessage("Stopped"); 
} 


//Mute Video... 
void MainWindow::on_actionMute_triggered() 
{ 
    for(int i=0; i<max; i++) 
     if(player[i]->isMuted()){ 
      player[i]->setMuted(0); 
     }else{ 
      player[i]->setMuted(1); 
     } 

    ui->statusBar->showMessage("Muted..."); 
} 

謝謝。

+0

你有什麼更具體的問題。這可能在這個論壇的範圍內? –

+0

您使用什麼庫播放視頻?如果你使用FFmpeg的,你可以在現有的代碼 –

+0

謝謝@TheBadger發揮RTP沒有太大的變化,我說我的主要代碼在我的問題,我用QMediaPlayer,QVideoWidget,的QGraphicsView。我不知道這個文件會不會使用FFmpeg!你能解釋我,如何將媒體設置爲rtsp流媒體數據? –

回答

0

感謝好友,通過客戶端

現在需求的變化,現在,我必須表明框架,其店由RTSP客戶端。所以這個問題對我來說沒有多大用處。

謝謝。