ios 音视频处理优化总结

         做了那么多年C底层,现在做iOS上层,感觉还是有很多优势的。做底层的时候就做过音视频的东西,上层有很多类似,相通的东西。

公司做了个视频软件,实时监控。程序丢包严重,卡顿,还会黑屏。我接手之前就是这个样子。经过一天的摸索,结合之前看了一天的经验,把丢包问题,黑屏问题跟卡顿问题通通解决了。

         由于代码不是我写的,我想了个很初级的办法,在所有音视频关键函数打上断点(对xcode来说很方便,体力活),在半个小时内,把视频播放的流程走了一遍。


把音视频路线纪录了下来,把重复进入的无关紧要的函数进行严查,严查程序里用到的所有定时器,特别是耗时的定时器,间隔时间又特别短,发现很多不合理的地方。这些定时器都跟UI没有直接关系,却都跑在主线程,非常占用主线程CPU资源。导致卡顿。分别做了线程runloop处理。


然后是发现一个奇葩的做法,就是用定时器刷新缓冲区,这个是数据接收的缓冲区。间隔时间还特别短。在网络传输高分辨率的图片时,必然造成来不及读取缓冲区,就发现图片已经丢失的情况,造成反复丢帧。我毫不犹豫就把定时器干掉了。至于缓冲区是否会越界,溢出的问题,后面再看。后面发现不会,每次接收都是覆盖缓冲区的。还需要时间检验跟调试工具进一步内存跟踪调试。


再一个发现在跳帧处理的时候,时间逻辑有问题,没有实时更新缓存时间。然后就是frame还在进行插入操作的时候就把frame提前释放的问题。


还有就是OPENGL 转换出RGB数据的时候,数据格式的处理,位数跟深度的处理有误,造成像素没那么高的问题。保存第一帧图片的时候也有这个问题。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS中使用FFmpeg进行音视频同步可以通过以下步骤来实现: 1. 下载FFmpeg库 你可以通过CocoaPods等方式下载FFmpeg库。在Podfile文件中添加以下代码: ```ruby pod 'FFmpeg' ``` 下载完后运行`pod install`指令安装FFmpeg库。 2. 音视频解码 使用FFmpeg库进行音视频解码。对于音频和视频,你需要分别解码它们的数据。解码后的音频和视频数据通常存储在`AVFrame`结构体中。 3. 音视频同步 音视频同步的主要难点在于如何将两个不同的时钟进行同步。通常情况下,你需要使用音频时钟来同步视频帧,因为音频时钟是相对稳定的,而视频时钟可能会因为帧率不稳定等原因而不稳定。 具体实现方法可以采用以下步骤: - 获取音频播放时间戳(PTS) - 获取视频帧显示时间戳(PTS) - 计算音视频时间差 - 根据时间差进行音视频同步 其中,音频播放时间戳可以通过audio queue的回调函数获取,视频帧显示时间戳可以通过解码后的AVFrame结构体中的`pts`字段获取,时间差可以通过两个时间戳的差值计算得到。 4. 音视频渲染 在完成音视频同步后,你需要使用OpenGL ES或者Core Graphics等技术来渲染视频帧,同时使用Audio Queue或者OpenAL等技术来播放音频帧。 需要注意的是,iOS中使用FFmpeg进行音视频同步是一个比较复杂的过程,需要一定的技术基础和经验。同时,由于FFmpeg库的复杂性和特性,可能会涉及到一些版权和法律问题。因此,建议在使用前仔细查阅相关文档和法律条款,以免出现不必要的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值