C++ Qt QMediaPlayer(Rtsp客户端)检查连接到Rtsp服务器是否需要凭据

C++ Qt QMediaPlayer(Rtsp客户端)检查连接到Rtsp服务器是否需要凭据,c++,qt,gstreamer,rtsp,rtsp-client,C++,Qt,Gstreamer,Rtsp,Rtsp Client,我已经使用Gstreamer编写了一个RTSP服务器,它可能有也可能没有设置连接到它的凭据。 我还使用qtqmediaplayer和qtgstreamer绑定编写了一个RTSP客户端 现在,若RTSP服务器设置了凭据,那个么我想在我的RTSP客户端中显示一个输入用户名、密码窗口。如果RTSP服务器中未设置凭据,则我不希望在客户端中显示此窗口 在我的RTSP客户端中,如何检查RTSP服务器是否需要凭据 #include "mainwindow.h" #include "

我已经使用Gstreamer编写了一个RTSP服务器,它可能有也可能没有设置连接到它的凭据。 我还使用qtqmediaplayer和qtgstreamer绑定编写了一个RTSP客户端

现在,若RTSP服务器设置了凭据,那个么我想在我的RTSP客户端中显示一个输入用户名、密码窗口。如果RTSP服务器中未设置凭据,则我不希望在客户端中显示此窗口

在我的RTSP客户端中,如何检查RTSP服务器是否需要凭据

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QInputDialog>
#include <QFileDialog>


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

    setWindowTitle("Super Nova Stream Viewer");

    ui->filePathText->setText("");

    player = new QMediaPlayer(this);
    videoWidget = new QVideoWidget(this);

    player->setVideoOutput(videoWidget);

    ui->horizontalLayout->addWidget(videoWidget);

    connect(player, &QMediaPlayer::durationChanged, ui->durationSlider, &QSlider::setMaximum);
    connect(player, &QMediaPlayer::positionChanged, ui->durationSlider, &QSlider::setValue);
    connect(ui->durationSlider, &QSlider::sliderMoved, player, &QMediaPlayer::setPosition);

    connect(player, &QMediaPlayer::durationChanged, ui->durationProgressBar, &QProgressBar::setMaximum);
    connect(player, &QMediaPlayer::positionChanged, ui->durationProgressBar, &QProgressBar::setValue);
}

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

***void MainWindow::setRtspServerPath(const QString& path)***
{
    ui->filePathText->setText(path);

    const QUrl url = QUrl(path);

    const QNetworkRequest requestRtsp1(url);

    player->setMedia(requestRtsp1);
}

void MainWindow::setMediaFilePath(const QString& path)
{
    ui->filePathText->setText(path);

    const QUrl url = QUrl::fromLocalFile(path);

    player->setMedia(url);
}

void MainWindow::on_playButton_clicked()
{
    player->play();
    ui->volumeSlider->setSliderPosition(player->volume());
}

void MainWindow::on_pauseButton_clicked()
{
    player->pause();
}

void MainWindow::on_stopButton_clicked()
{
    player->stop();
    ui->volumeSlider->setSliderPosition(0);
}

void MainWindow::on_muteUnmuteButton_clicked()
{
    if (player->isMuted())
    {
        player->setMuted(false);
        ui->muteUnmuteButton->setText("Mute");
    }
    else
    {
        player->setMuted(true);
        ui->muteUnmuteButton->setText("UnMute");
    }
}

void MainWindow::on_volumeSlider_valueChanged(int value)
{
    player->setVolume(value);
}

void MainWindow::on_actionOpenNetworkStream_triggered()
{
    QString serverPath = QInputDialog::getText(this, "Rtsp Server","Rtsp Server Address");
    setRtspServerPath(serverPath);
}

void MainWindow::on_actionOpenFile_triggered()
{
    QString file = QFileDialog::getOpenFileName(this, "Open Media File", "", "Video files (*.mp4)");

    setMediaFilePath(file);
}

void MainWindow::on_forwardButton_clicked()
{
    player->setPlaybackRate(2.0);
}

void MainWindow::on_backwardButton_clicked()
{
    player->setPlaybackRate(-1.0);
}
我想修改“setRtspServerPath”方法以检查RTSP服务器是否需要凭据

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QInputDialog>
#include <QFileDialog>


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

    setWindowTitle("Super Nova Stream Viewer");

    ui->filePathText->setText("");

    player = new QMediaPlayer(this);
    videoWidget = new QVideoWidget(this);

    player->setVideoOutput(videoWidget);

    ui->horizontalLayout->addWidget(videoWidget);

    connect(player, &QMediaPlayer::durationChanged, ui->durationSlider, &QSlider::setMaximum);
    connect(player, &QMediaPlayer::positionChanged, ui->durationSlider, &QSlider::setValue);
    connect(ui->durationSlider, &QSlider::sliderMoved, player, &QMediaPlayer::setPosition);

    connect(player, &QMediaPlayer::durationChanged, ui->durationProgressBar, &QProgressBar::setMaximum);
    connect(player, &QMediaPlayer::positionChanged, ui->durationProgressBar, &QProgressBar::setValue);
}

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

***void MainWindow::setRtspServerPath(const QString& path)***
{
    ui->filePathText->setText(path);

    const QUrl url = QUrl(path);

    const QNetworkRequest requestRtsp1(url);

    player->setMedia(requestRtsp1);
}

void MainWindow::setMediaFilePath(const QString& path)
{
    ui->filePathText->setText(path);

    const QUrl url = QUrl::fromLocalFile(path);

    player->setMedia(url);
}

void MainWindow::on_playButton_clicked()
{
    player->play();
    ui->volumeSlider->setSliderPosition(player->volume());
}

void MainWindow::on_pauseButton_clicked()
{
    player->pause();
}

void MainWindow::on_stopButton_clicked()
{
    player->stop();
    ui->volumeSlider->setSliderPosition(0);
}

void MainWindow::on_muteUnmuteButton_clicked()
{
    if (player->isMuted())
    {
        player->setMuted(false);
        ui->muteUnmuteButton->setText("Mute");
    }
    else
    {
        player->setMuted(true);
        ui->muteUnmuteButton->setText("UnMute");
    }
}

void MainWindow::on_volumeSlider_valueChanged(int value)
{
    player->setVolume(value);
}

void MainWindow::on_actionOpenNetworkStream_triggered()
{
    QString serverPath = QInputDialog::getText(this, "Rtsp Server","Rtsp Server Address");
    setRtspServerPath(serverPath);
}

void MainWindow::on_actionOpenFile_triggered()
{
    QString file = QFileDialog::getOpenFileName(this, "Open Media File", "", "Video files (*.mp4)");

    setMediaFilePath(file);
}

void MainWindow::on_forwardButton_clicked()
{
    player->setPlaybackRate(2.0);
}

void MainWindow::on_backwardButton_clicked()
{
    player->setPlaybackRate(-1.0);
}
#包括“mainwindow.h”
#包括“ui_main window.h”
#包括
#包括
#包括
主窗口::主窗口(QWidget*父窗口)
:QMainWindow(父级)
,ui(新ui::Main窗口)
{
用户界面->设置用户界面(此);
setWindowTitle(“超新星流查看器”);
ui->filePathText->setText(“”);
player=新的QMediaPlayer(此);
videoWidget=新的QVideoWidget(本);
播放器->设置视频输出(videoWidget);
用户界面->水平布局->添加小部件(视频小部件);
连接(播放器,&QMediaPlayer::durationChanged,ui->durationSlider,&QSlider::setMaximum);
连接(播放器,&QMediaPlayer::positionChanged,ui->durationSlider,&QSlider::setValue);
连接(ui->durationSlider,&QSlider::sliderMoved,player,&QMediaPlayer::setPosition);
连接(播放器,&QMediaPlayer::durationChanged,ui->durationProgressBar,&QProgressBar::setMaximum);
连接(播放器,&QMediaPlayer::positionChanged,ui->durationProgressBar,&QProgressBar::setValue);
}
MainWindow::~MainWindow()
{
删除用户界面;
}
***void主窗口::setRtspServerPath(常量QString&path)***
{
ui->filePathText->setText(路径);
常量QUrl url=QUrl(路径);
const QnetworkRequestRTSP1(url);
播放器->设置媒体(请求RTSP1);
}
void主窗口::setMediaFilePath(常量QString&path)
{
ui->filePathText->setText(路径);
const QUrl url=QUrl::fromLocalFile(路径);
播放器->设置媒体(url);
}
void主窗口::在_playButton _clicked()上
{
player->play();
用户界面->音量滑块->设置滑块位置(播放器->音量();
}
void主窗口::在暂停按钮上单击()
{
播放器->暂停();
}
void main window::在单击停止按钮时()
{
播放器->停止();
用户界面->卷滑块->设置滑块位置(0);
}
void main window::在按钮上单击()
{
如果(player->ismute())
{
player->setmute(假);
用户界面->静音按钮->设置文字(“静音”);
}
其他的
{
player->setmute(真);
用户界面->静音按钮->设置文本(“取消静音”);
}
}
void主窗口::在卷上滑动值已更改(int值)
{
播放器->设置音量(值);
}
void main window::on_actionOpenNetworkStream_triggered()
{
QString serverPath=QInputDialog::getText(这是“Rtsp服务器”、“Rtsp服务器地址”);
setRtspServerPath(serverPath);
}
void main window::on_actionOpenFile_triggered()
{
QString file=QFileDialog::getOpenFileName(这是“打开媒体文件”、“视频文件(*.mp4)”);
setMediaFilePath(文件);
}
void主窗口::在_forwardButton_clicked()上
{
球员->设置回球率(2.0);
}
void主窗口::在_backwardButton _clicked()上
{
player->setPlaybackRate(-1.0);
}