使用IjkMediaPlayer结合surface

使用IjkMediaPlayer集合surfaceView播放视频,自己写的播放和暂停按钮

导入依赖

/*ijkPlayer*/
    // required, enough for most devices.
    compile 'tv.danmaku.ijk.media:ijkplayer-java:0.7.8.1'
    compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.7.8.1'
    // Other ABIs: optional
    compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.7.8.1'
    compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.7.8.1'
    // ExoPlayer as IMediaPlayer: optional, experimental
    compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.7.8.1'

清单文件中加入权限

<uses-permission android:name="android.permission.INTERNET" />
布局文件中

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="3">
    <SurfaceView
        android:id="@+id/viedo_surface"
        android:layout_width="match_parent"
        android:layout_height="300dp" />

    <Button
        android:id="@+id/start"
        android:layout_alignBottom="@+id/viedo_surface"
        android:text="播放"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <Button
        android:layout_alignParentRight="true"
        android:id="@+id/pause"
        android:layout_alignBottom="@+id/viedo_surface"
        android:text=""
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>
代码

public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {

    @BindView(R.id.viedo_surface)
    SurfaceView mSurfaceView;
    @BindView(R.id.start)
    Button start;
    @BindView(R.id.pause)
    Button pause;
    private IjkMediaPlayer mPlayer;

    boolean isPlay;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        isPlay = false;
        pause.setEnabled(false);
        mSurfaceView.getHolder().addCallback(this);
        initPlayer();
    }

    private void initPlayer() {
        IjkMediaPlayer.loadLibrariesOnce(null);
        IjkMediaPlayer.native_profileBegin("libijkplayer.so");

        mPlayer = new IjkMediaPlayer();
      /*  try {
            //http://ips.ifeng.com/video19.ifeng.com/video09/2014/06/16/1989823-102-086-0009.mp4
            mPlayer.setDataSource("http://ips.ifeng.com/video19.ifeng.com/video09/2014/06/16/1989823-102-086-0009.mp4");
        } catch (IOException e) {
            e.printStackTrace();
        }
        mPlayer.prepareAsync();
        mPlayer.start();*/
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        mPlayer.setDisplay(holder);
    }

    @Override
    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {

    }

    @OnClick({R.id.start, R.id.pause})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.start:
                mPlayer.reset();
                try {
                    mPlayer.setDataSource("http://ips.ifeng.com/video19.ifeng.com/video09/2014/06/16/1989823-102-086-0009.mp4");//读取视频文件地址
                    mPlayer.prepareAsync();                             //预加载视频
                    mPlayer.setDisplay(mSurfaceView.getHolder());  //将视频画面输出到surface上
                    mPlayer.start();                                //开始播放
                    pause.setText("暂停");                        //pause此时为暂停
                    pause.setEnabled(true);                       //pause按钮此时可用
                    isPlay = true;
                }catch (IOException e){
                    Toast.makeText(MainActivity.this,"发生错误",Toast.LENGTH_LONG).show();
                }
                break;
            case R.id.pause://点击暂停时候 如果正在播放 就显示继续按钮

                if (isPlay == true) {
                    pause.setText("继续");
                    mPlayer.pause();
                    isPlay = false;
                } else {
                    mPlayer.start();
                    pause.setText("暂停");
                    isPlay = true;
            }
                break;
        }
    }
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值