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的更多使用方式:
上一篇: Android中杀死所有进程
下一篇: 读取Hive中的数据写入Hbase