本篇文章主要介绍 Android 原生 VideoView,Google 开源视频播放框架 ExoPlayer,Vitamio 视频播放框架以及 Bilibili 开源视频播放框架 ijkplayer 的使用方法和优缺点。
VideoView 的使用非常简单,播放视频的步骤:
在界面布局文件中定义 VideoView 组件,或在程序中创建 VideoView 组件
调用 VideoView 的如下两个方法来加载指定的视频:
setVidePath(String path):加载 path 文件代表的视频
setVideoURI(Uri uri):加载 uri 所对应的视频
调用 VideoView 的 start()、stop()、psuse() 方法来控制视频的播放
ExoPlayer Git 地址
ExoPlayer 开源项目包含了 library 和 示例:
ExoPlayer 库的核心类是 ExoPlayer 类。该类维护了播放器的全局状态 。比如如何获取媒体数据,如何缓冲以及是怎样的编码格式。
ExoPlayer 基于 MediaCodec 和 AudioTrack 提供了默认的音视频的 TrackRenderer 实现。所有的 renderers 都需要 SampleSource 对象,ExoPlayer 从 SampleSource 获得 media samples 用于播放。下图展示了 ExoPlayer 是如何配置组合这些组件用于播放音视频的。
ExoPlayer 库提供了一些不同类型的 SampleSource 实例:
在 ExoPlayer 的 Dome 中使用 DemoPlayer 对 ExoPlayer 进行了封装,并提供了使用上述几种 SampleSource 构建 TrackRenderer 的 Builder。
在使用的时候我们根据不同的需求创建对应的 RendererBuilder,然后将 RendererBuilder 传递给 DemoPlayer 然后调用 DemoPlayer 的 setPlayWhenReady 方法。
ExoPlayer 相较于 MediaPlayer 有很多很多的优点:
ExoPlayer 的缺点:
Vitamio demo 地址
Vitamio 的使用步骤:
1.下载 Vitamio 库,并作为工程依赖。
2.在 Activity 的 onCreate 方法中添加如下代码,初始化 Vitamio 的解码器
@Override public void onCreate(Bundle icicle) {
super.onCreate(icicle);
if (!LibsChecker.checkVitamioLibs(this))
return;
}
3.在 AndroidManifest.xml 中声明 InitActivity
<activity android:name="io.vov.vitamio.activity.InitActivity" android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden"
android:launchMode="singleTop" android:theme="@android:style/Theme.NoTitleBar"
android:windowSoftInputMode="stateAlwaysHidden"/>
4.其余步骤和使用 Android 原生的 VideoView 是一样的。
其官方还给出了其他很多优点,但是个人觉得不足以成为优点。
ijkplayer 项目地址
1.clone ijkplayer 项目到本地
2.编译 ijkplayer
下面是我的编译环境
编译之前要安装 homebrew, git, yasm。
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install git
brew install yasm
配置 NDK
# add these lines to your ~/.bash_profile or ~/.profile
# export ANDROID_SDK=
# export ANDROID_NDK=
clone 项目
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
编译 ffmpeg
cd ijkplayer-android
./init-android.sh
cd config
rm module.sh
ln -s module-default.sh module.sh
cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
ffmpeg 编译通过后,编译 ijkplayer
cd ..
./compile-ijk.sh all
编译通过后在 android 目录下有 ijkplayer 文件夹,这个是 ijkplayer 的 demo。导入 Android Studio 即可。ijkplayer 的 demo 中提供了 IjkVideoView 类,它封装了 Android 原生的 MediaPlayer 、ExoPlayer 和 IjkMediaPlayer。可根据需要选择。
ijkplayer 最大的优点就是可以根据需要编译需要的解码器。在编译的时候通过 ln -s module-default.sh module.sh 选择要编译的解码器。ijkplayer 在 config 目录下提供了三种 module.sh 。也可自己修改 module.sh 。
ijkplayer 的缺点是库太大。加入项目后会大大增加你的 APP 的大小。