? ? ?最近公司新需求要增加短視頻模塊致盟,公司決定使用阿里云的短視頻sdk碎税。
? ? ?阿里云應(yīng)該是業(yè)界大佬了,產(chǎn)品很完善馏锡,文檔也很規(guī)整雷蹂,但是唯一遺憾的是我可能沒有趕上最新的文檔,還是有些坑的杯道,因為官網(wǎng)目前是根據(jù)3.6.x版本的文檔匪煌。因此針對3.7.7版本未更新文檔前,根據(jù)官網(wǎng)文檔集成后要么閃退要么一直報錯的問題可以參考下,若以后官網(wǎng)文檔更新了也可以用作基本集成流程萎庭。
? ? ?那么就在文章里直接說明3.7.7版本短視頻安卓sdk的完整集成流程了霜医,這里做集成標(biāo)準(zhǔn)版的參考,其他版本其實同理的問題基本一樣驳规。
? ? ?首先肴敛,需要項目最小支持版本18, 下載對應(yīng)級別sdk(基礎(chǔ)版、標(biāo)準(zhǔn)版达舒、專業(yè)版)值朋,官網(wǎng)下載地址
我這里是以標(biāo)準(zhǔn)版為例,其余版本同理巩搏,明顯可見與官網(wǎng)文檔結(jié)構(gòu)不同的是多了一個AliyunVideoCommon的包昨登,等下會用到。
步驟一:導(dǎo)入文件
官網(wǎng)是按視頻錄制贯底、視頻裁剪丰辣、視頻編輯三大模塊分別導(dǎo)入的,我這里則同時導(dǎo)入了(需要集成基礎(chǔ)版的同學(xué)不必這么集成禽捆,可以根據(jù)官網(wǎng)一步步來笙什,因為編輯模塊用不到)。
1.將這些選中狀態(tài)的文件一并復(fù)制到項目根目錄下:
2.導(dǎo)入.so文件
將app/src/main/jniLibs文件夾下的.so文件胚想,拷貝到工程下指定的的so庫中琐凭。(若不需要專業(yè)版面部識別功能,去掉libAliFaceAREngine.so和libFaceAREngine.so.so)
步驟3:配置gradle
1.引入模塊
將下列代碼復(fù)制到項目的 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和功能實現(xiàn)模塊
include ':AliyunImport:import_demo'//錄制、編輯牙躺、裁剪的設(shè)置ui
2.添加配置文件
由于Demo中所依賴的一些第三方開源庫愁憔、sdk版本等配置,是通過thirdparty-lib中的配置文件config.gradle做統(tǒng)一管理的孽拷,以需要引入該文件吨掌。
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.添加權(quán)限
<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包嗎炼幔?如果你按照官網(wǎng)的來激蹲,那么同步gradle的時候就會出現(xiàn)如下情況:
提示說AliyunSVideoBase模塊里面依賴了AliyunVideoCommon模塊,找不到江掩,所以我們需要新增第一步:在官網(wǎng)的引入模塊代碼上加入這個包的引入:
include ':AliyunVideoCommon'
編譯運行学辱,終于是找到這個包了乘瓤,但是又新增了一個錯誤:
找不到這里面的依賴包,具體因該是短信方面的策泣,這里我對比demo找了很久終于發(fā)現(xiàn)需要在項目級的build.gradle中新增如下兩句代碼:
為了方便大家復(fù)制衙傀,我拿下來:
maven { url"http://maven.aliyun.com/nexus/content/repositories/releases" }
至此,某些同學(xué)運行時會出現(xiàn)以下情況萨咕,但并不影響统抬,此時項目已經(jīng)可以正常運行了。
三大模塊之錄制
錄制需要camera權(quán)限和存儲權(quán)限危队,為保證6.0以上機(jī)器可以正確使用您需要申請動態(tài)權(quán)限聪建,您如果出現(xiàn)界面黑屏或者其他異常情況,請務(wù)必保證您擁有權(quán)限茫陆。
public void startRecord(View view) {
? ? ? ? AliyunSnapVideoParam recordParam = new AliyunSnapVideoParam.Builder() .build();
? ? ? ? AlivcSvideoRecordActivity.startRecord(this, recordParam);
? ? }
注冊一個錄制完成之后的跳轉(zhuǎn)Activity金麸,使用時如果需要在錄制完成之后跳自定義的頁面,可以在AliyunSvideoActionConfig中注冊簿盅。
//錄制完成默認(rèn)進(jìn)入編輯頁面
AliyunSvideoActionConfig.getInstance().registerRecordFinishActivity("com.aliyun.demo.editor.EditorActivity");
三大模塊之裁剪
裁剪需要存儲權(quán)限挥下,為保證6.0以上機(jī)器可以正確使用您需要申請動態(tài)權(quán)限,您如果出現(xiàn)界面黑屏或者其他異常情況桨醋,請務(wù)必保證您擁有權(quán)限棚瘟。
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();
? ? ? ? ? }
? ? ? }
? }
注冊一個裁剪完成之后的跳轉(zhuǎn)Activity,使用時如果需要在裁剪完成之后跳自定義的頁面喜最,可以在AliyunSvideoActionConfig中注冊:
//默認(rèn)裁剪完成返回上個頁面
AliyunSvideoActionConfig.getInstance().registerCropFinishActivity(null);
三大模塊之編輯
首先說一下:編輯模塊是標(biāo)準(zhǔn)版和專業(yè)版才有的偎蘸,標(biāo)準(zhǔn)版也只有部分功能,基礎(chǔ)版就不需要做這個模塊了哦
1.將編輯時需要的資源文件(特效瞬内、濾鏡迷雪、水印等)復(fù)制到項目的assets目錄下
然后初始化Application的oncreate方法,創(chuàng)建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指定創(chuàng)建的Application:
如果按照官網(wǎng)的基本使用方法遂鹊,則會遇到第三個坑振乏,新版本根本沒有這個類了
于是繼續(xù)對比demo蔗包,發(fā)現(xiàn)demo中已經(jīng)棄用了這句代碼秉扑,而是使用如下代碼:
AlivcSvideoEditParamparam = new AlivcSvideoEditParam.Build().build();
com.aliyun.demo.importer.MediaActivity.startImport(MainActivity.this, param);
注冊一個編輯合成之后的跳轉(zhuǎn)Activity酌畜,使用時如果需要在編輯合成完成之后跳自定義的發(fā)布頁面擅这,可以在AliyunSvideoActionConfig中注冊狞谱。
//編輯完成后跳轉(zhuǎn)上傳頁面
AliyunSvideoActionConfig.getInstance().registerEditFinishActivity("com.aliyun.demo.publish.UploadActivity");
至此剃幌。文檔更新中出現(xiàn)的三個坑的解決方案已經(jīng)介紹完畢包斑,如果官網(wǎng)文檔更新了就作為一次短暫的記錄吧!