MediaController+VideoView播放视频实现及play/pause出错时处理

MediaController+VideoView播放视频实现及play/pause出错时处理

MediaController可以用于配合VideoView播放一段视频,它为VideoView提供一个悬浮的操作栏,在操作栏中可以对VideoView播放的视频进行控制,默认情况下,会悬浮显示三秒。它通过MediaController.setMediaPlayer()方法进行指定需要控制的VideoView,但是仅仅这样是不够的,MediaController的控制需要类似于双向控制,MediaController指定控制的VideoView,VideoView还需要指定那个MediaController来控制它,这需要使用VideoView.setMediaController()方法。
使用方法也十分简单,例:

xml布局:

<VideoView    
android:id="@+id/videoView_preview"    
android:layout_width="wrap_content"    
android:layout_height="wrap_content" />

java代码:

videoView_preview.setVideoPath(String path):以文件路径的方式设置VideoView播放的视频源。
//void setVideoURI(Uri uri):以Uri的方式设置VideoView播放的视频源,可以是网络Uri或本地Uri。
//创建MediaController对象
MediaController mediaController = new MediaController(VideoPreviewActivity.this);        
//VideoView与MediaController建立关联        
mediaController.setMediaPlayer(videoView_preview);        videoView_preview.setMediaController(mediaController);
videoView_preview.start();//默认播放        
//让VideoView获取焦点        
videoView_preview.requestFocus();

这样就实现了一个视频的播放。

MediaController的一些常用方法:

  • boolean isShowing():当前悬浮控制栏是否显示。
  • void setMediaPlayer(MediaController.MediaPlayerControl player):设置控制的组件。
  • void setPrevNextListeners(View.OnClickListener next,View.OnClickListener prev):设置上一个视频、下一个视频的切换事件。
    通过上面的方法可以看出setMediaPlayer()并非指定的是一个VideoView,而是一个MediaPlayerControl接口,MediaPlayerControl接口内部定义了一些播放相关的播放、暂停、停止等操作,而VideoView实现了MediaPlayerControl。 默认情况下,如果不通过setPrevNextListeners()设置切换视频的监听器,MediaController是不会显示这两个按钮的。

注:如果使用该方式实现的视频播放,如果是压缩过的视频,很可能有视频某些关键帧丢失的情况导致暂停和重播出错,或者暂停后不能继续重播。这时就需要自己重写Videoview的start()方法和pause()方法,再配合seekTo方法自行实现暂停和播放。

关于videoview的更多使用方式:

videoView详解

发布了43 篇原创文章 · 获赞 22 · 访问量 5912

猜你喜欢

转载自blog.csdn.net/qq_41466437/article/details/103602942
今日推荐