实现:
可以调整大小位置,有进度条
没WIFI不会加载,有WIFI会自动加载 待完善~
播放器选择
一、MediaPlayer
原生的Android系统视频以及音频播放器
二、VideoView
将MediaPlayer,SurfaceView封装在一起的VideoView
以上两者都只是使用硬解播放,基本上只支持本地和HTTP协议的视频播放,扩展性都较差,只适合简单的视频播放需求
三、ExoPlayer
谷歌公司的开源了播放器项目,提供了更好的扩展性和定制能力,并加入了对DASH和HLS等直播协议的支持,但也只支持硬码,如果项目中只需要支持对H264格式的视频播放,以及流媒体协议比较常规(比如HTTP,HLS),基于ExoPlayer定制也是不错的选择
四、ijkplayer
Bilibili公司开源的播放器实现,整合了FFMpeg, ExoPlayer, MediaPlayer等多种实现,提供了类似于MediaPlayer的API,可以实现软硬解码自由切换,自定义TextureView实现,同时得益于FFMpeg的能力,也能支持多种流媒体协议(RTSP,RTMP,HLS等),多种视频编码格式(h264, mpeg4, mjpeg),具有很高的灵活性,可以定制实现自己特色的播放器(比如支持视频缩放,视频翻转等)
五 其他开源的组件
如Vitamio,VDPlayerSDK
视频播放的流程
常规的视频播放分为传输,解封装,解码,绘制四个步骤,以下按播放网站上(HTTP)的mp4文件为例:
VideoView的使用:
1 xml中
<VideoView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
2 java中
private VideoView videoView;
videoView=itemView.findViewById(R.id.video_view);
//加载本地视频
videoView.setVideoPath("");
//加载网络视频
videoView.setVideoURI(Uri.parse("http://t.cn/RYqnBvs"));//retrofitUtil.video_urls[0]
videoView.start();
3 Manifest.xml中
<!-- 允许程序打开网络套接字 -->
<uses-permission android:name="android.permission.INTERNET" />
4 添加控制器
可以实现播放,暂停,倒带快进,进度条移动等功能
MediaController controller = new MediaController (context);
// VideoView绑定控制器
videoView.setMediaController(controller);