这个公众号会路线图式的遍历分享音视频技术:音视频基础(完成) → 音视频工具(完成) → 音视频工程示例(完成) → 音视频工业实战(进行中)。关注一下成本不高,错过干货损失不小 ↓↓↓
视频录制阶段除了开始采集音视频数据,做滤镜、美颜、特效等前处理,还会做音视频编码、封装、文件存储。在这个阶段我们主要关注以下性能指标:
手机设备上的应用要使用相机和麦克风进行视频和音频采集是需要向用户申请权限的,所以优化权限申请流程确保权限正常是优化录制成功率的第一步。
此外,可以设置一定的重试流程,当遇到录制报错,可以重试录制流程。
另外,需要统计录制出错的细分错误码,这样就能更好的定位录制失败的原因进行针对性的优化。
视频录制过程包括采集音视频数据,做滤镜、美颜、特效等图像处理,这些部分的优化类似采集预览流畅度优化,所以策略也类似。不同的是,视频录制还包括音视频编码、封装、文件存储,所以还需要从后面这些部分寻找优化空间。
视频录制流程如下:
视频录制流程
在音视频采集过程中,可以从下面几方面优化:
YUV
源数据,优化内存及图像处理性能;图像处理过程,可以尝试下面的优化措施:
glReadPixel
:通过 OpenGL 将 RGBA 数据转换为 I420,将 I420 拷贝到 CPU 更快。PBO
:依赖机型,性能不稳定,但在部分机型速度更快。可以先做 Benchmark,再根据数据情况在不同的机型上适配使用。CVPixelBuffer
:iOS 平台支持的一种解码输出的数据结构,支持 GPU 与 CPU 数据共享。编码流程可以尝试下面的优化措施:
PSNR
、VMAF
等评估方式找到最优码率甜点。H.265
编码,相同清晰度可降低码率。H.265
对比 H.264
可降低 30%
以上码率:H.265 vs. H.264
大部分的视频生产是封装为 MP4 格式,封装流程可以尝试下面的优化措施:
MOOV
前置,优化播放秒开速度。FMP4
,FMP4
格式可支持分段并发上传。FMP4
不需要一个 MOOV Box
来进行初始化,FMP4
的 MOOV Box
只包含了一些 Track 信息。FMP4
的视频/音频 Metadata 信息与数据都存在一个个 MOOF
、MDAT
中,它是一个流式的封装格式。FMP4 vs. MP4
把采集、特效、编码、封装放在同一个线程,随着功能越来越强,计算越来越重,会影响到最终的输出帧率。要优化可以改为多线程加上 buffer
控制的线程模型。可以使用多线程模型:
AI
处理管理 CPU 线程。