iOS 倍速播放渲染慢、暂停后还在继续播放等问题.md
本文围绕 iOS 端录像倍速播放的各类异常问题展开,先列举了 8 倍速渲染偏慢、画面时间与进度不同步、频繁跳帧、播放结束后时间未对齐、暂停后画面与进度仍继续播放、内存堆积易被系统杀掉等现象;再分析原因:固件未做倍速跳帧处理,视频获取帧率远超屏幕刷新率,导致倍速异常,且暂停时未停止取流线程,引发续播问题;最后给出方案:App 端按计算的跳帧间隔手动跳帧,暂停时立刻停止取流线程。
本文围绕 iOS 端录像倍速播放的各类异常问题展开,先列举了 8 倍速渲染偏慢、画面时间与进度不同步、频繁跳帧、播放结束后时间未对齐、暂停后画面与进度仍继续播放、内存堆积易被系统杀掉等现象;再分析原因:固件未做倍速跳帧处理,视频获取帧率远超屏幕刷新率,导致倍速异常,且暂停时未停止取流线程,引发续播问题;最后给出方案:App 端按计算的跳帧间隔手动跳帧,暂停时立刻停止取流线程。
iPhone 6 搭载的是 A8 芯片,iPhone 6s 搭载的是 A9 芯片。
该问题是由于切换到后台后,解码器会话会失效,当再次进入前台时,需要再次创建会话,但由于使用的视频通道没有变,继续播放接收到的很大可能是 P 帧,iOS P 帧的解码分为以下两种情况:
软解码使用的是 CPU 解码,CPU 进行大量的矩阵计算是非常的占用性能,导致手机功耗增加,电量耗尽更快。
iPhone 6 搭载的是 A8 芯片,iPhone 6s 搭载的是 A9 芯片,iPhone 6s 之前的苹果手机都不支持 HEVC 硬解码。
iOS 上使用 VideoToolbox 框架解码视频时,iPhone 6 进行软解码时 CPU 占用将增加大约 30%,而使用 iPhone 14 使用硬解码 CPU 占用增加不到 10%。
那么如何验证 iPhone 是否支持硬解码呢?
XIB 的全称是 “XML Interface Builder”。它是一种使用 XML 格式描述用户界面的文件格式,由苹果公司开发,用于在 Xcode 中创建和编辑 iOS 和 macOS 应用程序的用户界面。XIB 文件可以包含界面中的视图、控件、布局和约束等信息,可以方便地创建复杂的用户界面,同时也使得界面设计和代码实现分离,提高了开发效率。在运行时,XIB 文件会被解析成对象图,并与代码进行绑定,从而实现界面的显示和交互。
新买的 Mac Studio 还未安装过 CocoaPods,因为最近开发的项目都是用 Swift Package Manager。目前仍然有很多项目是使用 CocoaPods,今天从 GitHub 上 Clone 了一个 App 就是使用 CocoaPods。我的一般都是直接安装官网的方式去安装,没必要百度和 Google,但是安装官网的安装命令 sudo gem install cocoapods 安装,是能安装成功的,但是使用时却报错了:
1 | $ pod install |
升级到 Xcode 13.2.1 运行项目报错:
1 | The Legacy Build System will be removed in a future release. You can configure the selected build system and this deprecation message in File > Project Settings. |
其实报错信息已经很明显了,按照报错信息去解决就可以了。
Xcode 升级到 Xcode 10.0 后,由于去掉陈旧的 libstdc++ 库替换为 libc++,libstdc++.6.0.9就被删除了。
libc++ 相对是苹果最新版的 C++ 库,经过优化并全面支持 C++ 11。
如何解决我就不重复写了,直接看 Kila2/libstdc-.6.0.9.tbd: libstdc++.6.0.9.tbd,写得很清楚了。
我的主力 MBP 2018 目前使用的是还是 macOS Mojave。
1 | $ sw_vers |
Mojave 是 2018 年 6 月 4 日在 Apple 的全球开发者大会上宣布,并于 2018 年 9 月 24 日向公众发布。虽然 10.14.6 的最后一个 BuilVersion 18G9323 发布日期为 2021 年 7 月 21 日,但是从第一个版本至今已有 3 年多了,且目前最新的 macOS 版本都 12.1。
| macOS | 最新版本 |
|---|---|
| macOS Monterey | 12.1 |
| macOS Big Sur | 11.6.2 |
| macOS Catalina | 10.15.7 |
| macOS Mojave | 10.14.6 |
那我为什么这么久还不更新,又为什么突然决定不再使用 macOS Mojave,决定更新到 macOS Monterey 最新版本呢?