android使用surfaceview+MediaPlayer播放视频
在Android平台上,播放视频有多种方法,而使用`SurfaceView`配合`MediaPlayer`是一种常见且高效的方式。`SurfaceView`允许在非UI线程中进行画面刷新,这在处理视频播放时尤其有用,因为它可以避免因为频繁更新UI而导致的性能问题。下面是关于如何使用`SurfaceView`和`MediaPlayer`播放视频的详细步骤和注意事项。 我们需要创建一个`SurfaceView`,并获取它的`SurfaceHolder`。`SurfaceHolder`是`SurfaceView`的接口,用于管理和控制与`Surface`相关的操作。在`onCreate`方法中,我们可以通过`findViewById`找到`SurfaceView`并设置其`SurfaceHolder`: ```java SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceView); SurfaceHolder holder = surfaceView.getHolder(); ``` 然后,我们需要给`SurfaceHolder`添加一个`Callback`,以便在`Surface`的生命周期事件发生时得到通知。`SurfaceHolder.Callback`接口提供了三个方法:`surfaceCreated()`, `surfaceChanged()`, 和 `surfaceDestroyed()`。 1. `surfaceCreated()`: 当`Surface`准备好使用时调用,适合在此处设置`MediaPlayer`的显示目标。例如: ```java @Override public void surfaceCreated(SurfaceHolder holder) { player.setDisplay(holder); } ``` 2. `surfaceChanged()`: 表明`Surface`的尺寸或格式发生变化,通常不需要在此处理播放逻辑。 3. `surfaceDestroyed()`: 当`Surface`不再可用时调用,用于释放资源,防止内存泄漏。 接着,我们需要创建并配置`MediaPlayer`对象。创建`MediaPlayer`实例后,通过`setDataSource()`方法设置视频源,可以是本地文件路径、URI或者网络地址: ```java player = new MediaPlayer(); player.setDataSource("http://video.dispatch.tc.qq.com/77613075/x0021o8d3g3.mp4"); ``` 之后,调用`MediaPlayer`的`prepare()`方法来准备播放: ```java player.prepare(); ``` 调用`start()`方法开始播放视频: ```java player.start(); ``` 为了确保`Surface`准备好后再进行播放,我们通常会在`surfaceCreated()`方法中启动播放流程,并在`surfaceDestroyed()`中释放`MediaPlayer`资源。同时,可以添加一个进度条(`ProgressBar`)来显示视频加载进度,通过监听`MediaPlayer`的事件来更新进度条: ```java player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { progressBar.setVisibility(View.GONE); } }); player.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() { @Override public void onBufferingUpdate(MediaPlayer mediaPlayer, int percent) { progressBar.setProgress(percent); } }); ``` 在实际开发中,还需要处理其他一些细节,如错误处理、播放状态监听、音量控制等。`MediaPlayer`类提供了丰富的回调方法,如`OnCompletionListener`、`OnErrorListener`等,可以根据需求进行适配。 总结来说,使用`SurfaceView`和`MediaPlayer`播放视频涉及的主要步骤包括:创建`SurfaceView`,设置`SurfaceHolder`回调,初始化并配置`MediaPlayer`,在`Surface`准备好后开始播放,并根据需要处理播放过程中的各种事件。这种播放方式能够提供更好的性能和自定义能力,适用于复杂的视频播放场景。




























- 粉丝: 2
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源


