首页| 论坛| 消息

标题:Qt音视频开发43-采集屏幕桌面并推流(支持分辨率/矩形区域/帧率等设置/实时性极高)
作者:liudianwu
日期:2023-05-04 08:34
内容:

## 一、前言
采集电脑屏幕桌面并推流一般是用来做共享桌面、远程协助、投屏之类的应用,最简单入门的做法可能会采用开个定时器或者线程抓图,将整个屏幕截图下来,然后将图片传出去,这种方式很简单但是性能要低不少,一般采用ffmpeg来做桌面推流的居多,毕竟如果不采用代码直接ffmpeg一行命令即可(ffmpeg -f gdigrab -r 30 -i desktop -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f rtsp -g 5 -an rtsp://192.168.0.110:6907/stream), 最起码这个还没开始写代码直接就可以体验起来这个感觉很好。很多开源项目,就因为无法保证直接编译就能跑起来,导致熄火,都跑不起来何来的看下去的兴趣,尤其是初学者而言更是如此。
**采集大致步骤:**
- 查找格式 av_find_input_format,参数 gdigrab/x11grab/avfoundation
- 打开桌面 avformat_open_input,参数 desktop
- 查找视频流 av_find_best_stream
- 查找解码器 avcodec_find_decoder
- 打开解码器 avcodec_open2
- 循环读取 av_read_frame
- 解码视频 avcodec_send_packet/avcodec_receive_frame
- 关闭释放 avcodec_free_context/avformat_close_input
**推流大致步骤:**
- 创建输出 avformat_alloc_output_context2
- 创建视频流 avformat_new_stream
- 打开输出 avio_open,参数填推流完整地址
- 写入开始符 avformat_write_header
- 写入帧数据 av_interleaved_write_frame
- 关闭释放 avio_close/avformat_free_context
## 二、效果图

## 三、体验地址
1. 国内站点:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)
2. 国际站点:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun)
3. 个人作品:[https://blog.csdn.net/feiyangqingyun/article/details/97565652](https://blog.csdn.net/feiyangqingyun/article/details/97565652)
4. 体验地址:[https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g](https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g) 提取码:01jf 文件名:bin_video_push。
## 四、相关代码
```cpp
void FFmpegThread::initInputFormat()
{
//本地摄像头/桌面录屏
if (videoType == VideoType_Camera) {
#if defined(Q_OS_WIN)
&nbsp ..

回复 发表
主题 版块