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

news2024/11/27 16:40:29

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.coloradmin.cn/o/1582129.html

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

相关文章

17. 【Android教程】开关控件ToggleButton/Switch

本节要学的两个控件是我们在使用 Android 手机时经常会用到的,相信大家对它并不陌生,甚至是非常熟悉,但是现实是很多开发者并不了解开关控件,所以会花不少功夫通过 TextView 或 Button 来实现开关功能,殊不知 Android …

CSS 实现无限波浪边框卡片

CSS 实现无限波浪边框卡片 效果展示 鼠标悬停效果,底部色块的边框是无限滚动的波浪 鼠标没有悬停效果 CSS 知识点 CSS 基础知识回顾使用 radial-gradient 实现波浪边框使用 anumate 属性实现波浪边框动画和控制动画运动 波浪实现原理 波浪边框的实现思路其…

【产品】ADW300 无线计量仪表 用于计量低压网络的三相有功电能

1 概述 ADW300 无线计量仪表主要用于计量低压网络的三相有功电能,具有体积小、精度高、功能丰富等优点,并且可选通讯方式多,可支持 RS485 通讯和 Lora、2G、NB、4G 等无线通讯方式,增加了外置互感器的电流采样模式,从…

day6 nest商业项目初探·二(java转ts全栈/3R教室)

背景:今天看3r教室开放的这个项目 【美国 | 3.6w】TS全栈:Goflashdeals代购返利网站 (2022.09) - 3R酷 | 爱自由,不打工!一个属于3R会员的社区 (3rku.com)省流:web程序起来了,admin没起来&#…

CUDA 12.4文档2 内核线程架构

本博客参考官方文档进行介绍,全网仅此一家进行中文翻译,走过路过不要错过。 官方网址:https://docs.nvidia.com/cuda/cuda-c-programming-guide/ 本文档分成多个博客进行介绍,在本人专栏中含有所有内容: https://bl…

分享|如何知道自己是不是大数据信用黑名单?

随着大数据技术在金融贷前审核环节中的运用,早在多年前都形成了大数据信用,大数据信用作为辅助的风控工具,作用变得十分重要,其中大数据黑名单就是大数据差的重要一种,那如何知道自己是不是大数据信用黑名单呢?本文详…

Linux:gcc

Linux:gcc gcc概述语言发展史gcc的编译过程预处理编译汇编 gcc的链接过程动态库与静态库 gcc概述 GCC(英文全拼:GNU Compiler Collection)是 GNU 工具链的主要组成部分,是一套以 GPL 和 LGPL 许可证发布的程序语言编译…

python--正则表达式,元字符,反义符,转义符,位数问题

正则表达式(regular expression): 为什么使用正则表达式: 在软件开发过程中,经常会涉及到大量的关键字等各种字符串的操作,使用正则表达式能很大程度的简化开发的复杂度和开发的效率,所以pytho…

麒麟V10安装Redis6.2.6

1、下载redis安装包 Redis各版本下载:https://download.redis.io/releases/ 2、将下载后的.tar.gz压缩包上传到到服务器自定义文件夹下 3、 解压文件 tar -zxvf redis-6.2.6.tar.gzmv redis-6.2.6 redis4、安装redis 在redis文件夹下输入make指令 cd /opt/redi…

【React】react 初学增删改查购物车案例

界面 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>react-购物车案例</title><…

华为OD机试 - 机器人搬砖 - 二分查找(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

centos 7.9 nginx本地化安装,把镜像改成阿里云

1.把centos7.9系统切换到阿里云的镜像源 1.1.先备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup1.2.下载新的CentOS-Base.repo配置文件 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo特别…

css面试题--定位与浮动

1、为什么需要清除浮动&#xff1f; 在非IE浏览器下&#xff0c;容器不设高度且子元素浮动时&#xff0c;容器高度不能被内容撑开&#xff0c;内容会溢出到容器外面而影响布局。这种现象被称为浮动。 浮动的原理&#xff1a;浮动元素脱离文档流&#xff0c;不占用空间&#xff…

39-性能分析(下):APIServer性能测试和调优实战

在API上线之前&#xff0c;我们需要知道API的性能&#xff0c;以便知道API服务器所能承载的最大请求量、性能瓶颈&#xff0c;再根据业务对性能的要求&#xff0c;来对API进行性能调优或者扩缩容。通过这些&#xff0c;可以使API稳定地对外提供服务&#xff0c;并且让请求在合理…

java算法day49 | 动态规划part10 ● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II

121. 买卖股票的最佳时机 class Solution {public int maxProfit(int[] prices) {//1、定义dp数组&#xff0c;表示第i天持股票的状态dp[i][0]表示持有股票dp[i][1]表示不持有股票int[][] dpnew int[prices.length][2];//3、初始化数组dp[0][1]0;dp[0][0]-prices[0];//4、遍历顺…

Linux--进程的概念(二)

目录 一、进程的优先级1.1 基本概念1.2 查看进程优先级1.3 PRI&NI1.4 如何更改进程的优先级1.4.1 用top命令更改进程的nice1.4.2 用renice命令更改进程的nice 1.5 其他概念 二、环境变量2.1 基本概念2.2 常见的环境变量2.3 查看环境变量2.3.1 测试PATH2.3.2 测试HOME2.3.3 …

Android14之智能指针的弱引用、强引用、弱指针、强指针用法区别及代码实例(二百零五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

LTC4054 充电指示灯转灯电路

由于这个芯片只有CHRG# 引脚&#xff0c;不像4056 那样两个引脚能分别接一个LED&#xff0c;要实现充电指示就必须自己整整外围电路。先说明一下&#xff0c;网上常见的这种接法&#xff1a; 一个LED 直连CHRG# 引脚&#xff0c;我试了是不行的&#xff0c;即使充满电&#xff…

【国际会议火热征稿】2024年应用经济学、管理科学与社会国际学术会议(ICAEMSS 2024)

会议简介 2024年应用经济学、管理科学与社会国际学术会议将聚焦应用经济学和管理科学的前沿问题&#xff0c;深入探讨社会变革中的经济管理与科学应用。参会者将分享最新研究成果&#xff0c;交流学术观点&#xff0c;共同探索经济、管理与社会的融合发展之路。本次会议旨在推…

Zotero + Markdown论文工作流

文章目录 关键步骤Zotero Better BibTeXObsidian Citekey Plugin & WrittingPandoc Export 关键步骤 在Zotero中&#xff0c;使用Better BibTex生成.bib文件&#xff0c;用于提取索引信息。由于后续需要使用pandoc将markdown转换为word或者LaTeX&#xff0c;所以Better Bi…