Qt Multimedia学习(5.15)可以播放本地视频但是播放rtsp出错

是什么

Qt Multimedia 是一个重要模块,它提供了丰富的 QML 类型和 C++ 类来处理多媒体内容。
提供了访问摄像头和无线电功能所需的 API。
内含的 Qt 音频引擎为用于3D 定位音频播放和内容管理。

#include <QtMultimedia>
#include <QtMultimediaWidgets>

QT += multimedia multimediawidgets

怎么用

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

#include <QtMultimediaWidgets/QVideoWidget>
#include <QtMultimedia/QMediaPlayer>
#include <QtMultimedia/QMediaPlaylist>

#include <QDebug>

#include <QVBoxLayout>

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

    layout = new QVBoxLayout;


#if 1
    player = new QMediaPlayer(this);

    //playlist = new QMediaPlaylist(player);
    //playlist->addMedia(QUrl("http://example.com/myclip1.mp4"));
    //playlist->addMedia(QUrl("http://example.com/myclip1.mp4"));

    videoWidget = new QVideoWidget(this);
    layout->addWidget(videoWidget);

    player->setVideoOutput(videoWidget);
    //关联错误提示信号
    connect(player, static_cast<void(QMediaPlayer::*)(QMediaPlayer::Error)>(&QMediaPlayer::error), this, &MainWindow::playerError);
    //player->setMedia(QUrl::fromLocalFile("/home/cfan/Desktop/LVGL/lvgl/lvgl/examples/libs/ffmpeg/birds.mp4"));
    QUrl rtspUrl;
    rtspUrl.setScheme("rtsp");
    rtspUrl.setUserName(QUrl::toPercentEncoding("admin")); // 编码用户名
    rtspUrl.setPassword(QUrl::toPercentEncoding("p@ssw0rd")); // 编码密码
    rtspUrl.setHost("192.168.51.165");
    rtspUrl.setPort(554);
    rtspUrl.setPath("/cam/realmonitor");
    rtspUrl.setQuery("channel=1&subtype=0");
    qDebug() << rtspUrl;
    player->setMedia(rtspUrl);

    videoWidget->show();
    //playlist->setCurrentIndex(1);
    player->play();


#endif

    ui->centralwidget->setLayout(layout);
}

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

void MainWindow::playerError(QMediaPlayer::Error error)
{
    switch (error) {
    case QMediaPlayer::NoError:
        qDebug() << "正常解码";
        break;
    case QMediaPlayer::ResourceError:
        qDebug() << "媒体资源无法解析";
        break;
    case QMediaPlayer::FormatError:
        qDebug() << "不支持该媒体资源的格式,没有解码器";
        break;
    case QMediaPlayer::NetworkError:
        qDebug() << "发生网络错误";
        break;
    case QMediaPlayer::AccessDeniedError:
        qDebug() << "没有适当的权限来播放媒体资源";
        break;
    case QMediaPlayer::ServiceMissingError:
        qDebug() << "没没有找到有效的播放服务,播放无法继续";
        break;
    default:
        break;
    }
}

可以正常播放本地视频,但是无法播放rtsp流,报错如下

媒体资源无法解析
Error: "Could not open resource for reading and writing."

遇到的问题

1.qt远程调试报错qt.qpa.xcb: could not connect to display

qt.qpa.xcb: could not connect to display 
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, xcb.

13:54:45: Remote process crashed.

2.执行报错报错defaultServiceProvider::requestService(): no service found for - “org.qt-project.qt.mediaplayer”

解决

3.Error: “Your GStreamer installation is missing a plug-in.”

Your GStreamer installation is missing a plug-in 解决办法

4.Error: "Invalid URI “”.

如果你的 RTSP 流需要提供用户名和密码进行访问,你应该在 URL 中正确提供它们。然而,Qt 在处理包含特殊字符(如 “@”, “:”, “/” 等)的用户名和密码时可能会遇到问题,因为这些字符可能与 URL 中的分隔符冲突。

一种解决方法是使用 QUrl::toPercentEncoding() 函数来对用户名和密码进行编码,以确保它们不会与 URL 分隔符发生冲突。

QUrl rtspUrl;
rtspUrl.setScheme("rtsp");
rtspUrl.setUserName(QUrl::toPercentEncoding("admin")); // 编码用户名
rtspUrl.setPassword(QUrl::toPercentEncoding("p@ssw0rd")); // 编码密码
rtspUrl.setHost("192.168.51.165");
rtspUrl.setPort(554);
rtspUrl.setPath("/cam/realmonitor");
rtspUrl.setQuery("channel=1&subtype=0");

player->setMedia(rtspUrl);
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值