一、Android 视频播放的几种方法

1、VideoView 播放组件
(1)布局xml中添加VideoView组件

  

(2)AndroidManifest文件
添加访问sd卡权限
横屏 android:screenOrientation="landscape"
去掉ActionBar android:theme="@style/Theme.AppCompat.Light.NoActionBar"
(3)MainActivity.java

public class MainActivity extends Activity {    private VideoView videoView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        videoView = findViewById(R.id.VideoView);        videoView.setVideoPath("/mnt/shared/other/family.mp4");     //设置视频路径        videoView.start();        MediaController mediaController = new MediaController(MainActivity.this,true);   //设置控制器        videoView.setMediaController(mediaController);    //用控制器初始化videoview    }}

2、MediaPlayer + SurfaceView
(1)视频文件ocean.mp4放置于res目录下的raw目录中,由于surfaceView的创建需要一定的时间,因此调用addCallback,在其创建完成时,播放器设置播放幕布并进行播放。
(2)布局XML

<?xml version="1.0" encoding="utf-8"?>        

(3)MainActivity.Java

public class MainActivity extends Activity {    private SurfaceView surfaceView;   //播放幕布    private MediaPlayer mediaPlayer;  //播放器    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        surfaceView = findViewById(R.id.surfaceView);        mediaPlayer = MediaPlayer.create(MainActivity.this,R.raw.ocean);        //surfaceView的创建需要一定的时间        surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {            @Override            public void surfaceCreated(SurfaceHolder surfaceHolder) {                mediaPlayer.setDisplay(surfaceView.getHolder());                mediaPlayer.start();            }            @Override            public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {            }            @Override            public void surfaceDestroyed(SurfaceHolder surfaceHolder) {            }        });        findViewById(R.id.pause).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                mediaPlayer.pause();            }        });        findViewById(R.id.play).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                mediaPlayer.start();            }        });    }}    


3、MediaPlayer + SurfaceView + MediaController
(1)布局XML
只有一个SurfaceView组件

<?xml version="1.0" encoding="utf-8"?>    

(2)MainActivity.java
自己定义MediaController,相当于将MediaPlayer 的控制交给MediaController。

public class MainActivity extends Activity implements MediaController.MediaPlayerControl {    private SurfaceView surfaceView;   //播放幕布    private MediaPlayer mediaPlayer;    private MediaController mediaController;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        surfaceView = findViewById(R.id.surfaceView);        mediaPlayer = MediaPlayer.create(MainActivity.this,R.raw.ocean);        //surfaceView的创建需要一定的时间        surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {            @Override            public void surfaceCreated(SurfaceHolder surfaceHolder) {                mediaPlayer.setDisplay(surfaceView.getHolder());                mediaPlayer.start();            }            @Override            public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {            }            @Override            public void surfaceDestroyed(SurfaceHolder surfaceHolder) {            }        });        mediaController = new MediaController(MainActivity.this);        mediaController.setMediaPlayer(MainActivity.this);        mediaController.setAnchorView(findViewById(R.id.root));        mediaController.setEnabled(true);    }    @Override    public void start() {        mediaPlayer.start();    }    @Override    public void pause() {        mediaPlayer.pause();        //显示广告、开通会员等    }    @Override    public int getDuration() {        return mediaPlayer.getDuration();    }    @Override    public int getCurrentPosition() {        return mediaPlayer.getCurrentPosition();    }    @Override    public void seekTo(int i) {        mediaPlayer.seekTo(i);    }    @Override    public boolean isPlaying() {        return mediaPlayer.isPlaying();    }    @Override    public int getBufferPercentage() {        return 0;    }    @Override    public boolean canPause() {        return true;    }    @Override    public boolean canSeekBackward() {        return true;    }    @Override    public boolean canSeekForward() {        return true;    }    @Override    public int getAudioSessionId() {        return 0;    }    @Override    public boolean onTouchEvent(MotionEvent event) {        mediaController.show();  //显示mediaController        //将触摸事件交给mediaController去处理而不是activity        return mediaController.onTouchEvent(event);    }}

更多相关文章

  1. CMD命令创建、编译Android应用程序
  2. android 闪光灯控制
  3. Android(安卓)BufferQueue原理分析
  4. 使用Android(安卓)Studio创建Android(安卓)Wear项目
  5. 使用Android(安卓)Studio创建Android(安卓)Wear项目
  6. Android(安卓)使用Json实现服务器与客户端数据的交互
  7. Android常用代码
  8. android 安卓创建文件夹
  9. Android——AppWidgetProvider应用

随机推荐

  1. Android(安卓)开源项目
  2. 使用setContentView的方式更换布局文件从
  3. Failed to fectch URl https://dl-ssl.go
  4. [android] ListView 选中状态的动态改变
  5. android之intent的Flag详解
  6. Android(安卓)ViewPager实例代码介绍2。
  7. 升级Android(安卓)Studio 3.0,报Unable to
  8. Android(安卓)使用MediaPlayer播放本地视
  9. Android基础入门教程——8.1.2 Android中
  10. Android优化