Qt/C++音视频开发46-音视频同步保存到MP4

本文详细介绍了使用Qt/C++处理音视频同步保存到MP4的难点和解决方案,包括处理暂停播放、暂停录制、切换进度等复杂情况。文章提供了功能特点,如音视频同步输出、支持多种解码内核和显示策略,并给出了相关代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

用ffmpeg单独做视频保存不难,单独做音频保存也不难,难的是音视频同步保存到MP4中,重点是音视频要同步,其实这也不难,只要播放那边音视频同步后的数据,写入到文件即可。最难的是在播放过程中不断随机的切换播放进度,而且还会暂停播放、暂停录制的情况出现,这些个复杂情况的出现,可以说,测试了所有网络上可能找到的相关代码,没有一个是行得通的,基本上都是停留在最简单的处理。那怎么办呢?近期花了半个月的时间,闭门把这个硬骨头啃下来,专门处理这个问题,毕竟暂停播放、暂停录制、切换进度这些个情况都是极大概率发生的,这一关过不了,就无法号称最全播放组件了。总之核心的解决办法就是,除了要重新调整时间基准以外,还需要在前面重新按照帧数量和音频的时长来设置pts/dts,网上能找到的代码,几乎都没看到这个计算,几乎都是调整时间基准的。大致整理了下能够做到下面几点的才能基本合格。

  1. 网上的保存计算都是在理想状态下进行的(打开后从第一帧开始保存直到结束)
  2. 中间如果切换了播放进度(不是连续的帧)
  3. 中间暂停了流采集或者暂停了录制(不是连续的时间)
  4. 同时支持录制到文件和推流到服务器
  5. 音视频同步输出(任意切换进度自动同步)
  6. 指定只存储视频或者音频
  7. 音视频流索引顺序是0/1和1/0
  8. 不编码存储和重新编码存储

为何要区分不编码存储和重新编码存储?因为编码要占用cpu,对于源头就是H264/265/AAC这种,完全可以不用编码直接存储到MP4文件中,可以大大节约CPU资源,所以保存类的设计中,就应该有这个判断。

公众号:Q

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值