首先引入看jkplayer库,可以直接从gradle引入,也可以从GitHub下载ijkplayer源码,自己编译后再导入项目中。
这里我们使用从gradle中引入。新建工程,在build.gradle(Module:app)文件中添加:
// required, enough for most devices.
implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'
// Other ABIs: optional
implementation 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8'
implementation 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8'
implementation 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'
implementation 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'
//ExoPlayer as IMediaPlayer: optional, experimental
implementation 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'
具体的导入可查看ijk官网的说明:https://github.com/Bilibili/ijkplayer。
接着说一下ijkplayer的实现步骤,这里主要使用IjkMediaPlayer进行实现,实现步骤与MediaPlayer基本类似。
实现步骤如下:
1.创建IjkMediaPlayer对象,并让它加载指定的视频文件。可以是应用的资源文件、本地文件路径、或者URL。
2.在界面布局文件中定义SurfaceView组件,并为SurfaceView的SurfaceHolder添加Callback监听器。
3.调用IjkMediaPlayer对象的setDisplay(SurfaceHolder sh)将所播放的视频图像输出到指定的SurfaceView组件。
4.调用IjkMediaPlayer对象的prepareAsync()或prepare()方法装载流媒体文件
5.调用IjkMediaPlayer对象的start()、stop()和pause()方法来控制视频的播放。
简单实现如下:
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.constraint.ConstraintLayout>
程序代码:
public class ijkPlayerSimpleTest extends AppCompatActivity implements SurfaceHolder.Callback{
private IjkMediaPlayer mPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ijk_player_simple_test);
initSurfaceView();
initPlayer();
}
private void initSurfaceView(){
SurfaceView surfaceView = (SurfaceView)findViewById(R.id.surfaceView);
surfaceView.getHolder().addCallback(this);
}
private void initPlayer(){
mPlayer = new IjkMediaPlayer();
try {
String path = Environment.getExternalStorageDirectory().getPath() + "/20180730.mp4";
mPlayer.setDataSource(path);
} catch (IOException e) {
e.printStackTrace();
}
mPlayer.prepareAsync();
mPlayer.start();
}
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
//将所播放的视频图像输出到指定的SurfaceView组件
mPlayer.setDisplay(surfaceHolder);
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
}
如果需要增加快进、快退、暂停等功能,可以结合MediaController实现。