首页| 论坛| 消息

标题:Qt音视频开发38-ffmpeg视频暂停录制的设计
作者:liudianwu
日期:2023-04-17 17:40
内容:

## 一、前言
基本上各种播放器提供的录制视频接口,都是只有开始录制和结束录制两个,当然一般用的最多的也是这两个接口,但是实际使用过程中,还有一种可能需要中途暂停录制,暂停以后再次继续录制,将中间部分视频不需要录制,跳过这部分不需要的视频,而且录制的视频文件必须是能够正常播放的连续的。vlc和mpv都只提供了开始录制和停止录制接口,ffmpeg既然是自己解码,所以录制完全自己控制,存储的时候,每一帧的数据都要写入pts和dts,每次重新计算时间基准保证时间正确,不然不是连续的帧保存后会跳。
打通了视频暂停录制功,还有个应用场景就可以迎难而解,就是多个通道的视频,不同时段分开存入同一个视频文件,类似于将轮询的过程中展示的视频挨个存储到同一个视频文件,当然分辨率必须保持一致,不一致可能存储会出问题,这种场景还是比较常见的,比如视频通道轮询过程中,指定某个位置的视频存储的同一个视频文件,将轮询的整个过程录制下来,后期以便回放查阅视频。在当前封装的组件中,除了打开和关闭录制,中途只需要将视频帧传入即可,会自动计算换算成正确的pts/dts存储到MP4文件中。
## 二、效果图

## 三、体验地址
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_demo/bin_linux_video。
## 四、相关代码
```cpp
void FFmpegThread::recordStart(const QString &fileName)
{
#ifdef videosave
AbstractVideoThread::recordStart(fileName);
if ((saveVideoType > 1) && !onlyAudio) {
this->setFileName(fileName);
//处于暂停阶段则切换暂停标志位(暂停后再次恢复说明又重新开始录制)
if (saveF ..

回复 发表
主题 版块