GSYVideoPlayer是一款采用了IJKPlayer、Media3(EXOPlayer)、MediaPlayer、AliPlayer等四种播放器内核的本地视频播放器,支持弹幕、滤镜、广告等多项功能。而且作为全能播放器,MP4、AVI、WMV、FLV、MKV通吃,RTSP、HLS、RTMP、HTTP、HTTPS、MPEG、Concat这些流媒体协议全都支持,你能想到的视频格式,它基本都能播。

缓存:边播边缓存,使用了AndroidVideoCache;Media3(ExoPlayer)使用SimpleCache。
协议:h263\4\5、Https、concat、rtsp、hls、rtmp、crypto、mpeg等等。(ijk模式格式支持)
滤镜:简单滤镜(马赛克、黑白、色彩过滤、高斯、模糊、模糊等等20多种)、动画、(水印、画面多重播放等)。
帧图:视频第一帧、视频帧截图功能、播放器 UI 组合截图功能,视频生成gif功能。
播放:列表播放、列表连续播放、重力旋转与手动旋转、视频本身rotation旋转属性、快播和慢播、网络视频加载速度。
画面:调整显示比例:默认、16:9、4:3、填充;播放时旋转画面角度(0,90,180,270);镜像旋转。
内核:IJKPlayer、Media3(EXOPlayer)、MediaPlayer、AliPlayer切换、自定义内核
布局:全屏与非全屏两套布局切换、没有任何操作控件的纯播放支持、弹幕功能、继承自定义任何布局。
播放:单例播放、多个同时播放、视频列表滑动自动播放、列表切换详情页面无缝播放。
窗口:小窗口、多窗体下(包括桌面)的小窗口播放。
广告:片头广告、跳过广告支持、中间插入广告功能。
字幕:支持通用外挂字幕 Overlay,SRT/WebVTT 可跨 IJK、Media3(EXOPlayer)、MediaPlayer 等内核使用;Media3 内嵌字幕可桥接到同一套 UI。

分层架构,播放内核层、Manager层、渲染层、UI层,各管各的,职责清晰,想扩展啥功能直接加模块就行。
内存管理和性能都做了大幅优化。还支持首屏秒开、预加载关键帧、多分辨率切换,这些在实际项目里都是刚需。
GSYVideoPlayer提供了三种播放器控件,分别是NormalGSYVideoPlayer、GSYADVideoPlayer和ListGSYVideoPlayer,它们在App代码中的用法分别说明如下:
1、普通播放器NormalGSYVideoPlayer
NormalGSYVideoPlayer用来播放单个视频文件,在XML文件中放置该控件的代码如下所示:
<com.shuyu.gsyvideoplayer.video.NormalGSYVideoPlayer
android:id="@+id/video_player"
android:layout_width="match_parent"
android:layout_height="300dp" />
2、广告播放器GSYADVideoPlayer
GSYADVideoPlayer用来播放视频文件的片头广告,注意该控件要和NormalGSYVideoPlayer搭配使用。在XML文件中放置该控件的代码如下所示:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.shuyu.gsyvideoplayer.video.NormalGSYVideoPlayer
android:id="@+id/detail_player"
android:layout_width="match_parent"
android:layout_height="300dp" />
<com.shuyu.gsyvideoplayer.video.GSYADVideoPlayer
android:id="@+id/ad_player"
android:layout_width="match_parent"
android:layout_height="300dp"
android:visibility="gone" />
</RelativeLayout>
3、列表播放器ListGSYVideoPlayer
ListGSYVideoPlayer用来播放在时间上按顺序排成列表的若干视频文件,在XML文件中放置该控件的代码如下所示:
<com.shuyu.gsyvideoplayer.video.ListGSYVideoPlayer
android:id="@+id/detail_player"
android:layout_width="match_parent"
android:layout_height="300dp" />
然后运行测试App,观察NormalGSYVideoPlayer播放网络视频的效果如下图所示:

因为NormalGSYVideoPlayer的播放内核基于IJKPlayer、EXOPlayer和AliPlayer,默认就支持HLS、RTMP等直播链接,所以无需改动代码,只要把视频地址换成以m3u8结尾的HLS链接,或者以rtmp开头的RTMP链接,即可让NormalGSYVideoPlayer播放直播内容。利用NormalGSYVideoPlayer播放直播视频的效果图如下所示:
