前些时间,我在知识星球上创建了一个音视频技术社群:关键帧的音视频开发圈,在这里群友们会一起做一些打卡任务。比如:周期性地整理音视频相关的面试题,汇集一份音视频面试题集锦,你可以看看这个合集:音视频面试题集锦。再比如:循序渐进地归纳总结音视频技术知识,绘制一幅音视频知识图谱,你可以看看这个合集:音视频知识图谱。
下面是 2022.10 月知识图谱新增的内容节选:
1)图谱路径:视频生产及编辑/采集预览/指标优化
- 相机打开成功率相关
- 权限检测与引导
- 错误重试与监测
- 相机打开速度相关
- 优先使用 CPU 资源
- 异步初始化非必要组件
- 首帧占位体验优化
- 采集预览流畅度相关
- 线程模型优化:使可并发的任务跑在不同的线程上;使用缓冲区组合生产消费者模型,各个模块可以并行,而且性能兼容性更好
- 采集与前处理数据交互优化
- 减少 CPU 与 GPU 的数据拷贝
- 不同设备智能选择分辨率和帧率
- 采集画面质量相关
- 对焦优化
- 摄像头模糊优化
- 画质增强优化
- 采集内存相关
- iOS/Android 采集数据输出格式,尽量设置为 YUV 数据格式
2)图谱路径:视频生产及编辑/视频录制/指标优化
- 录制成功率优化
- 优化相机和麦克风权限申请流程确保权限正常
- 设置一定的重试流程,当遇到录制报错,可以重试录制流程
- 统计录制出错的细分错误码,这样就能更好的定位录制失败的原因进行针对性的优化
- 录制流畅度相关/采集优化
- 视频优先使用 YUV 源数据,优化内存及图像处理性能;
- 不同设备智能选择分辨率 帧率,可手动实现丢帧模块控制帧率;
- 采集线程模型优化:使可并发的任务跑在不同的线程上;使用缓冲区组合生产消费者模型,各个模块可以并行,而且性能兼容性更好。
- 录制流畅度相关/图像处理优化
- 采集到前处理的数据进行下采样,这样可以提升前处理模块的处理速度。
- 视频数据对齐分辨率,防止多次采样消耗性能。
- 视频数据对齐下采样的方式(RGB、YUV),防止多次数据格式转换消耗性能。
- 做图像的裁剪、缩放、尺寸变化时要注意优化性能。可以使用 libyuv 来做常规的图像处理,一些 libyuv 版本甚至做过汇编级别的优化来提升图像处理的性能。
- GPU 和 CPU 要尽量少做数据拷贝,性能比较差。可以使用系统能力来实现 GPU 和 CPU 的内存共享来做相关的优化。
- 录制流畅度相关/编码优化
- 编码器优先使用硬件编码,出错后软件编码兜底。
- 可以使用编码器复用池来优化启动速度。
- 不同设备智能编码分辨率 码率,码率可通过 PSNR、VMAF 等评估方式找到最优码率甜点。
- 尽量使用异步编码,性能更加流畅。
- 优先使用 H.265 编码,相同清晰度可降低码率。
- 录制流畅度相关/封装优化
- MOOV 前置,优化播放秒开速度。
- 音视频时间戳做好交错,优化播放秒开与卡顿。
- 可以根据需求考虑封装格式使用 FMP4,FMP4 格式可支持分段并发上传。
- 录制流畅度相关/线程模型优化
- 采集线程:使用系统相机能力实现图像采集。
- 特效线程:根据是否包含 AI 处理管理 CPU 线程。CPU 处理线程:跑一些 AI 模型任务;GPU 处理线程:跑一些图像处理任务。
- 编码线程:单独开启编码线程提高帧率。
- 封装线程:单独开启封装线程,使用缓存,处理音视频交错,提升封装和文件写入速度。
2)图谱路径:视频生产及编辑/视频发布/指标优化
- 转码成功率
- 多种编解码方案兜底
- GOP 粒度的解码重试
- 转码错误重试与监测
- 上传成功率
- 视频大文件分片上传
- 就近上传
- 预探测上传
- 上传网络错误重试与监测
- 转码平均时长
- 减少不必要的转码
- 多线程优化
- 转码方式适配
- 解码器复用池
- 图像数据处理速度优化
- 解码数据和纹理数据转换优化
- 上传平均时长
- 转码状态依赖优化
- 视频分段并发上传和转码
- 达标视频尽快分发
- 就近上传
- 预探测上传
- 传输协议优化
- 视频秒传
- 视频预上传
下面是 2022.10 月的知识图谱新增内容快照(图片被平台压缩不够清晰,可以加文章后面微信索要清晰原图):
2022.10 知识图谱新增内容