Android视频播放: VideoView播放视频(三)
16lz
2021-01-23
VideoView的API:
http://developer.android.com/intl/zh-cn/reference/android/widget/VideoView.html
在来看看它的继承关系 :
java.lang.Object ↳ android.view.View ↳ android.view.SurfaceView ↳ android.widget.VideoView
Added in API level 1
继承自SurfaceView;
上一篇: 想用SurfaceView+MediaPlayer播放视频, 调用起来太麻烦, VideoView就对其做了封装, 很明显, 它解决了这个问题,
先上一张效果图 :
如果你只需要一个简单的播放视频版本:
xml布局文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="shibin.com.videoviewdemo.MainActivity"> <VideoView android:id="@+id/videoview" android:layout_width="match_parent" android:layout_height="match_parent"/>LinearLayout>
Java代码:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mVideoView = (VideoView) findViewById(R.id.videoview); mVideoView.setVideoURI(Uri.parse("视频路径")); mVideoView.start(); }
哈哈, 三行代码完事儿了:
这里给一个视频的测试路径 :
http://ht-mobile.cdn.turner.com/nba/big/teams/kings/2014/12/12/HollinsGlassmov-3462827_8382664.mp4
如果你想实现更多的功能, 来看看它的其他API :
//监听是否准备好 mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { //这里可以做一些播放前的操作, 例如取消加载动画之类的 } }); //播放完的监听 mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { //播放完的操作, 例如可以重播 mp.start(); //或者显示一些其他的视频播放列表 } }); //错误信息的监听 mVideoView.setOnErrorListener(new MediaPlayer.OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { //默认return false, 会弹出一个视频错误的对话框, 可以return true; return false; } }); //一些乱七八糟信息的监听 mVideoView.setOnInfoListener(new MediaPlayer.OnInfoListener() { @Override public boolean onInfo(MediaPlayer mp, int what, int extra) { // * {@link #MEDIA_INFO_UNKNOWN} -- 找不到视频 // * {@link #MEDIA_INFO_VIDEO_TRACK_LAGGING} // * {@link #MEDIA_INFO_VIDEO_RENDERING_START} // * {@link #MEDIA_INFO_BUFFERING_START} -- 缓冲开始 // * {@link #MEDIA_INFO_BUFFERING_END} -- 缓冲结束 // * MEDIA_INFO_NETWORK_BANDWIDTH (703)
- // * bandwidth information is available (as extra
kbps) // * {@link #MEDIA_INFO_BAD_INTERLEAVING} // * {@link #MEDIA_INFO_NOT_SEEKABLE} // * {@link #MEDIA_INFO_METADATA_UPDATE} // * {@link #MEDIA_INFO_UNSUPPORTED_SUBTITLE} // * {@link #MEDIA_INFO_SUBTITLE_TIMED_OUT} /** * 通过what去判断, 可以做相应的操作 */ return false; } }); //设置视频播放路径, 两种方法效果都是一样的,setVideoPath( )背后还是走setVideoURI( ) mVideoView.setVideoPath("xxx"); mVideoView.setVideoURI(Uri.parse("xxx")); //开始播放 mVideoView.start(); //暂停 mVideoView.pause(); //停止 mVideoView.stopPlayback(); //获取视频的总时长 mVideoView.getDuration(); //当前播放视频的位置 mVideoView.getCurrentPosition(); //视频缓存的百分比 mVideoView.getBufferPercentage(); //获取播放状态 mVideoView.isPlaying();
他基本上重写了MediaPlayer的大部分API, 调用方法也类似, 如果你会用MediaPlayer, 那么VideoView使用起来也会得心应手
PS: 有些API 的调用需要等到视频播放之后才会有效, 例如: 例如获取视频播放时长, 获取缓冲百分比,,,,
还有, 记得加上网络访问权限
总结: 它的优点很明显, 调用非常方便,
当然缺点也有的: 比如播放加载时候过长; 在比如: 如果你想要把它放在一个可以滑动的列表中, 见鬼去吧! 滑动的时候可能导致屏幕渲染变黑的问题~~
当然, 这个问题会在后面的文章中被解决.
更多相关文章
- Android短视频开发
- 视频专辑: 善知堂android 4.0.3 就业视频教程
- 视频教程-Android Material Design 新控件-Android
- eclipse android开发环境 bug CDT包含路径名无法修改(JNI开发使用
- Android获取存储设备挂载路径
- 全家桶!阿里P8大佬熬夜15天,把所有Android第三方库整理成了PDF,附第
- android环境搭建及改变默认avd路径
- 3G Android智能手机视频预览万里
- 最新Android开发视频教程(共6章)Android Studio教程(2017-2018)