边下边播
文件头部信息只要 MediaPlayer 解析完毕可以去播放则才会读取文件内容部分,所以可以在下载文件头信息之后可以开启一边下载内容MediaPlayer 一边解析内容的方式实现边下载边播放。
关键点:下载速度较慢时内容不足解析速度,这是会触发 onError ,所以需要处理好 MediaPlayer 的解码状态
如下图所示:
代码部分:
1、将MediaPlayer的播放过程分为初始化和解码两部分
public class MediaUtil {
private static final int MSG_PLAY_POS = 101;
private static final int MSG_DOWNLOAD_POS = 102;
private Context context;
//媒体播放器
private MediaPlayer mediaPlayer;
//本地缓存的文件夹
private String localCachePath;
//当前是否是停止
private boolean isStop = true;
//解码出错的位置
private int errorPos;
//进度显示的视图
private SeekBar seekBar;
//视频播放显示
private Surface surface;
...
/**
* 初始化播放器
*/
private void initMediaPlayer() {
if (mediaPlayer == null) {
//初始化播放器
mediaPlayer = new MediaPlayer();
//设置准备监听
mediaPlayer.setOnPreparedListener(onPreparedListener);
//设置错误监听
mediaPlayer.setOnErrorListener(onErrorListener);
//播放结束监听
mediaPlayer.setOnCompletionListener(onCompletionListener);
//设置视频大小改变监听
mediaPlayer.setOnVideoSizeChangedListener(onVideoSizeChangedListener);
} else {
mediaPlayer.reset();
}
//如果检测到有显示视频画面Surface,则设置显示载体
if (surface != null){
mediaPlayer.setScreenOnWhilePlaying(true);
mediaPlayer.setSurface(surface);
}
}
/**
* 解码操作
*
* @param path
*/
private void setDataAndPrepare(String path) {
//设置播放的媒体源
try {
mediaPlayer.setDataSource(path);