GSYVideoPlayer是一個國產的移動端視頻播放器,它採用了IJKPlayer、Media3(EXOPlayer)、MediaPlayer、AliPlayer等四種播放器內核,支持彈幕、濾鏡、廣告等多項功能。 GSYVideoPlayer的Github主頁為https://github.co ...
GSYVideoPlayer是一個國產的移動端視頻播放器,它採用了IJKPlayer、Media3(EXOPlayer)、MediaPlayer、AliPlayer等四種播放器內核,支持彈幕、濾鏡、廣告等多項功能。
GSYVideoPlayer的Github主頁為https://github.com/CarGuo/GSYVideoPlayer,截止2024年8月18日,該項目的Github星標數為2萬,副本數為0.42萬,這個成績算是相當不錯的了,要知道FFmpeg項目同期在Github的星標數也才4.44萬。
不過在App工程中集成GSYVideoPlayer的話,得註意環境配置以免導入失敗。具體的導入操作步驟說明如下:
一、安裝Android Studio Jellyfish
雖然GSYVideoPlayer主頁沒有說明要在哪個版本的Android Studio中導入該庫,但在實際操作中發現,即使是前兩年推出的Android Studio Dolphin(小海豚版本)都無法正常導入GSYVideoPlayer,就更別說更早的Android Studio了。
若想正常導入併成功調用GSYVideoPlayer,還需安裝較新的Android Studio,比如小水母版本的Android Studio Jellyfish。儘管小水母版本的新建App工程採用Kotlin編碼,不過GSYVideoPlayer支持Java編碼,所以仍然可以在Java代碼中調用GSYVideoPlayer。
二、修改App工程的配置
首先打開App項目的settings.gradle,在repositories節點內部補充下麵兩行倉庫配置,以便從指定倉庫拉取GSYVideoPlayer庫。
maven { url 'https://jitpack.io' }
maven { url "https://maven.aliyun.com/repository/public" }
接著打開App模塊的build.gradle,在dependencies節點內部內部補充下麵配置,表示引入9.0.0版本的GSYVideoPlayer庫。
// 支持Java
implementation 'com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-java:v9.0.0-release-jitpack'
// 支持ExoPlayer模式
implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer-exo2:v9.0.0-release-jitpack'
// 支持AliPlayer模式
implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer-aliplay:v9.0.0-release-jitpack'
// 支持arm64指令集
implementation 'com.github.CarGuo.GSYVideoPlayer:gsyVideoPlayer-arm64:v9.0.0-release-jitpack'
然後打開App模塊的AndroidManifest.xml,補充下麵的互聯網許可權配置:
<uses-permission android:name="android.permission.INTERNET" />
完成以上三處配置修改之後,才能在App代碼中使用GSYVideoPlayer的播放器控制項。
三、在App代碼中使用播放器
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" />
在XML文件中放置上述三個播放器的任意一種控制項之後,再回到Java代碼執行視頻播放操作。以NormalGSYVideoPlayer為例,通過Java播放單個視頻文件的代碼例子如下:
private static String URL_MP4 = "https://video.zohi.tv/fs/transcode/20240520/8cc/355193-1716184798-transv.mp4";
private NormalGSYVideoPlayer video_player;
private OrientationUtils orientationUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple_player);
video_player = findViewById(R.id.video_player);
// 設置旋轉
orientationUtils = new OrientationUtils(this, video_player);
// 設置全屏按鍵功能,這是使用的是選擇屏幕,而不是全屏
video_player.getFullscreenButton().setOnClickListener(v -> {
// 不需要屏幕旋轉,還需要設置 setNeedOrientationUtils(false)
orientationUtils.resolveByClick();
});
// 不需要屏幕旋轉
video_player.setNeedOrientationUtils(false);
findViewById(R.id.btn_play_mp4).setOnClickListener(v -> {
video_player.setUp(URL_MP4, true, "數字中國峰會迎賓曲");
});
}
然後運行測試App,觀察NormalGSYVideoPlayer播放網路視頻的效果如下圖所示:
因為NormalGSYVideoPlayer的播放內核基於IJKPlayer、EXOPlayer和AliPlayer,預設就支持HLS、RTMP等直播鏈接,所以無需改動代碼,只要把視頻地址換成以m3u8結尾的HLS鏈接,或者以rtmp開頭的RTMP鏈接,即可讓NormalGSYVideoPlayer播放直播內容。利用NormalGSYVideoPlayer播放直播視頻的效果圖如下所示:
更多詳細的FFmpeg開發知識參見