• 794阅读
  • 0回复

Qt推流程序(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc)可在网页和播放器远程观看 [复制链接]

上一主题 下一主题
离线liudianwu
 

图酷模式  只看楼主 倒序阅读 楼主  发表于: 2023-05-13


## 一、前言说明
推流直播就是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号从手机端,电脑端,摄影机端打包传到服务器的过程。“推流”对网络要求比较高,如果网络不稳定,直播效果就会很差,观众观看直播时就会发生卡顿等现象,观看体验比较糟糕。主流推送协议有RTMP、HLS、SRT等。RTMP是目前最主流的流媒体传输协议,对CDN支持良好,实现难度较低,是大多数的直播平台的选择。使用RTMP传输的延时通常在1–3秒,适合手机端。不过RTMP不支持浏览器,如果直播服务需要浏览器,需要另外的推送协议支持。HLS是Apple公司定义的基于HTTP的流媒体实时传输协议。HLS是以点播的技术实现了直播的体验。因为每个小文件的时长很短,客户端可以很快地切换码率,以适应不同带宽条件下的播放。但是,HLS的延迟一般会高于普通的流媒体直播协议。RTC是一个支持浏览器进行实时语音、视频对话的开源协议。RTC支持目前的主流浏览器,即便在网络信号一般的情况下也具备较好的稳定性。可以实现点对点通信,通信双方延时低,是实现“连麦”功能比较好的选择。

拉流就是转播其他平台的视频。是将服务器已有直播内容,用指定地址进行拉取的过程。用户端向服务器发送视频文件的拉流地址的访问请求,则访问点播平台分发直播视频流,然后接收到分发的视频数据,从而达到在第三方平台观看转播视频的效果。推拉流基本上都要用到ffmpeg,用ffmpeg代码即可实现推流也可以实现拉流播放,唯独流媒体服务器一般选择第三方的组件轮子,比如mediamtx、srs、EasyDarwin、LiveQing、ZLMediaKit等,个人偏好用mediamtx,单文件发布,功能满足,go编写天生高并发,开源免费。

## 二、功能特点
### 2.1 文件推流
1. 指定网卡和监听端口,接收网络请求推送音视频等各种文件。
2. 实时统计显示每个文件对应的访问数量、总访问数量、不同IP地址访问数量。
3. 可指定多种模式,0-直接播放、1-下载播放。
4. 实时打印显示各种收发请求和应答数据。
5. 每个文件对应MD5加密的唯一标识符,用于请求地址后缀区分访问哪个文件。
6. 支持各种浏览器(谷歌chromium/微软edge/火狐firefox等)、各种播放器(vlc/mpv/ffplay/potplayer/mpchc等)打开请求。
7. 播放过程中可以任意切换播放进度,支持倍速播放。
8. 需要推流的文件名称历史记录自动存储和打开加载应用。
9. 切换文件获取访问地址,自动拷贝地址到剪切板方便直接粘贴测试使用。
10. 极低CPU占用,128路1080P同时推流不到1%CPU占用,异步发送数据机制。
11. 纯QTcpSocket通信,不依赖流媒体服务程序,核心源码不到500行,注释详细,功能完整。
12. 支持Qt4/Qt5/Qt6任意版本,支持任意系统(windows/linux/macos/android/嵌入式linux等)。

### 2.2 网络推流
1. 支持各种本地视频文件和网络视频文件。
2. 支持各种网络视频流,网络摄像头,协议包括rtsp、rtmp、http。
3. 支持将本地摄像头设备推流,可指定分辨率和帧率等。
4. 支持将本地桌面推流,可指定屏幕区域和帧率等。
5. 自动启动流媒体服务程序,默认mediamtx(原rtsp-simple-server),可选用srs、EasyDarwin、LiveQing、ZLMediaKit等。
6. 可实时切换预览视频文件。
7. 推流的清晰度和质量可调。
8. 可动态添加文件、目录、地址。
9. 视频文件自动循环推流,如果视频源是视频流,在掉线后会自动重连。
10. 网络视频流自动重连,重连成功自动继续推流。
11. 网络视频流实时性极高,延迟极低,延迟时间大概在100ms左右。
12. 极低CPU占用,4路主码流推流只需要占用0.2%CPU。理论上常规普通PC机器推100路毫无压力,主要性能瓶颈在网络。
13. 推流后除了用rtmp地址访问以外,还支持直接hls/webrtc访问,可以直接浏览器打开看实时画面。
14. 可以推流到外网服务器,然后通过手机、电脑、平板等设备播放对应的视频流。
15. 支持Qt4/Qt5/Qt6任意版本,支持任意系统(windows/linux/macos/android/嵌入式linux等)。

## 三、体验地址
1. 体验地址:[https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g](https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g) 提取码:01jf 名称:bin_video_push
2. 国内站点:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)
3. 国际站点:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun)
4. 个人主页:[https://blog.csdn.net/feiyangqingyun](https://blog.csdn.net/feiyangqingyun)
5. 知乎主页:[https://www.zhihu.com/people/feiyangqingyun/](https://www.zhihu.com/people/feiyangqingyun/)

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

### 4.2 网络推流
1. 选择或者填写推流的前缀地址,建议默认即可。
2. 单击添加文件或者目录,选择要加入推流的音视频文件,添加成功以后会自动罗列在表格中。
3. 单击添加地址,可以从下拉框中选择或者填写,下拉选项中是一些格式模板,比如本地摄像头、本地桌面、电视台、网络摄像机等。
4. 单击启动服务按钮,会变成停止服务字样表示启动服务成功。
5. 在启动服务后支持动态添加地址、移除地址、清空地址。如果处于启动服务中,添加后会立即推流。
6. 从表格中选中一行,会自动将播放地址填写到右下角,同时也会自动拷贝到剪切板。
7. 一次推流可以分多种不同的地址访问,右下角总共有三种地址,第一种是rtmp开头的视频流地址,可以用各种播放器打开,第二种是hls(m3u8)格式的地址,一般用于网页浏览器显示,第三种是webrtc格式的地址,一般用于浏览器或者部分支持该格式的播放器。
8. 将地址粘贴到浏览器地址栏回车即可查看视频流,地址也可以用播放器打开。
9. 单击停止服务按钮会停止所有服务,在启动服务后支持动态添加文件、移除文件、清空文件。

## 五、效果图
window.open('http://www.qtcn.org/bbs/attachment/Mon_2305/44_110085_256e0f22dd16944.jpg?112');" style="max-width:700px;max-height:700px;" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >

4条评分好评度+1贡献值+1金钱+10威望+1
20091001753 好评度 +1 - 2023-05-14
20091001753 贡献值 +1 - 2023-05-14
20091001753 威望 +1 - 2023-05-14
20091001753 金钱 +10 - 2023-05-14
欢迎关注微信公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发) QQ:517216493  WX:feiyangqingyun  QQ群:751439350
快速回复
限100 字节
 
上一个 下一个