安卓整合阿里雲短視訊3.7.7問題記錄
最近公司新需求要增加短視訊模組,公司決定使用阿里雲的短視訊sdk。
阿里雲應該是業界大佬了,產品很完善,文件也很規整,但是唯一遺憾的是我可能沒有趕上最新的文件,還是有些坑的,因為官網目前是根據3.6.x版本的文件。因此針對 3.7.7版本 未更新文件前,根據官網文件整合後要麼閃退要麼一直報錯的問題可以參考下,若以後官網文件更新了也可以用作基本整合流程。
那麼就在文章裡直接說明3.7.7版本短視訊安卓sdk的完整整合流程了,這裡做整合 標準版 的參考,其他版本其實同理的問題基本一樣。
首先,需要專案最小支援版本18, 下載對應級別sdk(基礎版、標準版、專業版), 官網下載地址

阿里雲SDK標準版
我這裡是以標準版為例,其餘版本同理,明顯可見與官網文件結構不同的是多了一個 AliyunVideoCommon 的包,等下會用到。
步驟一:匯入檔案
官網是按視訊錄製、視訊裁剪、視訊編輯三大模組分別匯入的,我這裡則同時匯入了(需要整合基礎版的同學不必這麼整合,可以根據官網一步步來,因為編輯模組用不到)。

需要匯入的檔案(選中狀態)
1.將這些選中狀態的檔案一併複製到專案根目錄下:

複製檔案到專案根目錄
2.匯入.so檔案
將app/src/main/jniLibs資料夾下的.so檔案,拷貝到工程下指定的的so庫中。(若不需要專業版面部識別功能,去掉libAliFaceAREngine.so和libFaceAREngine.so.so)

sdk中位置

匯入專案位置(因為這裡是預設載入so檔案的位置,若需要調整自行修改)
步驟3:配置gradle
1.引入模組
將下列程式碼複製到專案的 settings.gradle檔案裡。
include ':AlivcCore' include ':AliyunSVideoBase' include ':AliyunFileDownLoader:downloadermanager' include ':AliyunSvideoMusic' include ':AliyunRecorder:record_demo' include ':AliyunCrop:crop_demo'//裁剪ui模組 include ':AliyunVideoSdk' include ':AliyunEditor:editor_demo'//編輯模組ui和功能實現模組 include ':AliyunImport:import_demo'//錄製、編輯、裁剪的設定ui
2.新增配置檔案
由於Demo中所依賴的一些第三方開源庫、sdk版本等配置,是通過thirdparty-lib中的配置檔案config.gradle做統一管理的,以需要引入該檔案。
apply from: 'thirdparty-lib/config.gradle'
將這句程式碼拷貝到工程級別的bulid.gradle中。
3.新增依賴
下面依賴的程式碼,加到您工程的主模組(一般是app)的build.gradle中的dependencies裡面。
//錄製的依賴 implementationproject(':AliyunRecorder:record_demo') implementation externalAliyunOSS //裁剪的依賴 implementation project(':AliyunCrop:crop_demo') //編輯的依賴 api project(':AliyunEditor:editor_demo') implementation project(':AliyunImport:import_demo') implementation project(':AliyunFileDownLoader:downloadermanager')
4.新增許可權
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
這裡就開始有坑點了,記得剛才說過的AliyunVideoCommon包嗎?如果你按照官網的來,那麼同步gradle的時候就會出現如下情況:

坑點1
提示說AliyunSVideoBase模組裡面依賴了AliyunVideoCommon模組,找不到,所以我們需要新增第一步:在官網的引入模組程式碼上加入這個包的引入:
include ':AliyunVideoCommon'
編譯執行,終於是找到這個包了,但是又新增了一個錯誤:

坑點2
找不到這裡面的依賴包,具體因該是簡訊方面的,這裡我對比demo找了很久終於發現需要在專案級的build.gradle中新增如下兩句程式碼:

新增程式碼位置
為了方便大家複製,我拿下來:
maven { url"http://maven.aliyun.com/nexus/content/repositories/releases" }
至此,某些同學執行時會出現以下情況,但並不影響,此時專案已經可以正常運行了。

無影響
三大模組之錄製
錄製需要camera許可權和儲存許可權,為保證6.0以上機器可以正確使用您需要申請動態許可權,您如果出現介面黑屏或者其他異常情況,請務必保證您擁有許可權。
public void startRecord(View view) { AliyunSnapVideoParam recordParam = new AliyunSnapVideoParam.Builder() .build(); AlivcSvideoRecordActivity.startRecord(this, recordParam); }
註冊一個錄製完成之後的跳轉Activity,使用時如果需要在錄製完成之後跳自定義的頁面,可以在AliyunSvideoActionConfig中註冊。
//錄製完成預設進入編輯頁面 AliyunSvideoActionConfig.getInstance().registerRecordFinishActivity("com.aliyun.demo.editor.EditorActivity");
三大模組之裁剪
裁剪需要儲存許可權,為保證6.0以上機器可以正確使用您需要申請動態許可權,您如果出現介面黑屏或者其他異常情況,請務必保證您擁有許可權。
AliyunSnapVideoParam mCropParam = new AliyunSnapVideoParam.Builder().build(); AliyunVideoCropActivity.startCropForResult(MainActivity.this,REQUEST_CROP,mCropParam);
在onActivityResult中獲取裁剪後視訊的路徑:
@Override protected voidonActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode,resultCode,data); if(requestCode == REQUEST_CROP){ if(resultCode == Activity.RESULT_OK &&data!= null){ int type = data.getIntExtra(MediaActivity.RESULT_TYPE,0); if(type== MediaActivity.RESULT_TYPE_CROP){ String path =data.getStringExtra(CropKey.RESULT_KEY_CROP_PATH); Toast.makeText(this, "檔案路徑為 "+ path + " 時長為 " +data.getLongExtra(CropKey.RESULT_KEY_DURATION,0), Toast.LENGTH_SHORT).show(); } }else if(resultCode== Activity.RESULT_CANCELED){ Toast.makeText(this,"使用者取消裁剪",Toast.LENGTH_SHORT).show(); } } }
註冊一個裁剪完成之後的跳轉Activity,使用時如果需要在裁剪完成之後跳自定義的頁面,可以在AliyunSvideoActionConfig中註冊:
//預設裁剪完成返回上個頁面 AliyunSvideoActionConfig.getInstance().registerCropFinishActivity(null);
三大模組之編輯
首先說一下:編輯模組是標準版和專業版才有的,標準版也只有部分功能,基礎版就不需要做這個模組了哦
1.將編輯時需要的資原始檔(特效、濾鏡、水印等)複製到專案的assets目錄下

新增資原始檔位置
然後初始化Application的oncreate方法,建立MyApplication繼承android.app.Application
@Override public voidonCreate() { super.onCreate(); QupaiHttpFinal.getInstance().initOkHttpFinal(); com.aliyun.vod.common.httpfinal.QupaiHttpFinal.getInstance().initOkHttpFinal(); DownloaderManager.getInstance().init(this); }
在AndroidManifest.xml指定建立的Application:

關聯自定義Application
如果按照官網的基本使用方法,則會遇到 第三個坑 ,新版本根本沒有這個類了

坑3
於是繼續對比demo,發現demo中已經棄用了這句程式碼,而是使用如下程式碼:
AlivcSvideoEditParamparam = new AlivcSvideoEditParam.Build().build(); com.aliyun.demo.importer.MediaActivity.startImport(MainActivity.this, param);
註冊一個編輯合成之後的跳轉Activity,使用時如果需要在編輯合成完成之後跳自定義的釋出頁面,可以在AliyunSvideoActionConfig中註冊。
//編輯完成後跳轉上傳頁面 AliyunSvideoActionConfig.getInstance().registerEditFinishActivity("com.aliyun.demo.publish.UploadActivity");
至此。文件更新中出現的三個坑的解決方案已經介紹完畢,如果官網文件更新了就作為一次短暫的記錄吧!