前言
视频播放是目前各大移动应用必不可少的功能,视频播放可以进一步细分为视频解码、视频渲染、音视频同步三部分。近期,项目组内核视频解码的实现方案将由MediaPlayer变更为FFmpeg。故借此调研FFmpeg相关基础,思考其在日常测试过程的作用和帮助。
什么是FFmpeg,它比你想象更厉害
FFmpeg是一套音视频多媒体处理开源框架,它提供了对音视频的采集、编码、解码、转码、音视频分离、合并、流化、过滤器等丰富的功能。 光看介绍,大家会感觉FFmpeg平淡无奇,并没有太多存在感,也没有太多知名度。但是实际上通过调研学习会发现,它比想象中的更加强大。
- 业界视频播放框架和FFmpeg均有很深渊源
目前,业界的视频播放主要有三种架构:MPC, MPlayer和VLC,占据市场90%的份额。而三个架构均使用或者融合FFmpeg的视频解码技术。FFmpeg犹如至尊魔戒,驱使视频播放领域中的万物。
图1. 指环王中描述魔戒的诗歌
- 主流播放器均使用FFmpeg作为内核
在国内家喻户晓的视频播放器,例如Mplayer,ffplay,射手播放器,暴风影音,KMPlayer,QQ影音均使用FFmpeg作为内核。而项目中大家非常熟悉的ijkplayer也是基于FFmpeg发展而来的。
- 现在火热的短视频APP,技术处理会用到FFmpeg
这些APP一般使用 FFmpeg或者基于FFmpeg优化来实现裁剪、滤镜、水印、拼接、过渡、混音等特效。 由此,FFmpeg的强大可见一斑。
FFmpeg解码器测试过程的注意事项
回归项目FFmpeg解码器这个测试过程,项目引入FFmpeg作为内核的视频解码器,测试同学需要注意哪些问题呢?
- 视频格式的支持
在项目中,FFmpeg主要是替换原有的视频解码器,所以在测试过程需要注意两个方案对于视频格式的支持情况,并进行相应的适配测试,避免由于替换成FFmpeg之后,有部分视频格式不支持。
- 解码性能
在测试过程,有同学发现,在切换成FFmpeg作为视频解码器后,点击视频播放到视频展示的耗时较之前有所增加。对此,建议大家在测试过程需要注意解码性能,包括但不限以下两点. 解码效率: 对于解码效率,可以通过埋点数据获得解码帧数和时间间隔长度。通过已解码的帧数除以中间间隔的时长就可以得到每秒解码的帧数。 首帧加载速度: 对于首帧的加载速度,主要影响因素有网络部分耗时和业务端内核的耗时。对此,测试同学可以做好统计埋点,计算首帧的展示时间,来对比修改前后的差异。
- 资源占用情况
在测试FFmpeg解码器过程,需要注意对资源占用的影响,例如对于CPU,内存和耗电量的消耗情况。其中CPU和内存的资源占用的性能评测尤为重要。
- FFMPEG缓存区大小
在测试FFmpeg视频解码过程,需要注意设置的缓存区大小对于视频播放的影响。如果当缓存区大小设置过小,当图像快速更新或具有高分辨率时,可能会导致视频播放出现马赛克化。
FFmpeg工具对于测试有什么帮助
趁着项目测试需要,小编对于FFmpeg开源软件有一定调研了解。那么,在进行FFmpeg解码器的测试之余,开始思考,FFmpeg对于我们其他的测试任务中有什么帮助呢? FFmpeg可以帮其他测试同学构造丰富的测试物料资源,更好的模拟各类场景。
- 不同格式的视频资源
在测试视频初期,需要收集不同格式的视频资源来进行视频格式的视频。收集完整的视频格式资源相对比较费劲,更不用提还有视频尺寸和分辨率的测试需求。
- 不同需求的广告物料
在测试过程,基于产品需求,对于应用内广告展示的测试也需要满足不同的需求。通过FFmpeg可以更精准的生成满足不同需求的测试物料。
- 制作带有动态封面的视频
之前有反馈过问题,场景和动态封面的视频有关,场景较难模拟,通过FFmpeg可以实现动态封面的视频,方便测试同学进行相关的问题定位。
- 更多其他媒体处理功能
正如前面介绍的,FFmpeg可以方便裁剪、滤镜、水印、拼接、过渡、混音功能,在短视频和云表情相同功能的测试有更多用处待大家使用。
FFmpeg的安装与使用(以ubuntu为例)
基于FFmpeg对于日常测试有较大的帮助,大家可以花1分钟时间学习FFmpeg安装和基本使用命令。
- Step 1 – Setup FFmpeg PPA
目前在ubuntu中FFmpeg的最新版本是FFmpeg 4。首先需要在系统中添加PPA.
代码语言:javascript复制sudo add-apt-repositoryppa:jonathonf/ffmpeg-4
- Step 2 – Install FFmpeg on Ubuntu
在启用PPA后,执行下行命令安装FFmpeg。
代码语言:javascript复制sudo apt-get update
sudo apt-get install ffmpeg
- Step 3 – Check FFmpeg Version
完成安装后,我们可以查看下系统中安装的版本。
代码语言:javascript复制ffmpeg -version
图2. 查看FFmpeg版本的结果
- Step 4 – Basic Examples
下面简单介绍FFmpeg简单有趣的用法。
Reduce .mov File Size:
通过这个命令可以对目标视频文件的大小进行有效裁剪。
代码语言:javascript复制ffmpeg -i in.mov -c:v libx264 -c:acopy -crf 20 out.mov
Convert .move To .mp4
通过这个简单的命令可以完成视频的转码,在未来的测试过程中,这个将会经常用到,可以便捷的提供测试物料资源。
代码语言:javascript复制ffmpeg -i in.mov -vcodec copy-acodec aac -strict experimental -ab 128k out.mp4
Overlay Two Images
这是个比较有意思的例子,通过重叠,将一只跳舞的小黄鸭添加到沙滩背景之上。很多小视频合成和搞怪表情包就是通过这个方式生成的。
代码语言:javascript复制ffmpeg -y -ignore_loop 0 -i./in-01.gif -i ./in-02.gif -filter_complex overlay=100:H-320:shortest=1output.gif
图3. 合并前的沙滩Gif图
图4. 合并前的小黄鸭Gif图
图5. 合并后的Gif图,沙滩上跳舞的小黄鸭
结语
本文简单介绍FFmpeg的功能,FFmpeg解码器测试过程的注意点以及在测试工作的应用。 在测试工作过程中,很多测试对象中使用的技术和框架可以借鉴并应用到测试工作中,为我们提高更为丰富的测试方法。