VitamioBundle的使用

来源:互联网 发布:it行业招聘网站 编辑:程序博客网 时间:2024/06/07 10:09

1.需要在activity中判断

if (!io.vov.vitamio.LibsChecker.checkVitamioLibs(this))
            return;

2.缓冲状态的回掉,用于显示加载进度(其实是设置MediaPlayer的该方法)

mVideoView.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {@Overridepublic void onBufferingUpdate(MediaPlayer mp, int percent) {// 缓冲状态中,percent为下载量的百分比}});

3.不管同步异步调用mMediaPlayer.prepare,都会回掉该监听器的方法

mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {@Overridepublic void onPrepared(MediaPlayer mediaPlayer) {mediaPlayer.setPlaybackSpeed(1.0f);}});
4.播放结束将会回调,前提是没有开启循环模式

mWebView.setOnCompletionListener(mCompletionListener);
5.播放过程中出现错误将会回掉

mVideoView.setOnErrorListener(mErrorListener);

6.seekTo(int)方法是异步执行的,所以它可以马上返回,但是实际的定位播放操作可能需要一段时间才能完成,尤其是播放流形式的音频/视频。当实际的定位播放操作完成之后,内部的播放引擎会调用客户端程序员提供的OnSeekComplete.onSeekComplete()回调方法。

mVideoView.setOnSeekCompleteListener(mSeekCompleteListener);
7.回掉播放过程中的各种信息

mVideoView.setOnInfoListener(mInfoListener);

以下是系统MediaPlayer的静态字段

MEDIA_INFO_UNKNOWN:未知消息MEDIA_INFO_VIDEO_TRACK_LAGGING:视频解码器太复杂了:它不能解码帧的足够快。可能只有音频播放良好在这个阶段。MEDIA_INFO_VIDEO_RENDERING_START:只是渲染了视频的第一帧。MEDIA_INFO_BUFFERING_START:暂停播放以缓存更多地数据。MEDIA_INFO_BUFFERING_END:缓冲结束,将要继续进入播放状态。MEDIA_INFO_BAD_INTERLEAVING:MEDIA_INFO_NOT_SEEKABLE:不能拖动MEDIA_INFO_METADATA_UPDATE:MEDIA_INFO_UNSUPPORTED_SUBTITLE:该媒体框架不支持该字幕MEDIA_INFO_SUBTITLE_TIMED_OUT:字幕读取时间过长

VitamioBundle中的MediaPlayer

MEDIA_INFO_DOWNLOAD_RATE_CHANGED:下载的速率发生了改变(单位kb/s)

8.设置控制器

MediaController mediaController = new MediaController(TvPlayActivity.this);// 全屏半屏按钮点击事件mediaController.setIvToBigClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 设置屏幕强转if (TvPlayActivity.this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {TvPlayActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);} else if (TvPlayActivity.this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {TvPlayActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);}}});
MediaController中一般按钮的监听里面已经设置好,比如开始播放,暂停,seekbar拖动,然后以上方法可以设置横竖屏切换的监听。



// 设置uriif (!TextUtils.isEmpty(videoInfoVo.getProgramlist().get(0).getM3u8())) {// 设置控制器MediaController mediaController = new MediaController(TvPlayActivity.this);// 全屏半屏按钮点击事件mediaController.setIvToBigClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 设置屏幕强转if (TvPlayActivity.this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {TvPlayActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);} else if (TvPlayActivity.this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {TvPlayActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);}}});mVideoView.setMediaController(mediaController);// 获得焦点mVideoView.requestFocus();// 设置监听器mVideoView.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {@Overridepublic void onBufferingUpdate(MediaPlayer mp, int percent) {// 缓冲状态中,percent为下载量的百分比,一般在videoView中间设置}});mVideoView.setOnInfoListener(new MediaInfoListener());mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {@Overridepublic void onPrepared(MediaPlayer mediaPlayer) {mediaPlayer.setPlaybackSpeed(1.0f);}});Uri uri = Uri.parse(videoInfoVo.getProgramlist().get(0).getM3u8());mVideoView.setVideoURI(uri);}

class MediaInfoListener implements OnInfoListener {@Overridepublic boolean onInfo(MediaPlayer arg0, int arg1, int arg2) {switch (arg1) {case MediaPlayer.MEDIA_INFO_BUFFERING_START:// 开始缓冲,如果正在播放,则停止if (mVideoView.isPlaying()) {mVideoView.pause();}break;case MediaPlayer.MEDIA_INFO_BUFFERING_END:// 缓冲完毕,开始播放mVideoView.start();break;case MediaPlayer.MEDIA_INFO_DOWNLOAD_RATE_CHANGED:// 下载的速率发生了改变// setText("" + arg2 + "kb/s" + "  ");break;}return true;}}
当点击横竖屏时,需要手动设置控件的宽高:

@Overridepublic void onConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {mTopRl.getLayoutParams().height = LayoutParams.MATCH_PARENT;mTopRl.getLayoutParams().width = LayoutParams.MATCH_PARENT;mVideoView.getLayoutParams().height = LayoutParams.MATCH_PARENT;mVideoView.getLayoutParams().width = LayoutParams.MATCH_PARENT;// mVideoView.getHolder().setFixedSize(mVideoView.getLayoutParams().width, mVideoView.getLayoutParams().height);// mVideoView.setVideoScale(Settings.DISPLAY_HEIGHT, Settings.DISPLAY_WIDTH);// mVideoView.setVideoScale(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);// mVideoView.getHolder().setFixedSize(Settings.DISPLAY_HEIGHT, Settings.DISPLAY_WIDTH);} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {// mVideoView.getLayoutParams().height= DensityUtils.dp2px(TvPlayActivity.this, 230);// mVideoView.getLayoutParams().width= LayoutParams.MATCH_PARENT;mTopRl.getLayoutParams().height = LayoutParams.WRAP_CONTENT;mTopRl.getLayoutParams().width = LayoutParams.MATCH_PARENT;mVideoView.setVideoScale(LayoutParams.MATCH_PARENT, DensityUtils.dp2px(TvPlayActivity.this, 230));mVideoView.getHolder().setFixedSize(mVideoView.getLayoutParams().width, mVideoView.getLayoutParams().height);}}








0 0
原创粉丝点击