Android 播放视频的方法

一、通过intent的方式,调用系统自带的播放器

     Uri uri = Uri.parse("/storage/emulated/0/DCIM/Camera/20170521_200117.mp4");        //调用系统自带的播放器         Intent intent = new Intent(Intent.ACTION_VIEW);         intent.setDataAndType(uri, "/storage/emulated/0/DCIM/Camera/20170521_200117.mp4");         startActivity(intent); 

二、使用VideoView

布局文件

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

Activity

public class VideoPlayByVVActivity extends AppCompatActivity {    private VideoView mVideoView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);//        requestWindowFeature(Window.FEATURE_NO_TITLE);  //去掉 title//        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); //设置全屏//        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);   //设置屏幕常亮        setContentView(R.layout.activity_video_play_by_vv);        mVideoView = (VideoView) findViewById(R.id.video_view);        init();    }    private void init() {       String path = "/storage/emulated/0/DCIM/Camera/20170521_200117.mp4";        Uri uri = Uri.parse(path);        mVideoView.setVideoPath(path);        mVideoView.start();        mVideoView.requestFocus();            }}

三、MediaPlayer + SurfaceView

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

Activity

public class VideoPlayBySurActivity extends AppCompatActivity implements View.OnClickListener {    private SurfaceView mSurfaceView;    private MediaPlayer mMediaPlayer;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_video_play_by_sur);        mSurfaceView = (SurfaceView) findViewById(R.id.surface_view);        findViewById(R.id.stop).setOnClickListener(this);        findViewById(R.id.pasue).setOnClickListener(this);        findViewById(R.id.play).setOnClickListener(this);        init();    }    private void init() {        mMediaPlayer = new MediaPlayer();        mSurfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {            @Override            public void surfaceCreated(SurfaceHolder holder) {                play();            }            @Override            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {            }            @Override            public void surfaceDestroyed(SurfaceHolder holder) {            }        });    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.stop:                stop();                break;            case R.id.play:                if(!mMediaPlayer.isPlaying()){                    play();                }                break;            case R.id.pasue:                pasue();                break;        }    }    public void stop(){        if(mMediaPlayer.isPlaying()){            mMediaPlayer.stop();        }    }    public void pasue(){        if(mMediaPlayer.isPlaying()){            mMediaPlayer.pause();        }else{            mMediaPlayer.start();        }    }    public void play(){        String path = "/storage/emulated/0/DCIM/Camera/20170521_200117.mp4";        try {            mMediaPlayer.reset();            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);            //设置需要播放的视频            mMediaPlayer.setDataSource(this, Uri.parse(path));            //把视频画面输出到SurfaceView            mMediaPlayer.setDisplay(mSurfaceView.getHolder());            mMediaPlayer.prepare();            mMediaPlayer.start();        } catch (IOException e) {            e.printStackTrace();        }    }}

四、 MediaPlayer + TextureView

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

Activity

public class VideoPlayByTextrueViewActivity extends AppCompatActivity implements MediaPlayer.OnPreparedListener, MediaPlayer.OnInfoListener, MediaPlayer.OnBufferingUpdateListener {    private TextureView mTextureView;    private ImageView mImageVideo;    private Surface mSurface;    private MediaPlayer mMediaPlayer;    private static String path = "/storage/emulated/0/DCIM/Camera/20170521_200117.mp4";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_video_play_by_textrue_view);        mTextureView = (TextureView) findViewById(R.id.texture_view);        mImageVideo = (ImageView) findViewById(R.id.video_image);        init();    }    private void init() {        mTextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {            @Override            public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {                mSurface = new Surface(surfaceTexture);                Log.e("tag", "---- onSurfaceTextureAvailable");                play();            }            @Override            public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {                Log.e("tag", "---- onSurfaceTextureSizeChanged");            }            @Override            public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {                mTextureView=null;                mSurface=null;                mMediaPlayer.stop();                mMediaPlayer.release();                return false;            }            @Override            public void onSurfaceTextureUpdated(SurfaceTexture surface) {            }        });    }    public void play(){        mMediaPlayer = new MediaPlayer();        try {            mMediaPlayer.setDataSource(getApplicationContext(), Uri.parse(path));            mMediaPlayer.setSurface(mSurface);            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);            mMediaPlayer.setOnPreparedListener(this);            mMediaPlayer.setOnInfoListener(this);            mMediaPlayer.setOnBufferingUpdateListener(this);            mMediaPlayer.prepareAsync();        } catch (IOException e) {            e.printStackTrace();        }    }    @Override    public void onPrepared(MediaPlayer mp) {        mImageVideo.setVisibility(View.GONE);        mMediaPlayer.start();    }    @Override    public boolean onInfo(MediaPlayer mp, int what, int extra) {        return false;    }    @Override    public void onBufferingUpdate(MediaPlayer mp, int percent) {    }}

参考文章

Android中SurfaceView的使用详解
Android 5.0(Lollipop)中的SurfaceTexture,TextureView, SurfaceView和GLSurfaceView
Android TextureView简易教程

END

更多相关文章

  1. android布局相关
  2. Android界面——控件和布局
  3. Android(安卓)openGl开发详解(一)——绘制简单图形
  4. 小视频源码,android 判断布局是否为RTL布局
  5. android DrawerLayout 点击穿透、点击自身消失等问题解决
  6. Android(安卓)studio 实现简单的视频播放
  7. Android(安卓)布局添加阴影背景ShadowDrawable
  8. Android(安卓)sensor hal 详解
  9. Android(安卓)使用librtmp推流【音视频传输】

随机推荐

  1. Android(安卓)ScrollView自动滑动一段距
  2. javaeye中的一些好的android博客
  3. Android(安卓)调用 Web Service
  4. Android(安卓)shape中的padding无效
  5. 【简单的学生管理界面】Android的if语句
  6. android官方技术文档翻译——工具属性
  7. 穿针引线,帮你回忆, 汇总:Android系统启动流
  8. android动画入门篇
  9. 【备忘】2016最新独家老罗Android视频教
  10. android 静音与振动