VitamioBundle的使用

1.需要在activity中判断

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

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

mVideoView.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {

							@Override
							public void onBufferingUpdate(MediaPlayer mp, int percent) {
								// 缓冲状态中,percent为下载量的百分比

							}
						});

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

mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
							@Override
							public 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() {

							@Override
							public 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拖动,然后以上方法可以设置横竖屏切换的监听。



// 设置uri
					if (!TextUtils.isEmpty(videoInfoVo.getProgramlist().get(0).getM3u8())) {
						// 设置控制器
						MediaController mediaController = new MediaController(TvPlayActivity.this);
						// 全屏半屏按钮点击事件
						mediaController.setIvToBigClickListener(new OnClickListener() {

							@Override
							public 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() {

							@Override
							public void onBufferingUpdate(MediaPlayer mp, int percent) {
								// 缓冲状态中,percent为下载量的百分比,一般在videoView中间设置

							}
						});
						mVideoView.setOnInfoListener(new MediaInfoListener());
						mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
							@Override
							public void onPrepared(MediaPlayer mediaPlayer) {
								mediaPlayer.setPlaybackSpeed(1.0f);
							}
						});
						Uri uri = Uri.parse(videoInfoVo.getProgramlist().get(0).getM3u8());
						mVideoView.setVideoURI(uri);
					}

class MediaInfoListener implements OnInfoListener {

		@Override
		public 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;
		}
	}
当点击横竖屏时,需要手动设置控件的宽高:

@Override
	public 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);
		}
	}








你可能感兴趣的:(框架,application,framework,应用程序)