上一篇博客中,使用SurfaceView和MediaPlayer完成了视频播放,当然安卓原生控件中的VideoView也可以实现网络视频与本地视频的播放,非常简单,仔细查看源码,会发现VideoView的底层正式使用了MediaPlayer与SurfaceView封装创建。但是在列表播放时,使用VideoView控件占据内存很大,很容易造成oom的错误。但是使用SurfaceView和MediaPlayer,我们发现很麻烦,而且功能比较少,所以我们选择使用封装好的第三方框架完成视频播放的操作,这里为大家推荐一种功能齐全使用简单的视频框架——JiaoZiVideoPlayer,点击跳转github链接。
主要特点:
- 可以完全自定义UI和任何功能
- 一行代码切换播放引擎,支持的视频格式和协议取决于播放引擎,android.media.MediaPlayer ijkplayer
- 完美检测列表滑动
- 可实现全屏播放,小窗播放
- 能在
ListView
、ViewPager
和ListView
、ViewPager
和Fragment
等多重嵌套模式下全屏工作- 可以在加载、暂停、播放等各种状态中正常进入全屏和退出全屏
- 多种视频适配屏幕的方式,可铺满全屏,可以全屏剪裁
- 重力感应自动进入全屏
- 全屏后手势修改进度和音量
- Home键退出界面暂停播放,返回界面继续播放
- WebView嵌套本地视频控件
- demo中添加视频缓存的例子
- 倍速播放
这里我主要使用此播放器完成上一篇博客中的列表播放的效果,鉴于网址内容可能会发生变化,为了能长久使用,我将视频播放相关数据保存在集合中,封装类如下:
package com.animee.videodemo;
public class VideoBean {
private String title;
private String picUrl;
private String videoUrl;
public VideoBean() {}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getPicUrl() {
return picUrl;
}
public void setPicUrl(String picUrl) {
this.picUrl = picUrl;
}
public String getVideoUrl() {
return videoUrl;
}
public void setVideoUrl(String videoUrl) {
this.videoUrl = videoUrl;
}
public VideoBean(String title, String picUrl, String videoUrl) {
this.title = title;
this.picUrl = picUrl;
this.videoUrl = videoUrl;
}
}
集合类: