做爲多媒體應用的開發者,你是否想爲媒體播放器快速開發創新AI功能?例如:java
HMS Core 6.0.0開放的多媒體管線服務(AV Pipeline Kit),幫助媒體應用開發者下降創新功能的開發難度。經過定義插件的標準接口和數據流在插件之間的流轉方式,開發者只須要按照標準接口完成插件開發,就能夠迅速構建出新型的媒體場景。android
多媒體管線服務(AV Pipeline Kit)定義了一套插件標準接口,且已經內置了對插件的數據流管理、線程管理、內存管理、消息管理等,開發者只須要實現插件的核心處理邏輯便可,無需關注線程同異步、流控、音視頻同步等邏輯。目前已預置了3個可應用在播放場景的Pipeline:視頻播放、視頻超分、聲音事件檢測,並提供Java接口供開發者使用,同時也支持開發者經過C++接口直接調用單個預置插件。若預置插件或預置Pipeline不知足使用要求,開發者能夠自定義插件、自定義Pipeline。git
下面咱們詳細描述內置的高性能視頻超分插件,穿插在視頻流的解碼和顯示流程之間,將低分辨率視頻實時轉換成高分辨率視頻,改善視頻清晰度,增長視頻細節表現力,提高用戶觀看體驗。github
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文件,添加讀取外部存儲的權限。maven
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
4. 同步工程ide
點擊工具欄中的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. 其餘注意事項
視頻超分插件的約束詳見文檔
訪問華爲多媒體管線服務官網,瞭解更多相關內容
獲取華爲多媒體管線服務開發指導文檔
華爲多媒體管線服務開源倉庫地址:GitHub、Gitee
華爲HMS Core官方論壇
解決集成問題請到Stack Overflow
點擊右上角頭像右方的關注,第一時間瞭解HMS Core最新技術~