Qt/C++推流组件使用说明

2.1 网络推流

在这里插入图片描述
公众号:Qt实战,各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发。

公众号:Qt入门和进阶,专门介绍Qt/C++相关知识点学习,帮助Qt开发者更好的深入学习Qt。多位Qt元婴期大神,一步步带你从入门到进阶,走上财务自由之路。

2.1.1 操作步骤
  1. 第一步:选择流媒体服务程序的类型,比如mediamtx。
  2. 第二步:选择推流模式,可选rtsp/rtmp,要看具体流媒体程序支持哪种,大部分都同时支持两种。
  3. 第三步:选择网卡,从网卡地址下拉框中选择要推流的网卡地址,可能一台电脑设置了多个IP地址,所以要选择对应的网卡地址。这个关系到拉流的时候对应地址从哪里拉。
  4. 第四步:选择类型和模式后,会自动生成对应的推流地址,也可以手动修改,比如如果需要udp推流可以在推流地址框中输入udp://127.0.0.1:8888。
  5. 第五步:添加好要推流的文件或者地址,可以单选选择文件、目录、地址三种方式添加。添加完成后会自动在左侧表格中显示。
  6. 第六步:单击启动服务,开始推流。如果推流成功,左侧表格中每一个推流行会显示推流中字样。
  7. 第七步:推流成功后,可以单击选中表格行,右下角会自动显示多种拉流地址,其中rtsp、rtmp这种用播放器可以直接打开,http这种可能需要直接浏览器中打开。
  8. 第八步:网页预览,这一步可选,只是为了验证推流后的音视频在网页中能否正常播放。
2.1.2 其他说明
  1. 流媒体服务程序类型和端口相关信息在配置文件config/video_push_port.txt文件中,可以自行修改。端口信息务必正确,不然自动生成的推流和拉流地址端口不正确,导致推拉流失败。由于一台电脑可能安装了多个流媒体服务程序,为了方便测试,或者端口有冲突(比如windows上rtsp的554端口很可能被占用/需要改成其他端口比如5541),会将部分程序的端口设置成其他端口,最终以修改后的真实端口为准。
  2. 选择rtsp/rtmp其中一种模式推流后,可以用不同方式拉流,比如rtsp、rtmp、hls、flv、ws-flv、webrtc。并不是说要用rtsp拉流就必须rtsp推流,流媒体服务程序专门负责转换,会自动根据请求的协议转换对应的格式数据推给拉流者。
  3. udp推拉流端口是唯一的,意味着一个端口只能用于一个推流对象,而且端口是独占的,拉流那边只能一个地方拉。
  4. 添加文件、目录、地址,可以在启动服务前添加好,也可以在启动服务后添加,都会自动处理。
  5. 默认的生成唯一标识策略是标识递增,即以指定的标识后面添加数字序号来命名。可以在其他参数中修改,比如需要手动指定唯一的标识(类似于OBS中的推流码,其实就是推流地址后的一串字符,很多流媒体服务会规定一个地址给你推流),可以在策略下拉框选择指定标识,此时再去添加,则按照输入框的指定标识来添加。切记唯一标识不能重复。
  6. 在表格中选中一行后,会自动显示该对象的视频预览画面和播放进度,可以拖动播放进度切换推流进度。
  7. 如果选择的是rtmp推流地址,则H265格式会自动转换成H264的格式推流,rtsp推流地址直接支持H265格式视频数据。
  8. webrtc不支持265视频和aac音频格式,如果想要在网页中的webrtc方式打开视频听到声音,需要源头是264+pcma/pcmu格式的数据,建议用rtsp方式推流。一般监控厂家的设备都支持调整视音频格式。
  9. 不仅支持音视频文件和流,还支持本地设备比如摄像头和桌面采集推流,格式超级详细,你想要的各种可能的情况和需求场景几乎都涵盖,经过了多少年的实战总结和验证。具体详细格式说明参见 https://feiyangqingyun.gitee.io/qwidgetdemo/video_system/#07-地址格式
  10. 为什么放一个静音复选框?因为很多时候测试都是在同一台电脑,为了验证音频是否也同步推流成功,需要推流这边静音播放,这样拉流那边出来的声音就是拉流的,可以验证音频是否推流成功以及是否音视频同步。这样就不会有声音干扰。
  11. 如果想要降低带宽,可以在其他参数中选择强转265,或者还可以选择降低图片质量,以及缩放分辨率,比如设置50%则按照原有分辨率的一半宽高缩放再推流。
  12. 预览类型,可选hls、flv、ws-flv、webrtc,不同的流媒体服务器支持的预览类型不同,实时性推荐webrtc和ws-flv。flv最多可以在一个网页中同时显示6个,这是浏览器的限制。
  13. 如果在win7系统发现mediamtx无法运行,那是因为官方的新版本不再支持win7,可以选择低版本的比如1.3及以下,或者选择其他流媒体程序ZLMediaKit等。
  14. 不同的流媒体程序有不同的差别和效果,如果想要拉流秒开,建议选用ZLMediaKit。

2.2 设备推流

在这里插入图片描述

2.2.1 操作步骤
  1. 第一步:从下拉框中选择视音频设备,会自动设置对应的采集地址。也可以手动修改采集地址比如指定分辨率和帧率等参数。具体格式要求见网络推流部分的格式说明。
  2. 第二步:填写推流地址,建议视音频不同推流地址后缀填video/audio字样方便区分。
  3. 第三步:单击启动推流按钮,推流成功后,视频会显示对应的预览画面,音频显示对应的音柱。
  4. 第四步:可以打开播放器填入rtsp地址进行验证。
2.2.2 其他说明
  1. 建议用rtsp推流,因为音频采集到的是pcm数据,rtsp直接支持pcm音频数据推流,不需要转换。
  2. 默认音视频是分开推流,实时性极好,这样是为了方便各种组合推流,比如桌面采集可以和麦克风组合,也可以和电脑音频组合推流。
  3. 在windows上支持本地摄像头音视频合并推流。可以在采集地址1中填入video=USB Video Device:audio=麦克风 (USB Audio Device),也就是前面是视频设备字符串,后面是音频设备字符串,中间英文冒号隔开。这样就是合并推流,一路流就带了音视频。
  4. 如果想在windows上以摄像头设备采集桌面,需要安装screen-capture-recorder。
  5. 勾选带上水印复选框,会在采集的画面上加上时间水印,方便拉流端查看,不然画面不动可能以为流中断了,有个时间在走就说明是动的画面。
  6. 桌面推流在配置不够好的电脑上可能遇到光标闪烁的问题,可以注册下screen-capture-recorder.dll即可,找到screen-capture-recorder/screen-capture-recorder注册.cmd 双击运行即可。

2.3 文件点播

在这里插入图片描述

2.3.1 操作步骤
  1. 第一步:选择或者填写要监听的网卡IP地址,填写好监听端口,建议默认即可。
  2. 第二步:单击添加文件或者目录,选择要加入点播的音视频文件,添加成功以后会自动罗列在表格中。
  3. 第三步:单击启动服务按钮,启动成功会变成停止服务。
  4. 第四步:验证点播地址,从表格中选中一行,会自动将该音视频文件的播放地址填写到右下角。将地址粘贴到浏览器地址栏回车即可查看播放音视频,可以任意切换播放进度。将地址用vlc或者其他播放器打开即可查看播放音视频,可以任意切换播放进度。
2.3.2 其他说明
  1. 文件点播服务支持多个同时请求,表格中会显示每个文件对应正在请求中的数量。
  2. 右下角有统计总请求数量,还有统计不同IP地址的请求总数。
  3. 单击停止服务按钮会停止所有服务,由于存在缓存的关系,停止以后缓存中的视频还可以继续播放,过一段时间就不能播放。
  4. 在启动服务后支持动态添加文件、移除文件、清空文件。
  5. 单击网页预览按钮会自动生成网页文件并打开预览。

2.4 系统设置

在这里插入图片描述

2.4.1 基本设置
  1. 软件标题:默认为空,会自动生成一个带版本号的标题,可以手动填写。
  2. GPU模式:有些电脑可能opengl版本过低或者不兼容,需要从下拉框选择opengles模式。
  3. 禁止多开:开启后软件只能运行一个实例,不允许多开,防止重复推流导致推流失败,因为一个推流码只能接收一个地方推流,否则数据冲突会失败。
  4. 开机运行:默认关闭,开机运行功能需要管理员身份运行程序才能正确设置开启启动,运行过一次就行。
  5. 后台运行:默认关闭,开启后在窗口最小化的时候,自动隐藏到右下角托盘运行,双击托盘图标或者右键选择主界面可以打开主界面。会自动记住最后是后台托盘运行还是显示的主界面运行,下次打开自动应用最后的配置。
  6. 自动复制:开启后选中表格行后,会自动拷贝第一个地址到剪切板,这样选中后就无须再去复制地址,而是直接到浏览器或者播放器粘贴地址播放即可。
  7. 外网地址:如果程序放在云服务器上运行,一般需要监听的网卡是内网的网卡,而对外访问是通过外网地址访问的,所以存在一个问题,就是自动生成的地址是以选择的网卡地址为准的。而实际需要的是能够直接访问的地址,所以需要用这个外网地址替换掉内网地址,用于生成正确的拉流地址。
  8. 网页地址:当网页预览文件生成的地址在www网站目录,则用这个网络地址来打开。
  9. 网络推流,网络推流模块网页预览文件存放地址。
  10. 文件点播,文件点播模块网页预览文件存放地址。
2.4.2 模块启用

勾选对应的模块,重启后会显示对应的模块在主界面中,重启应用。这个功能主要是为了方便有些用户希望简单点,不需要的模块就不要在界面上显示。

2.5 代码使用

  1. 将pri组件拷贝到你的项目下,pro中加一行引入推流组件include ($$PWD/…/core_videopush/core_videopush.pri)。
  2. 如果是网络推流则还需要引入ffmpeg等视频组件,参见提供的源码的pro中的写法。
  3. 引入头文件#include “netpushserver.h”。
  4. 编写代码实现网络推流服务。
//实例化类
NetPushServer *pushServer = new NetPushServer;
//设置推流地址
pushServer->setPushUrl("rtmp://127.0.0.1");
//逐个添加要推流的地址(会返回唯一标识用于拉流/也可以指定唯一标识)
pushServer->addUrl("f:/1.mp4", "test1");
pushServer->addUrl("video=USB Video Device|1280x720|25", "test2");
pushServer->addUrl("desktop=desktop|800x600|25|0|0", "test3");
pushServer->addUrl("http://vfx.mtime.cn/Video/2021/11/16/mp4/211116131456748178.mp4", "test4");
pushServer->addUrl("rtsp://admin:Admin123456@192.168.0.64:554/Streaming/Channels/101", "test5");
//获取拉流地址(该地址是rtmp拉流地址/可以用播放器播放)
QString url = pushServer->getPushUrl("f:/1.mp4");
//启动推流服务
pushServer->start();
//结束的时候停止
pushServer->stop();

2.6 流媒体服务

在这里插入图片描述

  • 本程序支持各种流媒体服务程序比如mediamtx、LiveQing、EasyDarwin、ZLMediaKit,srs等,只要填写好对应的推流码即可。
  • 每种流媒体都对应有自己的拉流格式和默认端口,该信息可以在配置文件config/video_push_port.txt中修改。
  • 端口信息非常重要,必须和流媒体服务器要求的格式完全一致,否则自动生成的网页预览以及右下角生成的各种拉流地址可能不正确。
  • 默认端口rtsp是554、rtmp是1935、http是80,所有默认端口可以不填。比如rtsp://127.0.0.1:554/live可以省略成rtsp://127.0.0.1/live。
  • 大量测试下来,网页显示视频流实时性从高到低依次是 webrtc > ws-flv > flv > hls。播放器打开rtsp/rtmp视频流实时性由具体的播放器控制,比如缓存大小和缓存时间,是否音视频同步等。
  • 由于flv拉流同源地址最大支持6路同时播放,所以要想实时性高而且网页播放支持多路就选择ws-flv,hls实时性最差。
  • mediamtx推出来的hls/webrtc流可以直接地址复制到浏览器打开,不依赖额外的js播放器播放。
  • windows系统上554端口可能被系统服务占用,建议修改成其他端口比如5541。
  • 如果有其他流媒体服务程序需要加入支持,直接在config/video_push_port.txt中增加即可,对应拉流地址格式需要在程序代码中加几行。
  • 预览文件生成位置可以设置到www网站目录,这样预览后可以直接通过网址或者IP地址打开,局域网也可以访问。
  • 各种流媒体服务器对接使用视频 https://www.bilibili.com/video/BV1rj411W7uB
  • 不同系统流媒体服务器使用视频 https://www.bilibili.com/video/BV14P411x7rF

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ppt从零基础到高手【办公】

第一章:文字排版篇01演示文稿内容基密02文字操作规范03文字排版处理04复习&作业解析第二章:图形图片图表篇05图形化表达06图片艺术化07轻松玩转图表08高效工具&母版统一管理09复习&作业解析10轻松一刻-文字图形小技巧速学第三章:…

[dvwa] xss dom

xss dom 0x01 low <script>alert(document.cookie)</script>弹个窗 script被写入html 0x02 medium 过滤<script 考虑使用img标签&#xff0c;其onerror属性在该元素加载src错误时触发 注入元素被写入value&#xff0c;就在value闭合option 和 select标签…

DP:子数组模型

一、最大子数组和 . - 力扣&#xff08;LeetCode&#xff09; 二、环形子数组的最大和 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int maxSubarraySumCircular(vector<int>& nums) {//动态规划思想解决 //环形数组问题&#xff0c;尝试转…

SpringBoot之SpringBoot整合MyBatis

本章详情 使用SpringBoot和MyBatis通过注解的方式操作数据库使用SpringBoot和MyBatis通过XML配置文件的方式操作数据库 项目搭建 1. 打开idea,选择Create New Project 2.选择Spring Initializer,然后点击Next 3.填写组织&#xff0c;坐标等信息&#xff0c;然后点击Next 4.选…

Qt | QObject 类中的成员函数存取属性值与动态属性、用反射机制获取属性的信息

1、注册自定义类型与 QMetaType 类 ①、QMetaType 类用于管理元对象系统中命名的类型,该类用于帮助 QVariant 中的类型以及队列中信号和槽的连接。它将类型名称与类型关联,以便在运行时动态创建和销毁该名称。 ②、QMetaType::Type 枚举类型定义了 QMetaType 支持的类型。其…

婴儿专用洗衣机有必要吗?精选4款品质婴儿洗衣机疯狂安利!

宝宝衣服的清洗对父母来说都很重要&#xff0c;所以挑选一款适合宝宝的小型洗衣机显得尤为重要。也许有许多人认为&#xff0c;为婴儿购买独立的洗衣机是不必要的&#xff0c;但是你是否了解呢&#xff1f;新生婴儿的肌肤要比成人更脆弱&#xff0c;更易受到感染而受到伤害&…

无人零售革新购物体验

无人零售革新购物体验 在智能化技术不断进步的今天&#xff0c;无人零售作为一种整合了尖端科技的新型零售方式&#xff0c;正在快速转变我们的消费体验。这种零售模式&#xff0c;凭借其高效与便捷性&#xff0c;不仅极大地丰富了消费者的购物方式&#xff0c;同时也为零售行…

xss.pwnfunction-Ah That‘s Hawt

<svg/onloadalert%26%2340%3B1%26%2341%3B> <svg/>是一个自闭合形式 &#xff0c;当页面或元素加载完成时&#xff0c;onload 事件会被触发&#xff0c;从而可以执行相应的 JavaScript 函数

flask 访问404

当你的项目有自己的蓝图&#xff0c;有添加自己的前缀&#xff0c;也注册了蓝图。 在访问的路由那里也使用了自己的蓝图&#xff0c;如下图 然后你访问的地址也没问题&#xff0c;但是不管怎么样访问就是返回404&#xff0c;这个时候不要怀疑你上面的哪里配置错误&#xff0c;…

JVM规范中的运行时数据区

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;每天一个知识点 ✨特色专栏&#xff1a…

[网鼎杯 2020 玄武组]SSRFMe-反弹shell

[网鼎杯 2020 玄武组]SSRFMe 因为用常规方法一直写不出来&#xff0c;所以就换了一种 反弹shell 参考文章 很经典的一道CTF-WriteUP[网鼎杯 2020 玄武组]SSRFMe - FreeBuf网络安全行业门户

大厂Java笔试题之判断字母大小写

/*** 题目&#xff1a;如果一个由字母组成的字符串&#xff0c;首字母是大写&#xff0c;那么就统计该字符串中大写字母的数量&#xff0c;并输出该字符串中所有的大写字母。否则&#xff0c;就输出* 该字符串不是首字母大写*/ public class Demo2 {public static void main(St…

[dvwa] sql injection

sql injection 0x01 low sql语句没有过滤 经典注入&#xff0c;通过逻辑or为真相当于select * from users where true&#xff0c;99换成1也成 用union select 对齐列数&#xff0c;查看数据库信息 1’ union select 1,2# order by探测对齐列数更方便 1’ or 11 order b…

盛最多水的容器(双指针)

11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 …

爱因斯坦求和约定 含代码

目录 一、简介 1.自由标 2.哑标 二、torch实现 1.计算迹 2.取矩阵对角线 3.计算外积 4.batch矩阵乘法 5.带有子列表和省略号 6.变换维度 7.双线性变换&#xff0c;类似于torch.nn.functional.bilinear 一、简介 爱因斯坦求和约定(Einstein summation convention)是一…

Execute-Assembly(1)

原理 在《Cobalt Strike 原理分析》一文中&#xff0c;介绍了内存加载程序集(Assembly)的主要有四步&#xff1a; 1 加载CLR环境 2 获取程序域 3 装载程序集 4 执行程序集 在odzhan的Shellcode: Loading .NET Assemblies From Memory所描述的那样&#xff0c;.Net Framework随着…

MySQL 嵌套查询

嵌套查询 是指在一个完整的查询语句之中&#xff0c;包含若干个不同功能的小查询&#xff1b;从而一起完成复杂查询的一种编写形式。包含的查询放在&#xff08;&#xff09;里 &#xff0c; 包含的查询出现的位置&#xff1a; 位置含义SELECT之后把查询结果作为表头使用FROM…

【InternLM】茴香豆:搭建你的RAG智能助理

茴香豆是 InternLM开源的基于 LLM的群聊知识助手&#xff0c;其提供了一整套前后端 web、android、算法源码&#xff0c;支持工业级商用。其最低运行运行成本低至 1.5G 显存&#xff0c;无需训练适用各行业。 1. 技术报告 参照技术报告HuixiangDou: Overcoming Group Chat Sc…

【DM8】外部表

外部表是指不存在于数据库中的表。 通过向达梦数据库定义描述外部表的元数据&#xff0c;可以把一个操作系统文件当成一个只读的数据库表&#xff0c;对外部表将像普通定义的表一样访问。 外部表的数据存储在操作系统文件中&#xff0c;建立外部表的时候&#xff0c;不会产生…

百度驾驶证C++离线SDK V1.1 C#接入

百度驾驶证C离线SDK V1.1 C#接入 目录 说明 效果 项目 代码 下载 说明 自己根据SDK封装了动态库&#xff0c;然后C#调用。 SDK包结构 效果 项目 代码 using Newtonsoft.Json; using OpenCvSharp; using System; using System.Collections.Generic; using System.D…