媒體應用視訊超分AI神器!360P視訊一鍵轉換HD

華為HMSCore發表於2021-08-04

作為多媒體應用的開發者,你是否想為媒體播放器快速開發創新AI功能?例如:

  • 在播放低畫質視訊過程中對其進行逐幀超分
  • 讓滿屏飄飛的彈幕自動繞過畫面的主體人物

HMS Core 6.0.0開放的多媒體管線服務(AV Pipeline Kit),幫助媒體應用開發者降低創新功能的開發難度。通過定義外掛的標準介面和資料流在外掛之間的流轉方式,開發者只需要按照標準介面完成外掛開發,就可以迅速構建出新型的媒體場景。

多媒體管線服務(AV Pipeline Kit)定義了一套外掛標準介面,且已經內建了對外掛的資料流管理、執行緒管理、記憶體管理、訊息管理等,開發者只需要實現外掛的核心處理邏輯即可,無需關注執行緒同非同步、流控、音視訊同步等邏輯。目前已預置了3個可應用在播放場景的Pipeline:視訊播放、視訊超分、聲音事件檢測,並提供Java介面供開發者使用,同時也支援開發者通過C++介面直接呼叫單個預置外掛。若預置外掛或預置Pipeline不滿足使用要求,開發者可以自定義外掛、自定義Pipeline。

技術方案

視訊超分

下面我們詳細描述內建的高效能視訊超分外掛,穿插在視訊流的解碼和顯示流程之間,將低解析度視訊實時轉換成高解析度視訊,改善視訊清晰度,增加視訊細節表現力,提升使用者觀看體驗。

開發準備

1. 新建Android Studio工程,修改工程級build.gradle檔案如下
在“allprojects > repositories”裡面增加Maven倉地址。

allprojects {
    repositories {
       google()
        jcenter()
        maven {url 'https://developer.huawei.com/repo/'}
    }
}

2. 修改專案級build.gradle檔案如下
targetSdkVersion設為28;並在dependencies中新增編譯依賴。

dependencies {
    implementation 'com.huawei.hms:avpipelinesdk:6.0.0.302'
    implementation 'com.huawei.hms:avpipeline-aidl:6.0.0.302'
    implementation 'com.huawei.hms:avpipeline-fallback-base:6.0.0.302'
    implementation 'com.huawei.hms:avpipeline-fallback-cvfoundry:6.0.0.302'
}

3. 配置manifest
修改AndroidManifest.xml檔案,新增讀取外部儲存的許可權。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

4. 同步工程

點選工具欄中的gradle同步圖示,完成“build.gradle”檔案的同步,將相關依賴下載到本地。

開發步驟

詳細示例程式碼請參見GitHub

1. 動態申請儲存許可權

String[] permissionLists = {
        Manifest.permission.READ_EXTERNAL_STORAGE 
};
int requestPermissionCode = 1;
for (String permission : permissionLists) {
    if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, permissionLists, requestPermissionCode);
    }
}

2. 初始化AV Pipeline框架

Context context = getApplicationContext();
boolean ret = AVPLoader.initFwk(context);
if(!ret) return;

3. 建立MediaPlayer例項

播放過程的控制由該例項來完成。

MediaPlayer mPlayer = MediaPlayer.create(MediaPlayer.PLAYER_TYPE_AV);
if (mPlayer == null) return;

4. 設定graph配置檔案
AV Pipeline框架依賴於該配置檔案來編排各個外掛。此外還需要將MEDIA_ENABLE_CV的值設定為1,使能視訊超分外掛。

MediaMeta meta = new MediaMeta();
meta.setString(MediaMeta.MEDIA_GRAPH_PATH, getExternalFilesDir(null).getPath() + "/PlayerGraphCV.xml");
meta.setInt32(MediaMeta.MEDIA_ENABLE_CV, 1);
mPlayer.setParameter(meta);

5. 設定以下引數後呼叫prepare介面,啟動MediaPlayer準備工作。
若需要監聽某些事件,通過setOnPreparedListener、setOnErrorListener等介面設定回撥函式。(可選)

// 設定視訊渲染的surface
SurfaceView mSurfaceVideo = findViewById(R.id.surfaceViewup);
SurfaceHolder mVideoHolder = mSurfaceVideo.getHolder();
mVideoHolder.addCallback(new SurfaceHolder.Callback() {
    // 使用者自定義回撥函式內容,可參考codelab_視訊播放
});
mPlayer.setVideoDisplay(mVideoHolder.getSurface());
// 設定待播放媒體檔案的路徑
mPlayer.setDataSource(mFilePath);
// 若需要監聽某些事件,則還需要通過setXXXListener介面設定回撥函式
// 例如需要監聽prepare完成的事件,需進行如下設定
mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override    
    public void onPrepared(MediaPlayer mp, int param1, int param2, MediaParcel parcel) {
        // 使用者自定義回撥函式內容
    }
});
mPlayer.prepare();

6. 呼叫start開始播放

mPlayer.start();

7. 呼叫stop停止播放

mPlayer.stop();

8. 銷燬播放器

mPlayer.reset();
mPlayer.release();

9. 其他注意事項
視訊超分外掛的約束詳見文件

訪問華為多媒體管線服務官網,瞭解更多相關內容
獲取華為多媒體管線服務開發指導文件
華為多媒體管線服務開源倉庫地址GitHubGitee
華為HMS Core官方論壇
解決整合問題請到Stack Overflow

點選右上角頭像右方的關注,第一時間瞭解HMS Core最新技術~

相關文章