Android多媒体教程之播放视频的四种方法
本文主要给大家介绍的是关于Android播放视频的四种方法,分享出来供大家参考学习,下面来一起看看详细的介绍:
一、通过intent的方式,调用系统自带的播放器
Uriuri=Uri.parse("/storage/emulated/0/DCIM/Camera/20170521_200117.mp4");
//调用系统自带的播放器
Intentintent=newIntent(Intent.ACTION_VIEW);
intent.setDataAndType(uri,"/storage/emulated/0/DCIM/Camera/20170521_200117.mp4");
startActivity(intent);
二、使用VideoView
布局文件
Activity
publicclassVideoPlayByVVActivityextendsAppCompatActivity{
privateVideoViewmVideoView;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
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();
}
privatevoidinit(){
Stringpath="/storage/emulated/0/DCIM/Camera/20170521_200117.mp4";
Uriuri=Uri.parse(path);
mVideoView.setVideoPath(path);
mVideoView.start();
mVideoView.requestFocus();
}
}
三、MediaPlayer+SurfaceView
Activity
publicclassVideoPlayBySurActivityextendsAppCompatActivityimplementsView.OnClickListener{
privateSurfaceViewmSurfaceView;
privateMediaPlayermMediaPlayer;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
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();
}
privatevoidinit(){
mMediaPlayer=newMediaPlayer();
mSurfaceView.getHolder().addCallback(newSurfaceHolder.Callback(){
@Override
publicvoidsurfaceCreated(SurfaceHolderholder){
play();
}
@Override
publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,intheight){
}
@Override
publicvoidsurfaceDestroyed(SurfaceHolderholder){
}
});
}
@Override
publicvoidonClick(Viewv){
switch(v.getId()){
caseR.id.stop:
stop();
break;
caseR.id.play:
if(!mMediaPlayer.isPlaying()){
play();
}
break;
caseR.id.pasue:
pasue();
break;
}
}
publicvoidstop(){
if(mMediaPlayer.isPlaying()){
mMediaPlayer.stop();
}
}
publicvoidpasue(){
if(mMediaPlayer.isPlaying()){
mMediaPlayer.pause();
}else{
mMediaPlayer.start();
}
}
publicvoidplay(){
Stringpath="/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(IOExceptione){
e.printStackTrace();
}
}
}
四、MediaPlayer+TextureView
Activity
publicclassVideoPlayByTextrueViewActivityextendsAppCompatActivityimplementsMediaPlayer.OnPreparedListener,MediaPlayer.OnInfoListener,MediaPlayer.OnBufferingUpdateListener{
privateTextureViewmTextureView;
privateImageViewmImageVideo;
privateSurfacemSurface;
privateMediaPlayermMediaPlayer;
privatestaticStringpath="/storage/emulated/0/DCIM/Camera/20170521_200117.mp4";
@Override
protectedvoidonCreate(BundlesavedInstanceState){
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();
}
privatevoidinit(){
mTextureView.setSurfaceTextureListener(newTextureView.SurfaceTextureListener(){
@Override
publicvoidonSurfaceTextureAvailable(SurfaceTexturesurfaceTexture,intwidth,intheight){
mSurface=newSurface(surfaceTexture);
Log.e("tag","----onSurfaceTextureAvailable");
play();
}
@Override
publicvoidonSurfaceTextureSizeChanged(SurfaceTexturesurface,intwidth,intheight){
Log.e("tag","----onSurfaceTextureSizeChanged");
}
@Override
publicbooleanonSurfaceTextureDestroyed(SurfaceTexturesurface){
mTextureView=null;
mSurface=null;
mMediaPlayer.stop();
mMediaPlayer.release();
returnfalse;
}
@Override
publicvoidonSurfaceTextureUpdated(SurfaceTexturesurface){
}
});
}
publicvoidplay(){
mMediaPlayer=newMediaPlayer();
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(IOExceptione){
e.printStackTrace();
}
}
@Override
publicvoidonPrepared(MediaPlayermp){
mImageVideo.setVisibility(View.GONE);
mMediaPlayer.start();
}
@Override
publicbooleanonInfo(MediaPlayermp,intwhat,intextra){
returnfalse;
}
@Override
publicvoidonBufferingUpdate(MediaPlayermp,intpercent){
}
}
参考文章
Android中SurfaceView的使用详解
Android5.0(Lollipop)中的SurfaceTexture,TextureView,SurfaceView和GLSurfaceView
AndroidTextureView简易教程
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。