欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-14 15:11:41
...

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详解

相关标签: android相关