使用IjkMediaPlayer结合surface

来源:互联网 发布:王昱珩 知乎 编辑:程序博客网 时间:2024/06/05 16:32

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

导入依赖

[html] view plain copy
  1. /*ijkPlayer*/  
  2.     // required, enough for most devices.  
  3.     compile 'tv.danmaku.ijk.media:ijkplayer-java:0.7.8.1'  
  4.     compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.7.8.1'  
  5.     // Other ABIs: optional  
  6.     compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.7.8.1'  
  7.     compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.7.8.1'  
  8.     // ExoPlayer as IMediaPlayer: optional, experimental  
  9.     compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.7.8.1'  

清单文件中加入权限
[html] view plain copy
  1. <uses-permission android:name="android.permission.INTERNET" />  
布局文件中
[html] view plain copy
  1. <RelativeLayout  
  2.     android:layout_width="match_parent"  
  3.     android:layout_height="0dp"  
  4.     android:layout_weight="3">  
  5.     <SurfaceView  
  6.         android:id="@+id/viedo_surface"  
  7.         android:layout_width="match_parent"  
  8.         android:layout_height="300dp" />  
  9.   
  10.     <Button  
  11.         android:id="@+id/start"  
  12.         android:layout_alignBottom="@+id/viedo_surface"  
  13.         android:text="播放"  
  14.         android:layout_width="wrap_content"  
  15.         android:layout_height="wrap_content" />  
  16.     <Button  
  17.         android:layout_alignParentRight="true"  
  18.         android:id="@+id/pause"  
  19.         android:layout_alignBottom="@+id/viedo_surface"  
  20.         android:text=""  
  21.         android:layout_width="wrap_content"  
  22.         android:layout_height="wrap_content" />  
  23. </RelativeLayout>  
代码

[html] view plain copy
  1. public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {  
  2.   
  3.     @BindView(R.id.viedo_surface)  
  4.     SurfaceView mSurfaceView;  
  5.     @BindView(R.id.start)  
  6.     Button start;  
  7.     @BindView(R.id.pause)  
  8.     Button pause;  
  9.     private IjkMediaPlayer mPlayer;  
  10.   
  11.     boolean isPlay;  
  12.     @Override  
  13.     protected void onCreate(Bundle savedInstanceState) {  
  14.         super.onCreate(savedInstanceState);  
  15.         setContentView(R.layout.activity_main);  
  16.         ButterKnife.bind(this);  
  17.   
  18.         isPlay = false;  
  19.         pause.setEnabled(false);  
  20.         mSurfaceView.getHolder().addCallback(this);  
  21.         initPlayer();  
  22.     }  
  23.   
  24.     private void initPlayer() {  
  25.         IjkMediaPlayer.loadLibrariesOnce(null);  
  26.         IjkMediaPlayer.native_profileBegin("libijkplayer.so");  
  27.   
  28.         mPlayer = new IjkMediaPlayer();  
  29.       /*  try {  
  30.             //http://ips.ifeng.com/video19.ifeng.com/video09/2014/06/16/1989823-102-086-0009.mp4  
  31.             mPlayer.setDataSource("http://ips.ifeng.com/video19.ifeng.com/video09/2014/06/16/1989823-102-086-0009.mp4");  
  32.         } catch (IOException e) {  
  33.             e.printStackTrace();  
  34.         }  
  35.         mPlayer.prepareAsync();  
  36.         mPlayer.start();*/  
  37.     }  
  38.   
  39.     @Override  
  40.     public void surfaceCreated(SurfaceHolder holder) {  
  41.         mPlayer.setDisplay(holder);  
  42.     }  
  43.   
  44.     @Override  
  45.     public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {  
  46.   
  47.     }  
  48.   
  49.     @Override  
  50.     public void surfaceDestroyed(SurfaceHolder surfaceHolder) {  
  51.   
  52.     }  
  53.   
  54.     @OnClick({R.id.start, R.id.pause})  
  55.     public void onViewClicked(View view) {  
  56.         switch (view.getId()) {  
  57.             case R.id.start:  
  58.                 mPlayer.reset();  
  59.                 try {  
  60.                     mPlayer.setDataSource("http://ips.ifeng.com/video19.ifeng.com/video09/2014/06/16/1989823-102-086-0009.mp4");//读取视频文件地址  
  61.                     mPlayer.prepareAsync();                             //预加载视频  
  62.                     mPlayer.setDisplay(mSurfaceView.getHolder());  //将视频画面输出到surface上  
  63.                     mPlayer.start();                                //开始播放  
  64.                     pause.setText("暂停");                        //pause此时为暂停  
  65.                     pause.setEnabled(true);                       //pause按钮此时可用  
  66.                     isPlay = true;  
  67.                 }catch (IOException e){  
  68.                     Toast.makeText(MainActivity.this,"发生错误",Toast.LENGTH_LONG).show();  
  69.                 }  
  70.                 break;  
  71.             case R.id.pause://点击暂停时候 如果正在播放 就显示继续按钮  
  72.   
  73.                 if (isPlay == true) {  
  74.                     pause.setText("继续");  
  75.                     mPlayer.pause();  
  76.                     isPlay = false;  
  77.                 } else {  
  78.                     mPlayer.start();  
  79.                     pause.setText("暂停");  
  80.                     isPlay = true;  
  81.             }  
  82.                 break;  
  83.         }  
  84.     }