对于低端机在录制时候发热,除了降低分辨率和码率,请问还有其他优化方案吗?

手机发热的根本原因是:CPU/GPU 使用负载过高。所以要优化低端机发热问题,基本思路是从降低 CPU/GPU 的使用负载出发。

在手机录制的场景下,可能涉及到这些功能模块:

在上述模块中,容易成为发热重点的 CPU/GPU 计算密集型模块一般是:图像处理、编码

在低端机上,要优化发热:

1)简单的做法:去掉『可选』,优化『必选』

2)进阶的做法:数据处理链路降低计算消耗

3)精细的做法:全机型跑分,动态适配功能模块

此外,开发 iOS 应用时,可以使用 Xcode 的 Energy Impact、Instrument 的 Energy Log 等工具来分析和定位性能消耗的大户,进行针对性的优化。


在 iOS 上,如何使用系统能力来减少 GPU 和 CPU 之间的数据拷贝呢?

在 iOS 上,使用设置了 kCVPixelBufferIOSurfacePropertiesKey 属性的 CVPixelBufferRef 是可以支持 GPU 和 CPU 共享内存的。从相机采集出来的、从 VideoToolbox 解码出来的 CVPixelBufferRef 都具有这个属性,所以通常来讲使用系统的 API 时,你并不太需要操心这个问题。

如果你要自己创建一个图像来进行渲染,还希望能读出其数据做其他处理,并且希望支持 GPU 和 CPU 共享内存,可以参考下面的文章:

About Texture Cache