当前位置: 首页 > article >正文

QT接入播放摄像头RTSP流

  • 如果想直接用源码工程,到这里下载

https://download.csdn.net/download/quantum7/89730058

  • 安装QT环境

  • 下载VLC SDK文件

这里并不是调用安装的VLC,所以需要下载SDK。

Index of /pub/videolan/vlc

这里建议使用最新的:

Index of /pub/videolan/vlc/last/win64

注意要下载后缀是7z的文件。

  • 需要的文件

sdk:编译需要的头文件和库文件。

plugs/libvlc.dll/libvlccore.dll:运行需要的文件。

  • 修改pro文件

INCLUDEPATH += $$PWD\sdk\include
LIBS += $$PWD\sdk\lib\libvlc.lib \
        $$PWD\sdk\lib\libvlccore.lib
  • mainwindow.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include <vlc/vlc.h>

#define RTSP_STREAM  "rtsp://192.168.1.100/live"

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
 
public slots:
    void OpenRtspStream();
 
public:
    void MediaShowWindow(libvlc_media_player_t*player);
    void MediaPlayerPlay();
private:
    Ui::MainWindow *ui;
    libvlc_instance_t*m_instence;
    libvlc_media_player_t*m_vlcplayer = nullptr;
 
    bool is_playing = false;
    int m_currentVolume;
};
#endif // MAINWINDOW_H
  • mainwindow.cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QFileDialog>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    //初始化
    ui->btn_play->setText("暂停");
    ui->Slider_volume->setMaximum(100);
    ui->Slider_volume->setValue(100);
 
    m_instence = libvlc_new(0,nullptr);
    if(m_instence == nullptr){
        qDebug()<<"instence null";
    }else{
        qDebug()<<"ok...";
    }
 
    //选择文件
    connect(ui->btn_open,&QPushButton::clicked,this,&MainWindow::OpenRtspStream);
 
    //播放暂停
    connect(ui->btn_play,&QPushButton::clicked,this,[=](){
        if(m_vlcplayer == nullptr){
            QMessageBox::warning(this,"无视频","请选择一个视频");
            return;
        }
        if(is_playing){
            libvlc_media_player_pause(m_vlcplayer);
            ui->btn_play->setText("播放");
            is_playing = false;
 
        }else{
            libvlc_media_player_play(m_vlcplayer);
            ui->btn_play->setText("暂停");
            is_playing = true;
        }
    });
    //音量调节
    connect(ui->Slider_volume,&QSlider::valueChanged,this,[=](int value){
        if(m_vlcplayer != nullptr){
            int volume = static_cast<int>(static_cast<float>(value) / ui->Slider_volume->maximum() * 100);
            libvlc_audio_set_volume(m_vlcplayer, volume);
 
            m_currentVolume = volume;
            ui->statusbar->showMessage("音量为: " + QString::number(volume));
        }
    });
}
 
MainWindow::~MainWindow()
{
    if(m_instence != nullptr){
        libvlc_release(m_instence);
        m_instence = nullptr;
    }
    delete ui;
}
 
void MainWindow::OpenRtspStream()
{
    if(m_vlcplayer != nullptr){
        libvlc_media_player_stop(m_vlcplayer);
        libvlc_media_player_release(m_vlcplayer);
        m_vlcplayer = nullptr;
    }

    libvlc_media_t* media = libvlc_media_new_location(m_instence, RTSP_STREAM);
    m_vlcplayer = libvlc_media_player_new_from_media(media);
    libvlc_media_release(media);
 
    //设置窗口句柄
    MediaShowWindow(m_vlcplayer);
    //播放
    MediaPlayerPlay();
}
 
void MainWindow::MediaShowWindow(libvlc_media_player_t *player)
{
    libvlc_media_player_set_hwnd(player,(void*)ui->widget_player->winId());
}
 
void MainWindow::MediaPlayerPlay()
{
    if(m_vlcplayer == nullptr){
        qDebug()<<"m_vlcplayer is null";
        return;
    }
 
    libvlc_media_player_play(m_vlcplayer);
    is_playing = true;
}


http://www.kler.cn/a/297678.html

相关文章:

  • jmeter多线程批量插入数据
  • C++位图的实现与详解
  • 【Python机器学习】卷积神经网络(CNN)——在NLP中使用CNN
  • 等待实质审查的商标可以用吗!
  • HTML与CSS网页制作指南
  • Windows系统下安装JMeter
  • 客户端负载均衡Ribbon 小实例
  • Class4——Esp32|Thonny两种方式同过电脑控制LED灯,路由器与电脑自带热点连接ESP32
  • 已配置好的Linux CentOS7虚拟机转换为可视化界面问题
  • VUE面试题1*
  • 卷积神经网络(二)CIFAR100类别分类
  • (计算机网络)运输层
  • 第100+24步 ChatGPT学习:概率校准 Beta Calibration
  • 智能提取:OfficeImagesExtractor让文档图片提取更简单
  • Java笔试面试题AI答之单元测试JUnit(3)
  • 一. Unity实现虚拟摇杆及屏幕自适应功能
  • Zotero同步文献方法
  • 如何在Linux 上运行 SciChart WPF图表控件?
  • C语言实现普通二叉树的数据结构
  • RTX AI PC 和工作站上部署多样化 AI 应用支持 Multi-LoRA