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

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_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic: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.mrgr.cn/news/22994.html

相关文章:

  • spingboot中创建简单的WebSocket服务和使用OKHttp创建socket客户端接收数据
  • Google AI 概述——喜欢的三点和不喜欢的两点
  • 力扣100题——二分查找
  • [Python学习日记-11] Python中的流程控制(while)
  • 学习笔记八:基于Jenkins+k8s+Git+DockerHub等技术链构建企业级DevOps容器云平台
  • LeetCode移除元素
  • 【C++ Primer Plus习题】14.1
  • 【Linux】万字解读<进程控制>:创建&中止&等待&替换
  • Linux 用户和组的增删改查,用户切换及权限超详细解读
  • SAP 免费学习网站推荐
  • 【AI绘画】Midjourney后置指令--seed、--tile、--q、--chaos、--w、--no详解
  • 20240910 每日AI必读资讯
  • Iceberg与SparkSQL写操作整合
  • 电压跟随器的作用是什么?
  • Vulnhub靶场 DC-1
  • 机器学习特征分析
  • 线性代数 第七讲 二次型_标准型_规范型_坐标变换_合同_正定二次型详细讲解_重难点题型总结
  • java 自定义注解校验实体类属性
  • 离心萃取机废旧磷酸铁锂电池回收工艺流程
  • Hive任务优化参数整理