
用法概括(28)
实现效果(87)


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/IT666DHW/article/details/78857092
使用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;
- }
- }
- }