如何解决 iPhone 6 或 iPhone 6s 上从后台切换到前台播放视频会显示为 1 到 2 秒的绿屏

iPhone 6 搭载的是 A8 芯片,iPhone 6s 搭载的是 A9 芯片。

该问题是由于切换到后台后,解码器会话会失效,当再次进入前台时,需要再次创建会话,但由于使用的视频通道没有变,继续播放接收到的很大可能是 P 帧,iOS P 帧的解码分为以下两种情况:

  • A9 及以下芯片的解码器新的会话会解码无完整 GOP 的 P 帧,并将无法渲染的画面用绿色填充,即视频解码渲染开发中常说的绿屏
  • 而 A9 以上的芯片则算法是直接不解码无完整 GOP 的 P 帧,因此没这个问题。

iOS 如何获取解码视频使用的是软解码还是硬解码

软解码使用的是 CPU 解码,CPU 进行大量的矩阵计算是非常的占用性能,导致手机功耗增加,电量耗尽更快。

iPhone 6 搭载的是 A8 芯片,iPhone 6s 搭载的是 A9 芯片,iPhone 6s 之前的苹果手机都不支持 HEVC 硬解码。
iOS 上使用 VideoToolbox 框架解码视频时,iPhone 6 进行软解码时 CPU 占用将增加大约 30%,而使用 iPhone 14 使用硬解码 CPU 占用增加不到 10%。

那么如何验证 iPhone 是否支持硬解码呢?

使用 Apple Silicon 的 Mac 别用 gen 来安装 CocoaPods

新买的 Mac Studio 还未安装过 CocoaPods,因为最近开发的项目都是用 Swift Package Manager。目前仍然有很多项目是使用 CocoaPods,今天从 GitHub 上 Clone 了一个 App 就是使用 CocoaPods。我的一般都是直接安装官网的方式去安装,没必要百度和 Google,但是安装官网的安装命令 sudo gem install cocoapods 安装,是能安装成功的,但是使用时却报错了:

1
2
3
4
5
6
7
8
9
10
11
12
$ pod install
Analyzing dependencies
Adding spec repo `trunk` with CDN `https://cdn.cocoapods.org/`
/Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi/library.rb:275: [BUG] Bus Error at 0x00000001046b4000
ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.arm64e-darwin21]

-- Crash Report log information --------------------------------------------
See Crash Report log file under the one of following:
* ~/Library/Logs/DiagnosticReports
* /Library/Logs/DiagnosticReports
for more details.
Don't forget to include the above Crash Report log file in bug reports.
Read more

Error installing cocoapods: cocoapods-core requires Ruby version >= 2.6. The current ruby version is 2.5.8.224.

Cocoapods 依赖 Ruby,Ruby 我是用 rvm 管理的,rvm 更新又遇到报错:Could not download rvm-installer, please report to https://github.com/rvm/rvm/issues
使用 curl 又遇到报错:curl: (60) SSL certificate problem: certificate has expired

问题最终也解决了,好事多磨吧!
遇到这类问题,不能急,需要耐心的按照它的报错信息去一步步解决就行!

iOS 14上UIDatePicker使用旧样式

iOS一旦更新,随之而来的就是App的适配工作。其实大部分App根本不会去用iOS更新后的新特性,所以很多时候的适配都是浪费时间。
所以我一再强调跨平台的重要性,注意此跨平台是指不赖原生,因此不会随着iOS更新UI发现变化。
比如自绘渲染引擎的Flutter。