一、前言
用ffmpeg单独做视频保存不难,单独做音频保存也不难,难的是音视频同步保存到MP4中,重点是音视频要同步,其实这也不难,只要播放那边音视频同步后的数据,写入到文件即可。最难的是在播放过程中不断随机的切换播放进度,而且还会暂停播放、暂停录制的情况出现,这些个复杂情况的出现,可以说,测试了所有网络上可能找到的相关代码,没有一个是行得通的,基本上都是停留在最简单的处理。那怎么办呢?近期花了半个月的时间,闭门把这个硬骨头啃下来,专门处理这个问题,毕竟暂停播放、暂停录制、切换进度这些个情况都是极大概率发生的,这一关过不了,就无法号称最全播放组件了。总之核心的解决办法就是,除了要重新调整时间基准以外,还需要在前面重新按照帧数量和音频的时长来设置pts/dts,网上能找到的代码,几乎都没看到这个计算,几乎都是调整时间基准的。大致整理了下能够做到下面几点的才能基本合格。文章来源:https://www.toymoban.com/news/detail-582749.html
- 网上的保存计算都是在理想状态下进行的(打开后从第一帧开始保存直到结束)
- 中间如果切换了播放进度(不是连续的帧)
- 中间暂停了流采集或者暂停了录制(不是连续的时间)
- 同时支持录制到文件和推流到服务器
- 音视频同步输出(任意切换进度自动同步)
- 指定只存储视频或者音频
- 音视频流索引顺序是0/1和1/0
- 不编码存储和重新编码存储
为何要区分不编码存储和重新编码存储?因为编码要占用cpu,对于源头就是H264/265/AAC这种,完全可以不用编码直接存储到MP4文件中,可以大大节约CPU资源,所以保存类的设计中,就应该有这个判断。文章来源地址https://www.toymoban.com/news/detail-582749.html
二、效果图
到了这里,关于Qt/C++音视频开发46-音视频同步保存到MP4的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!