vitamio框架是一个国产项目,大大简化了ffmpeg 的使用难度。可以在github 下载集成到自己的 项目中来。

xml 布局中  

io.vov.vitamio.widget.VideoView 作为视频的容器,默认宽高为 match_parent ,在初始化时候视频后会根据视频的宽高显示。

在播放视频之前需要 初始化 .so 的组件,建议在 要播放的 Activity 的最开始 加上:

Java
if (!LibsChecker.checkVitamioLibs(this))
    return;

然后给 VideoView 设置 视频 地址:

Java
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 重复加载发生的。



Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐