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);
		}
	}








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章