Qt下调用vlc库实现RTSP拉流播放和截图过程详解
作者:coder_Alaric
这篇文章主要为大家介绍了Qt下调用vlc库实现RTSP拉流播放和截图过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
1、介绍
使用VLC-Qt库实现拉流播放器基本功能,包括拉流、播放、暂停、截图等功能。
VLC-Qt库:一个对libVLC库基础上封装的开源库;
推拉流服务器:ZLMediaKitde的MediaServer;
推流工具:ffmpeg
VLC-Qt官网: VLC-Qt (tano.si)
Github地址:VLC-Qt (github.com)
2、下载/配置VLC-Qt库
进入VLC-Qt官网,按照自己的编译环境,下载对应的库和头文件,也可以去github仓库下载源码自己编译
我这里用的是MSVC64位,下载后库包括动态库、静态库和头文件
新建一个Qt的工程,添加第三方库,或直接在pro文件中配置以下:
LIBS += -L$$PWD/libVLC/lib/ -lVLCQtCore -lVLCQtWidgets INCLUDEPATH += $$PWD/libVLC/include DEPENDPATH += $$PWD/libVLC/include
3、设置视频播放控件
因为在libvlc中需要自己获取控件的HWND句柄,并将播放绑定在控件句柄上,VLC-Qt直接封装了这个函数并直接赋值控件,不过控件需要升级到VlcWidgetVideo的类。
我们再ui上选择一个widget的控件,右键升级
4、主要实现代码
在main中要设置Vlc的Plugin,主要是依赖的插件
#include "widget.h" #include <QApplication> #include "VLCQtCore/Common.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); VlcCommon::setPluginPath(a.applicationDirPath() + "/plugins"); Widget w; w.show(); return a.exec(); }
widget.h
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include "VLCQtCore/Common.h" #include "VLCQtCore/Instance.h" #include "VLCQtCore/Media.h" #include "VLCQtCore/MediaPlayer.h" QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); private slots: void on_btn_startPlay_clicked(); void on_btn_pause_clicked(bool checked); void on_btn_stop_clicked(); void on_btn_snap_clicked(); private: Ui::Widget *ui; VlcInstance * inst; VlcMediaPlayer *vlcPlayer; VlcMedia *vlcMedia; }; #endif // WIDGET_H
widget.cpp
#pragma execution_character_set("utf-8") #include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); ui->btn_snap->setEnabled(false); inst = new VlcInstance(VlcCommon::args(), this); vlcPlayer = new VlcMediaPlayer(inst); vlcPlayer->setVideoWidget(ui->widget_video); } Widget::~Widget() { delete ui; } void Widget::on_btn_startPlay_clicked() { QString rtspUrl = ui->edt_rtspUrl->text(); if(!rtspUrl.isEmpty()) { vlcMedia = new VlcMedia(rtspUrl, inst); vlcPlayer->open(vlcMedia); ui->btn_snap->setEnabled(true); } } void Widget::on_btn_pause_clicked(bool checked) { if(checked) { ui->btn_pause->setText("继续"); } else { ui->btn_pause->setText("暂停"); } vlcPlayer->togglePause(); } void Widget::on_btn_stop_clicked() { vlcPlayer->stop(); ui->btn_snap->setEnabled(false); } void Widget::on_btn_snap_clicked() { emit vlcPlayer->snapshotTaken("E:/123.jpg"); }
5、效果展示
源码 https://gitee.com/Damion_Learning/QtHalcon_LearningRecord/tree/master/printTest
以上就是Qt下调用vlc库实现RTSP拉流播放和截图过程详解的详细内容,更多关于Qt调用vlc库 RTSP拉流播放截图的资料请关注脚本之家其它相关文章!