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

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

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

相关文章

镗床工作台开槽的作用

镗床工作台开槽的作用主要有以下几点: 改善工作台的刚度和稳定性:开槽可以增加工作台的刚度,使其能够承受更大的切削力和振动力,提高工作台的稳定性。 方便工件夹紧和定位:开槽可用于夹紧和定位工件,使其能…

【DM8】序列

创建序列 图形化界面创建 DDL CREATE SEQUENCE "TEST"."S1" INCREMENT BY 1 START WITH 1 MAXVALUE 100 MINVALUE 1;参数&#xff1a; INCREMENT BY < 增量值 >| START WITH < 初值 >| MAXVALUE < 最大值 >| MINVALUE < 最小值…

PostgreSQL入门到实战-第十弹

PostgreSQL入门到实战 PostgreSQL数据过滤(三)官网地址PostgreSQL概述PostgreSQL中OR操作理论PostgreSQL中OR实操更新计划 PostgreSQL数据过滤(三) 了解PostgreSQL OR逻辑运算符以及如何使用它来组合多个布尔表达式。 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列…

MQ之————如何保证消息的可靠性

MQ之保证消息的可靠性 1.消费端消息可靠性保证&#xff1a; 1.1 消息确认&#xff08;Acknowledgements&#xff09;&#xff1a; 消费者在接收到消息后&#xff0c;默认情况下RabbitMQ会自动确认消息&#xff08;autoAcktrue&#xff09;。为保证消息可靠性&#xff0c;可以…

Thingsboard PE智慧运维仪表板实例(二)【智慧排口截污实例】

ThingsBoard 的仪表板是一个用于可视化和监控物联网数据的重要组件。 它具有以下特点: 1. 可定制性:用户可以根据自己的需求创建各种类型的图表、表格和指标。 2. 数据可视化:以直观的方式展示设备数据,帮助用户快速了解系统状态。 3. 实时更新:实时反映设备的最新数据…

Vant DropdownMenu 下拉菜单带搜索功能

Vant DropdownMenu 下拉菜单带搜索功能 效果图&#xff1a; 上代码&#xff1a; <van-dropdown-menu active-color"#E33737"><van-dropdown-item ref"dropdownItem"><template #title><span>{{ dropdownItem.text }}</span…

PVE下安装配置openwrt和ikuai

开端 openwrt 和 ikuai 是比较出名的软路由系统。我最早接触软路由还是因为我的一个学长要改自己家里的网络&#xff0c;使用软路由去控制网络。我听说后便来了兴致&#xff0c;也在我家搞了一套软路由系统。现在我已经做完了&#xff0c;就想着写个文章记录一下。 软路由简介…

java操作linux

文章目录 远程连接服务器执行linux命令或shell脚本介绍Process的方法相关类UML 工具类基本工具类依赖第三方的工具类 远程连接服务器 java程序远程linux服务器有两个框架分别是&#xff1a;jsch与ganymed-ssh2框架。推荐使用jsch框架&#xff0c;因为ganymed-ssh2框架不支持麒…

百度驾驶证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…

C++矩阵库Armadillo出现warning solve() system is singular错误的解决

本文介绍使用C 语言的矩阵库Armadillo时&#xff0c;出现报错system is singular; attempting approx solution的解决方法。 在之前的文章中&#xff0c;我们介绍过Armadillo矩阵库在Visual Studio软件C环境中的配置方法&#xff08;https://blog.csdn.net/zhebushibiaoshifu/a…

使用midjourney搞出一套三国人物画像!

当下已进入如火如荼的全民AI时代&#xff0c;最近体验了下midjourney&#xff0c;使用它的以图生图功能生成出来一套三国人物画像&#xff0c;和大家分享下使用心得。 使用midjourney的准备工作 下载工具 使用midjourney生产图片依赖的工具和流程&#xff0c;大致如下&#…

vue3移动端H5 瀑布流显示列表

以上效果 是之前发送的改进版 waterList <template><view class"pro-cons" v-if"data.length"><view class"cons-left"><template v-for"(item, index) in data"><template v-if"(index 1) % 2 1…

NLP在搜索召回领域中的应用场景

自然语言处理&#xff08;NLP&#xff09;在搜索召回领域中的应用场景非常广泛&#xff0c;它通过理解和分析人类语言&#xff0c;提高了信息检索的准确性和效率。以下是一些具体的应用场景&#xff1a; 1. 搜索引擎优化 NLP技术可以用于优化搜索引擎的查询处理&#xff0c;通…

【DM8】外部表

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

下载安装JDK17(windows)

官网地址 Oracle | Cloud Applications and Cloud Platform 点击Products拉倒最下面点击java 点击右下角Download Java 选择JDK17 点击Windows&#xff0c;下载第二个 下载完成点击一下步安装就好了 认真看这段话 ​ JDK 17 binaries are free to use in production and free…

代码整洁之道【2】--函数

关于函数部分的总结 一、函数只做一件事 函数应该只做一件事、做好这件事、只做这件事。 判断函数是否不止做了一件事&#xff0c;还有一个方法&#xff0c;就是看是否能再拆出一个函数&#xff0c;该函数不仅只是单纯地重新 二、函数尽量不要太长 按照作者的理论&#xff…

【算法】双指针算法

个人主页 &#xff1a; zxctscl 如有转载请先通知 题目 1. 283. 移动零1.1 分析1.2 代码 2. 1089. 复写零2.1 分析2.2 代码 3. 202. 快乐数3.1 分析3.2 代码 4. 11. 盛最多水的容器4.1 分析4.2 代码 5. LCR 179. 查找总价格为目标值的两个商品5.1 分析5.2 代码 6. 15. 三数之和…

大语言模型开源数据集

本文目标&#xff1a;汇聚目前大语言模型预训练、微调、RM/RL、评测等全流程所需的常见数据集&#xff0c;方便大家使用&#xff0c;本文持续更新。文章篇幅较长&#xff0c;建议收藏后使用。 一、按语料类型分类 1、维基百科类 No.1 Identifying Machine-Paraphrased Plagia…

企业微信认证后可以修改主体吗?

企业微信变更主体有什么作用&#xff1f;如果原有的公司注销了&#xff0c;或者要更换一家公司主体来运营企业微信&#xff0c;那么就可以进行变更主体&#xff0c;变更主体后才可以保留原来企业微信上的所有用户&#xff0c;否则就只能重新申请重新积累用户了。企业微信变更主…

【资源分享】MAC上最好用的截图软件-Snipaste

::: block-1 “时问桫椤“是一个关注本科生到研究生教育阶段的不严肃的公众号&#xff0c;希望能在大家迷茫、难受、困难之时帮助到大家。用广大研究生的经验总结&#xff0c;让大家能尽早的适应研究生生活&#xff0c;尽快的看透科研本质。祝好&#xff01;&#xff01;&#…