FFMPEG被广泛的应用在视频处理方面,最近抓了几个android上面的视频大佬APK,研究了一下,竟然发现大家都用到了FFMPEG,普及程度令人吃惊,不得不佩服中国人的模仿学习能力。
以下是ffmpeg在各个视频中的so库名称,以及大概的大小,看来每家都做了不同程度的优化。
搜狐视频 libflyfoxffmpeg.so (4.6M)
百度影音 libcyberplayer-core.so (6M)
爱奇艺 libffmpeg.so libffmpeg_qiyi_vfp.so libffmpeg_qiyi_neon.so (1.5M)
腾讯视频 libPlayerCore.so libPlayerCore_neon.so (3.2M)
优酷 libuffmpeg.so (5M)
100TV libffmpeg.so (5M)
快播 libffmpeg-7.so libffmpeg-6.so libffmpeg-7neon.so (7M)
封装FFMPEG,一般有会根据ARM平台的种类,出三个版本,ARMV5版本,ARMV6版本,ARMV7neon优化版本。爱奇艺和快播中包含了这3个版本的so。
腾讯视频 中只有2个,1个neon优化过的,1个通用的。其它的只有neon优化过的版本。
以sohu视频为例,首先检测平台是否是v7支持neon,只有在这个平台上isSupportSohuPlayer 才有效,否则估计使用系统播放器MediaPlayer来搞定。
try
{
CPUInfo localCPUInfo = CPUInfo.getInstance();
if (!localCPUInfo.isARMv7())
break label113;
isSupportSohuPlayer = true;
if (localCPUInfo.isSupportNEON())
{
System.loadLibrary("flyfoxffmpeg");
System.loadLibrary("sohuplayer_jni");
sohuPlayerVersionCode = getDLLVersion();
new StringBuilder("isSupportSohuPlayer:").append(isSupportSohuPlayer);
return;
}
label113: isSupportSohuPlayer = false;
}
catch (UnsatisfiedLinkError localUnsatisfiedLinkError)
{
new StringBuilder("UnsatisfiedLinkError e.toString():").append(localUnsatisfiedLinkError.toString());
new StringBuilder("UnsatisfiedLinkError e.getMessage():").append(localUnsatisfiedLinkError.getMessage());
isSupportSohuPlayer = false;
return;
isSupportSohuPlayer = false;
}
catch (Exception localException)
{
new StringBuilder("Exception:").append(localException.toString());
isSupportSohuPlayer = false;
}