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

Posted Qt项目一站式解决方案

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt推流程序自动生成网页远程查看实时视频流(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc)相关的知识,希望对你有一定的参考价值。

一、前言说明

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

很多时候未必电脑上有播放器,但是浏览器肯定有,为了第一时间验证推流后的视频流是否正常,所以直接在推流程序中加上了测试网页的功能,就是主动生成一个宫格形式的视频播放列表,自动打开网页立即预览实时效果,本人不是专业的网页程序员,所以采用了最为简单直接的办法,那就是用iframe框架嵌套,一个通道相当于就一个iframe,默认iframe是带边框的,可以用frameborder=0属性来去掉,默认网页有边距和间距,可以用样式bodymargin: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 提取码:01jf 名称:bin_video_push
  2. 国内站点:https://gitee.com/feiyangqingyun
  3. 国际站点:https://github.com/feiyangqingyun
  4. 个人主页:https://blog.csdn.net/feiyangqingyun
  5. 知乎主页: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. 单击停止服务按钮会停止所有服务,在启动服务后支持动态添加文件、移除文件、清空文件。

五、效果图





用ffmpeg录制小程序直播开发高清视频并实现直播推流

导读:用ffmpeg录制小程序直播开发高清视频并实现直播推流,本文用ffmpeg和 screen capture recorder工具实现用命令行方式录制小程序直播开发的高清视频,并将实时录制的高清视频推流到各大直播平台。

第一部分:小程序直播开发录屏工具下载安装
工具
Ffmpeg

screen capture recorder

Ffmpeg+screen-capture-recorder百度云下载:
http://www.zhaowucc.cn/xiaochengxu/baike/157.html

1.安装ffmpeg:
下载ffmpeg-20200424-a501947-win64-static.zip
解压ffmpeg-20200424-a501947-win64-static.zip 到D盘 并改名为 ffmpeg(即:D:ffmpeg)

添加环境变量
在桌面 我的电脑 右键 属性 选高级 找 环境变量 在系统变量 找到path,点编辑
加入 D:ffmpegin 即可

在命令行下: 运行 cmd
输入 ffmpeg能正常运行就已成功安装好ffmpeg.

2.安装screen capture recorder:
运行 Setup.Screen.Capturer.Recorder.v0.12.10.exe 按默认安装即可。

第二部分:小程序直播开发高清视频录制命令

1.小程序直播开发高清视频录制(只录屏幕):
ffmpeg -f dshow -video_size 1920x1080 -framerate 30 -pixel_format yuv420p -i video="screen-capture-recorder" luping.mp4

2.小程序直播开发高清视频录制(录屏+录音):
ffmpeg -f dshow -video_size 1920x1080 -framerate 30 -pixel_format yuv420p -i video="screen-capture-recorder":audio="virtual-audio-capturer" luping_luyin.mp4

ffmpeg -f gdigrab -i desktop -f dshow -rtbufsize 2000M -i audio="virtual-audio-capturer" -c:v vp9 -c:a copy -s 1920*1080 -b:v 8000k -r 30 -preset veryfast .gaoqing.avi

3.小程序直播开发高清视频录制(录屏+录音+录麦克风)

ffmpeg -f dshow -i audio="麦克风 (Realtek High Definition Audio)" -f dshow -i audio="virtual-audio-capturer" -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f gdigrab -i desktop -vcodec libx264 -r 60.97 -b:v 1500K -codec:a aac -ac 2 -ar 44100 -pix_fmt yuv420p luping_luyin_mic.mp4

4.小程序直播开发高清视频直播推流(录屏+录音+录麦克风+rtmp推流)
ffmpeg -f dshow -i audio="麦克风 (Realtek High Definition Audio)" -f dshow -i audio="virtual-audio-capturer" -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f gdigrab -i desktop -vcodec libx264 -r 60.97 -b:v 1500K -codec:a aac -ac 2 -ar 44100 -pix_fmt yuv420p -tune zerolatency -preset ultrafast -f flv "rtmp://localhost/live/livestream"

5.高清转码
ffmpeg -i gaoqing.avi -vcodec libx264 -preset slower -crf 18 -threads 4 -acodec copy gaoqing1.MKV

(一)CRF转码:
ffmpeg -i luping.mp4 -vcodec libx264 -pix_fmt yuv420p -crf 16 -acodec copy luping_crf.mp4
ffmpeg -i luping.mp4 -vcodec libx264 -pix_fmt yuv420p -crf 16 -vb 8000k luping1_crf.mp4

(二)二次编码:
ffmpeg -i 源视频.mp4 -vcodec libx264 -pix_fmt yuv420p -vb 6000k -pass 1 -f mp4 NULL
ffmpeg -i 源视频.mp4 -vcodec libx264 -pix_fmt yuv420p -vb 6000k -pass 2 -f mp4 2次转码高清.mp4
资料参考:www.zhaowucc.cn

以上是关于Qt推流程序自动生成网页远程查看实时视频流(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc)的主要内容,如果未能解决你的问题,请参考以下文章

Qt编写推流综合应用示例(文件推流/桌面推流/本地摄像头/网络摄像头/转发推流/视频分发)

实战小项目之ffmpeg推流yolo视频实时检测

Nginx学习之配置RTMP模块搭建推流服务

Nginx学习之配置RTMP模块搭建推流服务

C++/Qt音视频通话开发MetaRTC源码解读,视频推流和拉流

用ffmpeg录制小程序直播开发高清视频并实现直播推流