一、前言
Android中视频播放的方式有两种,一种是使用系统封装好的VideoView,使用起来比较方便,系统API把所有播放的内容都封在了这个类中,唯一不足的是无法自定义,比如你想修改播放的进度条就是一件十分麻烦的事情。
所以Android还提供了另一种视频播放的类SurfaceView,此类结合MediaPlayer使用起来十分得心应手,自定义功能强大到你想做什么都可以在此去实现,所以编者认为市场上流行的视频播放基本都是通过SurfaceView来实现的。
二、VideoView使用步骤
1、在布局中使用并初始化VideoView
// # 设置本地资源 //vv.setVideoPath(Environment.getRootDirectory() + "/dream.mp4"); // # 设置网络资源 vv.setVideoURI(Uri.parse("http://tb-video.bdstatic.com/tieba-smallvideo/1116878_e3a8d2b10bd099f523cbc9e87a64f53a.mp4"));
2、初始化媒体控制器MediaController
// # 2 初始化控制器 MediaController controller = new MediaController(this);
3、用VideoView绑定媒体控制器
// 绑定VideoView和控制器 vv.setMediaController(controller); controller.setMediaPlayer(vv);
4、播放视频
// 播放视频 vv.start();
说明:VideoView使用起来相对简单,只需要绑定媒体控制器即可实现较为美观的视频播放界面,但是如果我们想自定义视频播放界面,VideoView就完成不了我们的期望了。
三、SurfaceView+MediaPlayer使用步骤
1、在布局中使用并初始化SurfaceView
2、通过SurfaceView初始化持有者SurfaceHolder,SurfaceHolder主要负责控制SurfaceView
// 初始化持有者 surfaceHolder = sv.getHolder();
3、给SurfaceHolder添加Callback监听,此监听会重写三个抽象方法:surfaceCreated(创建时调用)、surfaceChanged(发生改变时调用)、surfaceDestroyed(销毁时调用)
// 设置监听 surfaceHolder.addCallback(this);
4、给SurfaceHolder设置类型
// 设置类型 surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//类型(不可删除)
5、在步骤3给SurfaceHolder添加的监听方法中初始化并使用MediaPlayer(MediaPlayer使用步骤:http://blog.csdn.net/baidu_17619859/article/details/53815949)
6、给MediaPalyer设置显示屏:此方法需要在MediaPalyer对象准备完成后使用
mediaPlayer.setDisplay(surfaceHolder);
四、附属
//设置横屏播放 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);