FFmpeg開發筆記(五十二)移動端的國產影片播放器GSYVideoPlayer

aqi00發表於2024-09-08
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開發知識參見《FFmpeg開發實戰:從零基礎到短影片上線》一書。


相關文章