浅谈Android MediaPlayer
前言
MediaPlayer是Android中多媒体框架中一个重要的组件,我们通过它可以控制在线或者本地音视频的播放过程.
MediaPlayer常用方法介绍
1.void setDataSource(String url)通过一个具体的路径来设置MediaPlayer的数据源,url可以是本地的一个路径,也可以是一个网络路径.
2.void setDataSource(Context context, Uri uri )通过给定的Uri来设置MediaPlayer的数据源,这里的Uri可以是网络路径或是一个ContentProvider的Uri.
3.void setDataSource(MediaDataSource dataSource) 通过提供的MediaDataSource来设置数据源
4.void setDataSource(FileDescriptor fd) 通过文件描述符FileDescriptor来设置数据源
5.getCurrentPosition()获取当前播放位置
6.getDuration()得到文件时间
7.boolean isLooping()是否循环播放
8.boolean isPlaying()是否正在播放
9.void pause()暂停
10.void stop()停止
11.void start()播放
12.void prepare()同步装载流媒体文件
13.void prepareAsync()异步装载流媒体文件
14.void reset()重置MeidaPlayer至未初始的状态
15.void release()回收流媒体资源
16.void seekTo(int msec)指定播放位置(毫秒计算)
17.void setAudioStreamType(int streamtype) 指定流媒体类型
18.void setLooping(boolean looping) 设置是否单曲循环
19.setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener) 网络流媒体的缓冲变化时回调 **
20.setOnCompletionListener(MediaPlayer.OnCompletionListener listener) 网络流媒体播放结束时回调
21.setOnErrorListener(MediaPlayer.OnErrorListener listener) 发生错误时回调 **
22.setOnPreparedListener(MediaPlayer.OnPreparedListener listener):当装载流媒体完毕的时候回调。
!划重点
1.在使用start()播放流媒体之前,需要装载流媒体资源,建议最好使用prepareAsync()异步装载的方式装载流媒体资源.这是因为流媒体资源的装载会消耗系统资源,在一些硬件设备不理想的情况下,可能会造成界面的卡顿.为了避免还没有装载完成就调用start()而报错的问题,需要绑定MediaPlayer.setOnPreparedListener()事件,它将在异步装载完成之后回调.
mediaPlayer.reset();
try {
mediaPlayer.setDataSource(url);
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(onPreparedListener);
}catch (IOException e) {
e.printStackTrace();
}
public MediaPlayer.OnPreparedListener onPreparedListener = new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
//开始播放
mp.start();
}
};
2.getCurrentPosition()以及getDuration()方法调用事件,如果媒体资源未start()之前就调用这两个方法,则会触发MeidaPlayer.setOnErrorListener()事件,在onError()方法中,我们一般是执行next()方法,所以就会导致切歌的现象.
3.播放完毕后的操作,这里就有另一个监听事件了MediaPlayer.setOnCompletionListener(),资源播放完毕一般的处理和onError()一致,都是执行next()方法.
4.MeidaPlayer的回收,MediaPlayer是很消耗系统资源的,所以在使用完MediaPlayer,不要等待系统自动回收,最好是主动回收资源。
if (mediaPlayer != null) {
mediaPlayer.reset();
mediaPlayer.release();
mediaPlayer = null;
}