vitamio框架是一个国产项目,大大简化了ffmpeg 的使用难度。可以在github 下载集成到自己的 项目中来。
xml 布局中
io.vov.vitamio.widget.VideoView 作为视频的容器,默认宽高为 match_parent ,在初始化时候视频后会根据视频的宽高显示。
在播放视频之前需要 初始化 .so 的组件,建议在 要播放的 Activity 的最开始 加上:
if (!LibsChecker.checkVitamioLibs(this))
return;
然后给 VideoView 设置 视频 地址:
mVideoView.setVideoPath("http://lmcw.cn/xxxxxx.mp4");
视频地址可以是本地地址和网络地址,网络地址支持 rtsp 、rtmp、http 等 。也就是说可以播放TV盒子的视频源实现在线观看直播电视。
除了通过 mVideoView.setVideoPath(); 设置地址外还可以这样做,我们先看看setVideoPath()里是什么:
setVideoPath(String path) { setVideoURI(Uri.(path)); }
setVideoPath() 里面很明显就只是调用了 setVideoURI() 该方法,当然更多强大的功能就是这个了,可以通过该api来设置视频缓存功能。
= Uri.("cache:/sdcard/download.mp4:"+);.setVideoURI();
这样的话你要播放的视频,会一边播放一边缓存到设置的路径下。唯一遗憾的是视频需要重新加载,不能无刷新设置。
还有可以设置 播放视频的质量,但是我只测试了直播视频,并没有效果,我想应该是本地视频和网络普通视频有效果吧。
mVideoView.setVideoQuality(MediaPlayer.VIDEOQUALITY_LOW);
*设置视频质量。参数quality参见MediaPlayer的常量: *VIDEOQUALITY_LOW(流畅)、VIDEOQUALITY_MEDIUM(普通)、VIDEOQUALITY_HIGH(高质)。
设置视频加载数据的大小,这个根据网络的好坏来设置吧,一般默认就可以了。
mVideoView.setBufferSize();
设置视频加载中监听,实现视频缓冲速度和完成度
mVideoView.setOnBufferingUpdateListener();
在事件中 处理一些数据的 除法和 控件的显示隐藏。具体的代码请看官方demo 的 VideoViewBuffer.java
错误信息事件监听本身感觉有个小问题,当视频地址不对无法播放了,会弹出一个英文提示框。但是当你自己设置了监听还是会弹出,解决办法就是 项目搜索错误的关键词把那句弹出框给注掉即可,错误操作写到自己监听的方法里面。
mVideoView.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
new AlertDialog.Builder(VideoViewBuffer.this).setTitle(getResources()
.getString(R.string.videoErrTitle))
.setMessage(getResources().getString(R.string.videoErrMsg))
.setPositiveButton(getResources().getString(R.string.videoErrBtn),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
}).setCancelable(false).show();
return true;
}
});
mVideoView.setOnPreparedListener 视频加载完成发生(不是视频播放完成)
mediaPlayer.setPlaybackSpeed(1.0f); 视频大小比例(如果没记错的话) mVideoView.stopPlayback(); 停止视频,并且释放资源,当 Activity onPause()状态可调用。 mVideoView.start(); 开始播放,如果上次是暂停状态,再调用就是继续播放,不会重新加载。 mVideoView.pause(); 暂停视频 mVideoView.getCurrentPosition(); 获取当前播放位置,对直播视频没什么卵用,因为长度位置。 mVideoView.seekTo(mPosition); 猜都能猜到是 设置播放位置的,还是同上,直播视频没什么卵用。 mVideoView.setVideoLayout(mVideoLayout, 0); 设置视频大小的,比如缩放,全屏,比例神马的。 mVideoLayout值有: VideoView.VIDEO_LAYOUT_ORIGIN; VideoView.VIDEO_LAYOUT_SCALE; VideoView.VIDEO_LAYOUT_STRETCH; VideoView.VIDEO_LAYOUT_ZOOM;
mVideoView.setMediaController(new MediaController(this)); 设置视频控制器,这个就是框架自带的控制器,点击视频下面就会弹出一个 布局,有暂停,播放,进度条,等。普通视频比较有用,不需要再写这功能了,直播视频无视。。。
还有挺多关于 VideoView 类的 功能
除了 VideoView 播放 视频外,vitamio还有 MediaPlayer类播放音频 使用方法 也差不多,官方demo 有详细的使用方法 .
最重要的提示:播放视频的activity 一定要关闭屏幕旋转,用手动切换。不然在屏幕来回旋转的情况下 activity 会闪退,并且 如果之前的页面有 frament 的话会 重叠。该问题可能是 vitamio 重复加载发生的。