首先引入看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实现。