I developed Qt application on Linux which can play multiple media file with simultaneously, but in this application source was media file, now I want to play RTP video, means my source will be "rtsp://IPAddress:port/test.sdp".
Please help me to develop application for live streaming using RTP on QT Linux application.
EDITED : My code to play multiple video Simultaneously.
#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...");
}
Thanks.
Thanks buddy,
Now requirement change by client, Now I have to show frame which store by rtsp client. So this question not much more useful for me.
Thanks.