• 1050阅读
  • 2回复

Qt推流程序自动生成网页远程查看实时视频流(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc) [复制链接]

上一主题 下一主题
离线liudianwu
 

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


## 一、前言说明
推流程序将视频流推送到流媒体服务器后,此时就等待验证拉流播放,一般可以选择ffplay命令行播放或者vlc等播放器打开播放,也可以选择网页直接打开拉流地址播放,一般主流的浏览器都支持网页直接播放hls/m3u8/webrtc类型的视频流,而且推流的主要目的可能就是为了能够在各个客户端中取流播放,尤其是网页端,毕竟在各种操作系统上,网页浏览器是基础组件,只要你的程序能够在网页中运行,那就相当于通吃各种操作系统,不用再去费劲心力的去开发各个平台的程序。视频监控行业现在也是越发严格的要求最好能够在网页上直接播放视频流,尤其是各个监控摄像头,由于rtsp/rtmp默认网页不支持直接播放,需要推流转换成hls/m3u8/webrtc来播放,hls格式的一般延迟比较大,首推webrtc格式的进行播放,实时性最好。

很多时候未必电脑上有播放器,但是浏览器肯定有,为了第一时间验证推流后的视频流是否正常,所以直接在推流程序中加上了测试网页的功能,就是主动生成一个宫格形式的视频播放列表,自动打开网页立即预览实时效果,本人不是专业的网页程序员,所以采用了最为简单直接的办法,那就是用iframe框架嵌套,一个通道相当于就一个iframe,默认iframe是带边框的,可以用frameborder=0属性来去掉,默认网页有边距和间距,可以用样式body{margin:3px;padding:0px;}来调整。自此推流后一键生成网页自动打开实时预览,非常哇咔咔。

## 二、功能特点
### 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. 每个推流都可以手动指定唯一标识符(方便拉流/用户无需记忆复杂的地址),没有指定则按照策略随机生成hash值。
13. 自动生成测试网页直接打开播放,可以看到实时效果,自动按照数量对应宫格显示。
14. 支持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. 每个推流都可以手动指定唯一标识符(方便拉流/用户无需记忆复杂的地址),没有指定则按照策略随机生成hash值。
16. 自动生成测试网页直接打开播放,可以看到实时效果,自动按照数量对应宫格显示。
17. 支持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_ba7201d4a263296.jpg?148');" 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-19
20091001753 贡献值 +1 - 2023-05-19
20091001753 威望 +1 - 2023-05-19
20091001753 金钱 +10 - 2023-05-19
欢迎关注微信公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发) QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线yeshi_long

只看该作者 1楼 发表于: 2023-11-02
请教WebRtc推流用的什么库,除了使用Google官方的webrtc库之外还有什么推荐的,谷歌的库光下载下来就十几个G还要梯子。
LS
离线shokokawaii

只看该作者 2楼 发表于: 2023-11-05
  
QFluentWidgets 是基于 Qt 的 Fluent Designer 组件库,内置超过 160 个开箱即用的 Fluent Designer 组件,支持亮暗主题无缝切换和自定义主题色。搭配所见即所得的 Fluent Designer 软件,只需拖拖拽拽,不用编写一行 QSS,就能快速搭建现代化界面。有意者可联系邮箱或者 QQ~
官网:https://qfluentwidgets.com/zh/ (需要科学上网)
邮箱:shokokawaii@foxmail.com
QQ:1953658489
快速回复
限100 字节
 
上一个 下一个