qtav源码包编译(qt5.15+msvc2019)、使用vlc media player串流生成rtsp的url并且在qml客户端中通过qtav打开

news2024/11/28 10:49:43

QTAV源码包编译

下载源码

下载依赖库(里面有ffmepg等内容)
https://sourceforge.net/projects/qtav/files/depends/QtAV-depends-windows-x86+x64.7z/download
下载源码包
https://github.com/wang-bin/QtAV
  • 更新子模块
cd QtAV && git submodule update --init

将QTAV源码和依赖库解压在同一个根目录下,不然之后的.qmake.conf内容可能需要做一些改变

配置环境

将依赖库的lib\x64,bin\x64,include文件里的内容复制到Qt安装目录(Qt\5.15.2\msvc2019_64)下。

打开.qmake.conf文件

添加两行内容

INCLUDEPATH += $$PWD/../QtAV-depends-windows-x86+x64/include
#这里我们要注意 如果我们编译器是64位的 填以下路径
#LIBS += -L$$PWD/../QtAV-depends-windows-x86+x64/lib/x64
#这里我们要注意 如果我们编译器是32位的 填以下路径
LIBS += -L$$PWD/../QtAV-depends-windows-x86+x64/lib

构建

啊打开QtAV.pro,然后构建,我选择的是release版本的。中途会遇到一个错误:XXX是C++17中的用法。我选择在pro文件中加入CONFIG += C++17。然后就构建完成了,之后运行examples中的qml项目,可以正常运行。lib_win_x86_64里面的.lib和.dll库文件就是我们需要的编译好的QTAV第三方库。参考【Qt 开源音视频框架模块QtAV】01:介绍、编译以及简单使用。

安装qtav

在QTAV的编译目录下面找到sdk_install.bat点击安装,然后就安装好了。

在QML中使用QTAV

Qt里面可能无法识别QML中的qtav,所以可以在pro文件加入QML_IMPORT_PATH += [QtAVSourceCodeDir]/qml。参考Use QtAV In Your Projects。

  • test.pro
QT       += qml quick

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp

HEADERS +=

FORMS +=

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

RESOURCES += \
    qrc.qrc

QML_IMPORT_PATH += [QtAVSourceCodeDir]/qml


  • main.cpp
#include<QQmlEngine>
#include<QQmlContext>
#include<QQmlApplicationEngine>
#include<QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    if (engine.rootObjects().isEmpty())
        return -1;
    return a.exec();
}

  • main.qml
import QtQuick 2.9
import QtQuick.Window 2.2
import QtAV 1.6


Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    Video {
        id: video
        anchors.fill: parent   
        source: "D://test.mp4"
    }
    MouseArea {
        anchors.fill: parent
        onClicked: video.play()
    }

}

使用vlc media player推拉流

下载VLC media player

去官网下载

推流

菜单->媒体->流。点击添加,添加一个MP4视频,点击串流。
在这里插入图片描述
点击下一个
在这里插入图片描述
选择RTSP,点击添加
在这里插入图片描述
端口默认,路径自己输入
在这里插入图片描述
这个可以保持默认
在这里插入图片描述
点击流
在这里插入图片描述
这个时候不要把这个窗口关闭!

在qml中打开

  • main.qml
import QtQuick 2.9
import QtQuick.Window 2.2
import QtAV 1.6

//修改后
Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    Video {
        id: video
        anchors.fill: parent    //跟随父节点大小 全屏
         source:"rtsp://127.0.0.1:port//xxx"
    }
    MouseArea {
        anchors.fill: parent
         onClicked: video.play()

    }

}

然后就可以播放出视频,但是有时候比较卡,有时候直接黑屏,有时候画面很不清楚,可能是网络问题。这个问题有待解决。

使用vlc进行摄像头捕获、RTSP串流、播放

目前还没有研究这个问题,可以先参考使用vlc进行摄像头捕获、RTSP串流、播放。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/719835.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vmware postgresql大杂烩

Vmware 窗口过界&#xff1a; https://blog.csdn.net/u014139753/article/details/111603882 vmware, ubuntu 安装&#xff1a; https://zhuanlan.zhihu.com/p/141033713 https://blog.csdn.net/weixin_41805734/article/details/120698714 centos安装&#xff1a; https://w…

【Go】短信内链接拉起小程序

一、 需求场景 (1) 业务方&#xff0c;要求给用户发送的短信内含有可以拉起我们的小程序指定位置的链接&#xff1b; 【XXX】尊敬的客户&#xff0c;您好&#xff0c;由于您XX&#xff0c;请微信XX小程序-微信授权登录-个人中心去XX&#xff0c;如已操作请忽略&#xff0c;[…

Jenkins2.346新建项目时没有Maven项目选项解决办法

解决办法&#xff1a;需要安装Maven Integration 系统管理-->管理插件-->可选插件-->过滤输入框中输入搜索关键字&#xff1a; Maven Integration&#xff0c;下载好后安装。

Mysql:创建和管理表(全面详解)

创建和管理表 前言一、基础知识1、一条数据存储的过程2、标识符命名规则3、MySQL中的数据类型 二、创建和管理数据库1、创建数据库2、使用数据库3、修改数据库4、删除数据库 三、创建表1、创建方式12、创建方式23、查看数据表结构 四、修改表1、追加一个列2、修改一个列3、重命…

MySQL存储引擎(InnoDB、MyISAM、Memory面试题)

1.1 MySQL体系结构 1). 连接层 最上层是一些客户端和链接服务&#xff0c;包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于 TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念&#xff0c;为通过认证安全接入的…

暑期学JavaScript【第六天】

一、正则表达式 边界符 ^&#xff1a;表示以后面字符开头 $&#xff1a;表示以前方字符结尾量词 *:前面的字符至少出现0次 :前面的字符至少出现1次 ?:前面的字符出现0/1次 {n}:重复n次 {n,}:至少重复n次 {n,m}:重复n~m次字符类 [ ]:代表字符集合 /^[a-z]$/[ ^ ] 取反 [^a-…

leetcode 257. 二叉树的所有路径

2023.7.5 这题需要用到递归回溯&#xff0c;也是我第一次接触回溯这个概念。 大致思路是&#xff1a; 在reversal函数中&#xff0c;首先将当前节点的值加入到路径path中。然后判断当前节点是否为叶子节点&#xff0c;即没有左右子节点。如果是叶子节点&#xff0c;将路径转化…

nnUNet保姆级使用教程!从环境配置到训练与推理(新手必看)

文章目录 写在前面nnUNet是什么&#xff1f;一、配置虚拟环境二、安装nnUNet框架1.安装nnUNet这一步我遇到的两个问题&#xff1a; 2.安装隐藏层hiddenlayer&#xff08;可选&#xff09; 三、数据集准备nnUNet对于你要训练的数据是有严格要求的&#xff0c;这第一点就体现在我…

apple pencil值不值得购买?ipad可以用的手写笔推荐

现在市面的电容笔品牌鱼龙混杂&#xff0c;我们很在选购中很容易就踩坑&#xff0c;例如买到一些书写会频繁出现断触的&#xff0c;或者防误触功能会失灵。所以我们在选购中务必要擦亮双眼。而对于一些将ipad作为一种学习工具的人而言&#xff0c;电容笔已经是iPad中不可或缺的…

【C++】vector基本用法介绍

vector简单介绍 前言vector原型vector常用函数接口介绍vector的构造、析构、赋值构造析构 修改类的函数push_backinsertfind 函数 eraseswap 关于容量的函数max_sizesort vector\<char\> 和 string的区别vector\<数据类型\> 结束 前言 首先&#xff0c;vector的用…

vue watch

Vue.js已在全球开发人员中广受欢迎&#xff0c;这归功于其灵活的响应式系统和丰富的开发工具。本文将深入解析Vue中的Watch特性&#xff0c;我们将了解其功能&#xff0c;适用的实际例子&#xff0c;以及可能遇到的常见错误及其解决方案。 第一部分&#xff1a;Vue的Watch特性…

开放式耳机漏音有多大?开放式耳机和封闭式耳机哪个音质好?

什么是开放式耳机 从名字上理解就是开放样式的耳机&#xff0c;其实也确实如此&#xff0c;开放式耳机是不需要封闭耳道来传输声音&#xff0c;主要是通过耳骨振动传递或者声波震动耳膜&#xff0c;两者声音传递的方式都不用完全封闭耳道&#xff0c;可以让耳道对外界放开&…

【软件测试】如何梳理你测试的业务

目录 前言&#xff1a; 一、为什么要梳理业务&#xff1f; 二、梳理框架 1. 测试场景 2. 业务 3. 系统 4. 数据 5. 安全 6. 性能 7. 数据分析 8. 监控报警 9. 应急预案 前言&#xff1a; 在进行软件测试之前&#xff0c;合理和清晰地梳理测试的业务是非常重要的&a…

linux运维常用命令(持续更新)

目录 一&#xff1a; 查看指定端口是否被监听 二&#xff1a;查看某个端口/服务相关进程 三&#xff1a;在B机器查看是否可以访问A机器某个端口,查看端口是否开放 四&#xff1a;查看端口占用列表 五&#xff1a;查看端口占用情况 六&#xff1a;查看哪些进程监听了2181端…

了解PHP-入门-环境搭建-集成环境安装

PHP是一种创建动态交互性站点的强有力的服务器端脚本语言&#xff0c; PHP文件通常包含 HTML标签和一些 PHP脚本代码 Hypertext Preprocessor&#xff0c;超文本预处理器。是一种免费开源服务器端脚本语言&#xff0c;默认文件扩展名是 .php &#xff0c;可以嵌入到网页代码中&…

怎么学习PHP的文件上传和图像处理技术? - 易智编译EaseEditing

学习PHP的文件上传和图像处理技术可以按照以下步骤进行&#xff1a; 掌握基础知识&#xff1a; 了解PHP的基本语法和文件操作函数。熟悉文件上传的相关概念和流程。 学习文件上传&#xff1a; 学习如何在PHP中实现文件上传功能。了解表单的 enctype 属性、文件上传限制、文件…

防爆温湿度传感器:保障工业安全环境的关键设备

在现代工业生产过程中&#xff0c;安全是一项至关重要的考虑因素。特别是在危险和爆炸性环境中&#xff0c;保障人员和设备的安全更是至关重要。为了解决这一问题&#xff0c;防爆温湿度传感器应运而生。本文将详细介绍防爆温湿度传感器的工作原理、应用范围以及其在工业安全环…

伦敦银比起期货交易有哪些优势?

伦敦银交易属于现货交易&#xff0c;因此一般不受带交易时间、地点的限制&#xff0c;交易方式灵活方便&#xff0c;随机性强&#xff0c;投资者可以在任何场所与对手进行交易。相比之下&#xff0c;白银期货必须在交易所内依照法规进行公开、集中交易&#xff0c;不能进行场外…

Huawei Auth-Http Server 1.0 passwd文件泄露漏洞

先用fofa脚本爬取所有碧海威相关资产&#xff08;fofa脚本下载地址&#xff1a;&#xff09; python3 fofa-cwillchris.py -k body"umweb/u20.png" 将上面爬取到的文件&#xff08;一般是final****.txt&#xff09;移动到脚本目录下&#xff0c;保存为1.txt ./Huaw…

Redis实战——商户查询(一)

商户查询 缓存(Cache)&#xff1a;就是数据交换的缓冲区&#xff0c;俗称的缓存就是缓冲区内的数据&#xff0c;缓存数据在内存中&#xff0c;内存的读写性能完全高于磁盘&#xff0c;使用缓存可以大大降低用户访问并发量带来的服务器读写压力。当数据量较大时&#xff0c;如果…