FFmpeg開發筆記(六十)使用國產的ijkplayer播放器觀看網路影片

aqi00發表於2024-10-26
ijkplayer是Bilibili公司(簡稱B站)基於FFmpeg3.4研發並開源的國產播放器,它可執行於Android和iOS系統,既支援播放本地影片檔案,也支援播放網路上的流媒體連結。

之前的文章《Linux編譯ijkplayer的Android平臺so庫》介紹瞭如何編譯獲得App工程所需ijkplayer的so檔案,接下來還要把官方的案例工程匯入到新版的Android Studio,才能開展後續的App除錯和開發工作。
這裡以Android Studio Dolphin(小海豚版本)為例,介紹如何在App工程中匯入並使用ijkplayer庫,詳細的操作步驟如下。

一、修改案例工程的Gradle版本

開啟案例工程的gradle/wrapper/gradle-wrapper.properties,把下面這行配置

distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip

改為下面這行配置

distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-bin.zip

也就是把Gradle版本版本從2.14.1升級到5.4.1。

二、修改專案級別的build.gradle

開啟專案級別的build.gradle,依次完成以下三處修改。
1、把下面這行jcenter配置

jcenter()

替換為下列的倉庫配置

gradlePluginPortal()
google()
mavenCentral()
// 以下四行新增阿里雲的倉庫地址,方便國內開發者下載相關外掛
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'https://maven.aliyun.com/repository/google'}
maven { url 'https://maven.aliyun.com/repository/gradle-plugin'}
maven { url 'https://maven.aliyun.com/repository/public'}
maven { url 'https://jitpack.io' }

2、把下面幾行的Gradle版本資訊

classpath 'com.android.tools.build:gradle:2.1.3'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7'

替換為下面的Gradle版本資訊

classpath 'com.android.tools.build:gradle:3.2.0'

3、把下面幾行的SDK版本資訊

compileSdkVersion = 25
buildToolsVersion = "25.0.3"
targetSdkVersion = 25

替換為下面的SDK版本資訊

compileSdkVersion = 28
buildToolsVersion = "28.0.3"
targetSdkVersion = 28

三、修改模組級別的build.gradle

開啟各模組的build.gradle,依次完成以下三處修改。
1、把各模組build.gradle裡面所有的compile替換為implementation
2、把各模組build.gradle裡面所有的“minSdkVersion 9”替換為“minSdkVersion 21”
3、單獨開啟ijkplayer-example模組的build.gradle,先把productFlavors和幾行all32Compile與all64Compile統統註釋掉,再把下面的導包配置

compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:preference-v7:23.0.1'
compile 'com.android.support:support-annotations:23.0.1'

替換為下面的導包配置,也就是把support庫升級到28.0.0版本。

implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:preference-v7:28.0.0'
implementation 'com.android.support:support-annotations:28.0.0'

四、匯入編譯好的so檔案

把根據《Linux編譯ijkplayer的Android平臺so庫》編譯出來的三個so檔案放到ijkplayer-example模組的src/main/jniLibs/arm64-v8a目錄下,這樣Android Studio會在編譯時自動載入這裡的so檔案。

五、新增直播連結的播放程式碼

開啟ijkplayer-example模組的FileExplorerActivity.java,在onCreate方法末尾補充下面的播放程式碼。

final  Context context = this;
FrameLayout fr_body = findViewById(R.id.body);
LinearLayout ll_body = new LinearLayout(context);
ll_body.setOrientation(LinearLayout.VERTICAL);
fr_body.addView(ll_body);
final EditText et_url = new EditText(context);
et_url.setText("http://124.70.xxx.xxx:8080/live/test/hls.m3u8");
ll_body.addView(et_url);
Button btn_go = new Button(context);
btn_go.setText("開始播放");
btn_go.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        VideoActivity.intentTo(context, et_url.getText().toString(), "測試影片");
    }
});
ll_body.addView(btn_go);

以上五個步驟的修改之後,編譯執行ijkplayer-example模組的App工程,在真機上看到的ijkplayer播放介面如下圖所示。

可見透過ijkplayer成功在案例App上觀看網路直播地址。

更多詳細的FFmpeg開發知識參見《FFmpeg開發實戰:從零基礎到短影片上線》一書。

相關文章