溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android視頻編輯SDK--RDVECore來自銳動的無UI,高度抽象化API

發布時間:2020-08-10 20:02:17 來源:ITPUB博客 閱讀:294 作者:菱綠 欄目:移動開發
RDVECore功能概述
RDVECore是銳動推出的無UI,高度抽象化API的視頻編輯SDK,支持以下功能:

1.1 
豐富的編輯功能
RDVECore包含了豐富的基礎功能,對于編輯中的視頻、圖片、音樂有各種
處理方式,并且可以根據實際的業務需求,進行搭配組合,所有處理都可以精確
到毫秒級,達到最專業的的要求,主要功能如下:
· MV MV根據配置資源進行混合以及動畫,增強短視頻效果
· 濾鏡 RDVEUISdk本身提供豐富的濾鏡效果讓開發者進行選擇,同時用戶還可以根據自己的需求進行濾鏡擴展。
· 字幕特效 字幕特效支持在指定位置,指定時間段顯示;實時預覽效果
· 配音、配樂 支持指定時間段添加配音; 支持配音、配樂與視頻原音比例調節; 支持本地添加更多配樂
· 截取、分割 支持毫秒級截取、分割視頻; 支持快速預覽截取、分割后視頻
· 調速 調整視頻的播放速度,快放或者慢放
· 轉場 支持多種轉場; 支持隨機轉場、指定轉場時長等擴展設置
· 其它編輯功能 支持多種比例裁剪; 支持90、180、270度旋轉視頻畫面; 支持左右鏡像、上下鏡像; 支持輸出比例調整;

1.2 
完善的視頻拍攝功能
· 實時美顏 可以在拍攝過程中實時人臉美膚,提亮、美白等效果,達到人臉美化,同時支持美化程度的調節
· 人臉貼紙/掛件
        支持人臉識別及貼紙/掛件顯示
· 拍攝自由定義 RDVECore在拍攝過程中,可以根據具體的錄制需求,進行自由化的設定,擁有更佳優異的拍攝錄制效果。
多段拍攝 一個視頻可以分多段次拍攝
攝像頭切換 前、后攝像頭自由切換,中間無卡頓
多比例支持 支持1:1 、9:16、16:9多個比例錄制
變焦、對焦 通過相應手勢可以縮放攝像頭采集畫面及清晰度(依賴硬件支持)
· 濾鏡
在拍攝過程中,除了實時美顏,同時還可以實時添加濾鏡效果,RDVEUISdk本身提供豐富的濾鏡效果讓開發者進行選擇,同時用戶還可以根據自己的需求進行濾鏡擴展。
· 照片 當前攝像頭畫面保存到圖片
RDVERDVECore架構圖:
Android視頻編輯SDK--RDVECore來自銳動的無UI,高度抽象化API


RDVECore簡要流程圖:
Android視頻編輯SDK--RDVECore來自銳動的無UI,高度抽象化API



集成步驟
2.1 運行環境
l Android 4.3api 18)以上;
處理器:雙核 1GHz以上CPU(目前只支持ARM CPU, X86、MIPS暫不支持);推薦四核1.2GHz以上CPU
內存:1 GB以上;

2.2 注冊申請AppKeyAPPSECRET

1、 登錄http://www.rdsdk.com 注冊用戶
2、 登錄注冊好的用戶
3、 進入視頻云管理 點擊(新增)獲取應用的 appkey 、appsecret

2.3 
下載并導入SDK
2.3.1 Android Studio 導入rdVECore模塊
點擊File--->Import Module,選擇路徑,填寫“Module name”,默認為rdVECore,點擊finish。
Android視頻編輯SDK--RDVECore來自銳動的無UI,高度抽象化API

Android視頻編輯SDK--RDVECore來自銳動的無UI,高度抽象化API


之后點擊File--->Project Structure,選擇你自己工程的Module,在Flavors選項卡中設置Min Sdk Version 不低于18Android視頻編輯SDK--RDVECore來自銳動的無UI,高度抽象化API


然后切換到Dependencies選項卡并點擊右側“+”號在彈出的下拉菜單選擇Module Dependency點擊。
Android視頻編輯SDK--RDVECore來自銳動的無UI,高度抽象化API


彈出的小窗口中選擇SDK相關的Modules,OK
Android視頻編輯SDK--RDVECore來自銳動的無UI,高度抽象化API


添加成功后點擊Project Structure設置界面的“OK”完成導入工作。
Android視頻編輯SDK--RDVECore來自銳動的無UI,高度抽象化API



關于集成NDK SO庫引發沖突解決辦法如下:
步驟一:sdk library模塊過濾
Android視頻編輯SDK--RDVECore來自銳動的無UI,高度抽象化API


步驟二:application模塊中過濾
編輯SDK NDK包含以下架構的SO庫:
· armeabi-v7a
建議在Module的build.gradle文件中使用NDK的“abiFilter”配置,設置支持的SO庫架構。
如果在添加“abiFilter”之后Android Studio出現以下提示:
NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin.
則在項目根目錄的gradle.properties文件中添加:
android.useDeprecatedNdk=true
在集成NDK SO庫時,請注意只保留支持的架構SO庫,參考截圖配置
Android視頻編輯SDK--RDVECore來自銳動的無UI,高度抽象化API


關于gradle插件
gradle插件請使用版本2.3.x
可參考demo中使用的版本
Android視頻編輯SDK--RDVECore來自銳動的無UI,高度抽象化API



2.3.2 準備AndroidManifest.xml  (權限)
添加權限:
Android視頻編輯SDK--RDVECore來自銳動的無UI,高度抽象化API



2.3.3 調用初始化API
RdVECore.initialize(context, rootPath, appKey, appSecret, debuggable);
Parameters:
context 應用上下文
rootPath 自定義的工作目錄
appkey 在平臺申請的Appkey
appScrect 在平臺申請的appScrect
debuggable是否調試
初始化成功后才能正常使用其他功能接口,還要注意系統權限的申請,否則SDK在系統api級別 >= 23android 6.0+)下不能正常使用
Android視頻編輯SDK--RDVECore來自銳動的無UI,高度抽象化API



2.4 錄制視頻
2.4.1 錄制初始化參數
// 畫面打開之前配置錄制參數(可包含攝像頭、輸出尺寸、幀碼率、是否美顏等)
// 通過此方法設置攝像頭方向、是否美顏只在onPrepare(RelativeLayout,listener)之前調用有效
//初始化之后設置前后置方向使用
RecorderCore.switchCamera()、RecorderCore.enableBeautify(bEnableBeautify)
RecorderConfig config = new RecorderConfig()
.setVideoSize(width, height) //設置錄制視頻輸出寬高
.setVideoFrameRate(frameRate) //設置錄制視頻幀率
.setVideoBitrate(bitrate) //設置錄制視頻碼率
.setEnableFront(isFrontCamera) //設置錄制視頻碼率
.setEnableBeautify(canBeautiy) //設置是否啟用美顏
.setBeauitifyLevel(level) //設置美顏級別
.setEnableFrontMirror(enableFrontMirror) //設置錄制時是否鏡像
.setEnableAutoFocus(true) //設置是否自動對焦
.setEnableAutoFocusRecording(false)//設置錄制時是否自動對焦
//設置音頻編碼參數{numChannels - 聲音數sampleRate - 采樣率bitRate - 碼率(bps)}
.setAudioEncodingParameters(numChannels, sampleRate, bitRate) ;
RecorderCore.setEncoderConfig(config); //設置配置

2.4.2 初始化錄制界面
/**
* 準備錄制
*
@param parentLayout
*            用于顯示攝像頭的父布局
@param listener
*            錄制回調消息Listener
*/
RecorderCore.onPrepare(parentLayout, IRecorderCallBackShot listener);
一般用在Activity.onStart()

2.4.3 關于錄制結束時的釋放清理操作
用于響應Activity.onDestroy()
  RecorderCore.onExit(this);

2.4.4 錄制
//開始錄制   
RecorderCore.startRecord(localSaveMp4File);
//結束錄制
RecorderCore.stopRecord();
//是否正在錄制...
RecorderCore.isRecording();

2.4.5 關于回調接口
/*
打開攝像頭成功并且開始預覽界面
* @param result
*            返回值 >={@link ResultConstants#SUCCESS} 代表成功,否則為失敗
* @param resultInfo
*            具體返回消息
*/
IRecorderCallBackShot.onPrepared(int result, String resultInfo);
/*
響應錄制開始
* @param result
*            返回值 >={@link ResultConstants#SUCCESS} 代表成功,否則為失敗
* @param resultInfo
*            具體返回消息
*/
IRecorderCallBackShot.onRecordBegin(int result, String resultInfo);
/*
* 響應獲取已錄制信息
@param position 已錄制時間 (ms)
@param recordFPS 錄制幀率
@param delayed 延遲時間
*/
IRecorderCallBackShot.onGetRecordStatus(int position, int recordFPS, int delayed);
/**
* 響應直播結束
@param result
*            返回值 >={@link ResultConstants#SUCCESS} 代表成功,否則為失敗
@param resultInfo
*/
IRecorderCallBackShot.onRecordEnd(int result, String resultInfo);
/**
* 錄制出現錯誤
@param result
*            返回值
@param resultInfo
*            具體返回消息
*/
IRecorderCallBackShot.onRecordFailed(int result, String resultInfo);
        /**
         * 響應攝像頭打開信息
         * @param nResult
         *            返回值 >={@link ResultConstants#SUCCESS} 代表成功,否則為失敗
         * @param strResultInfo
         *            具體返回消息
         */
IRecorderCallBackShot.onCamera(int result, String resultInfo);
/**
* 保存當前畫面回調
* @param nResult =ResultConstants.SUCCESS
* @param picturePath圖片本地路徑
*/
IRecorderCallBackShot.onScreenShot(int result,String picturePath);

2.4.6 
攝像頭相關(必須在onprepare回調之后才有效)
//聚焦
RecorderCore.cameraAutoFocus();
// 是否為前攝像像頭
RecorderCore.isFaceFront();
// 切換攝像頭
RecorderCore.switchCamera();

2.4.7 閃光燈(必須在onprepare回調之后才有效)
//獲取閃光燈狀態
RecorderCore.getFlashMode();
//打開閃光燈
RecorderCore.setFlashMode(boolean enable);

2.4.8 
美顏
//是否支持美顏
RecorderCore.isBeautifyEnabled();
//打開或關閉美顏
RecorderCore.enableBeautify(boolean enableBeautify);

2.4.9 截圖 (必須在listener.onPrepared回調之后才有效)
/**
當前畫面截圖
* @param isFocus 是否聚焦
* @param path截圖文件路徑
* @param width截圖寬度
* @param height截圖高度
*/
RecorderCore.screenshot(isFocus,path, 360, 640, 50);
/**
響應保存截圖
* @param nResult
*            返回值 =={@link ResultConstants#SUCCESS} 代表成功,否則為失敗
* @param msg
*
*/
IRecorderCallBackShot.onScreenShot(int nResult, String path);

2.4.10 靜音
RecorderCore.setMute(isMute);

2.4.11 
濾鏡
//獲取支持的濾鏡 在listener.onprepared() 回調成功之后才能獲取支持的濾鏡
effects = RecorderCore.getSupportedColorEffects();
//設置濾鏡
RecorderCore.setColorEffect(color);

2.4.12 
水印相關
//判斷水印是否注冊
RecorderCore.isOsded();
//開啟水印
RecorderCore.registerOSD(osd);
//關閉水印
RecorderCore.registerOSD(null);
public class CameraWatermarkBuilder extends VEOSDBuilder{
     //設置水印位置
     setOSDGravity(int nGravity);
     //刷新水印內容
     protected void onRefreshOSDView(View vOSD) {}
}

2.4.13 水印相關橫豎屏錄制
說明:輸出視頻的錄制方向,內部通過獲取屏幕方向得到
//開始直播錄制
第一步:鎖定屏幕當前的方向(固定輸出方向)
Android視頻編輯SDK--RDVECore來自銳動的無UI,高度抽象化API


第二步:錄制前通過設置屏幕方向的旋轉角度(獲取當前屏幕的方向0、90、180、270 ) 辨別是否橫屏錄制。
RecorderCore.setOrientation(nOrientation);


2.4.14 混音播放器

Android視頻編輯SDK--RDVECore來自銳動的無UI,高度抽象化API

(只支持播放本地音樂,支持的音頻格式mp3、mp2、 aac、 wma、 wmv、 ac3、 ogg)
此播放器支持混音功能.場景:插上耳機,傳輸一路音頻流到看直播端
player.setOnPreparedListener(listener);
player.setOnInfoListener(infolistener);
player.setOnCompletionListener(completlistener);
player.setOnErrorListener(onErrorListener);
player.prepareAsync();

2.4.15 是否開啟混音功能
//設置是否開啟混音
RecorderCore.enableMixAudio(enable);
//獲取當前是否開啟混音
RecorderCore.isEnableMixAudio();

2.4.16 設置混音占比
//設置混音占比0-100
RecorderCore.setMixFactor(factor);
//獲取當前混音占比
RecorderCore.getMixFactor();



2.5 編輯視頻2.5.1 添加播放器
布局里面添加播放器
Android視頻編輯SDK--RDVECore來自銳動的無UI,高度抽象化API

代碼里面用
@BindView(R2.id.epv_player)
VirtualVideoView mVideoPlayer;
或者
VirtualVideoView mVideoPlayer;
mVideoPlayer = (VirtualVideoView) findViewById(R.id.epv_player);
獲取mVideoPlayer 播放器對象

2.5.2 構造虛擬視頻并添加到播放器
//構造虛擬視頻
VirtualVideo mVirtualVideo
mVirtualVideo = new VirtualVideo();
//構造一個場景
Scene scene = VirtualVideo.createScene();
//給場景添加媒體(傳媒體路徑)并返回媒體對象
MediaObject mediaObject = scene.addMedia(mediaPath);
//將場景添加到虛擬視頻
mVirtualVideo.addScene(scene);
//將虛擬視頻添加到播放器
try {
    mVirtualVideo.build(mVideoPlayer);
} catch (InvalidStateException e) {
}

2.5.3 獲取視頻縮略圖
方式1:虛擬視頻對象獲取縮略圖
虛擬視頻添加場景后調用build(Context context)函數加載所有媒體,
如:
try {
    mVirtualVideo.build(mContext);
} catch (InvalidStateException e) {
    e.printStackTrace();
}
再調用boolean getSnapShot(float timeSecond,Bitmap snapshot)即可獲取對應時間點的縮略圖
其中參數timeSecond為縮略圖時間點(單位秒),snapshot為獲取縮略圖的Bitmap對象
返回值為true表示獲取成功,false為失敗
如:
mVirtualVideo.getSnapshot(1, bitmap);
獲取1秒位置的縮略圖,并把圖片繪入bitmap
方式2:通過文件獲取縮略圖
VirtualVideo.getSnapShot(
String mediaPath,   // 媒體地址
float timeSecond,   // 縮略圖時間點(單位秒)
Bitmap snapShot,   // 位圖對象
boolean isFastSeek) // 是否為快速定位


2.5.4 添加濾鏡特效
//在虛擬視頻對象添加濾鏡特效
mVirtualVideo.addEffect(
EffectType,  //特效類型
startTime,   //開始位置(單位秒)
endTime,    //結束位置(單位秒)
arg);        //其他參數(例如倒序需要傳一個倒序視頻路徑)
//添加完成后更新特效
mVirtualVideo.updateEffects(videoView);


2.5.5 
添加音樂
//在虛擬視頻添加音樂
方式一:
/**
添加音樂資源
*
* @param musicPath     音樂路徑
* @param trimStart     音樂截取開始位置(單位秒)
* @param trimEnd       音樂截取結束位置(單位秒)
* @param timelineStart 音樂在主時間線的開始位置(單位秒)
* @param timelineEnd   音樂在主時間線的結束位置(單位秒)
* @param mixFactor     音量占用比例(正常范圍0-100,超過100代表音量增益,過大會破音,比如設置20代表原音量的20%,500則為原音量增益5倍)
* @param speed         音樂速度
* @param original      是否為原音
* @return
* @throws InvalidArgumentException
*/
public VirtualVideo addMusic(String musicPath, float trimStart, float trimEnd, float timelineStart, float timelineEnd, int mixFactor, float speed, boolean original) throws InvalidArgumentException

//清除音樂
mVirtualVideo.clearMusic();
//造作完成后刷新音樂
mVirtualVideo.updateMusic(videoView);
//設置配樂音量占用比例(音量占用比例(正常范圍0-100,超過100代表音量增益,過大會破音,比如設置20代表原音量的20%,500則為原音量增益5倍,實時更改,不用調updateMusic
mVirtualVideo.setMusicMixFactor(musicMixFactor);


2.5.6 
添加水印
/**
添加水印
*
* @param watermark 水印對象
*/
public VirtualVideo addWatermark(Watermark watermark)
其中Watermark對象
//創建一個水印對象
Watermark watermark = new Watermark();
//設置水平路徑(圖片路徑)
watermark.setPath(watermarkPath);
//設置水印顯示區域(RectF 其中上下左右用0-1
watermark.setShowRect(watermarkShowRectF);
//設置開始時間(單位秒)
watermark.setStartTime(startTIme);
//設置結束時間 (單位秒)
watermark.setEndTime(endTime);


2.5.7 
視頻倒序
/**
視頻倒序
*
* @param context          上下文
* @param mediaObject      媒體對象
* @param reverseVideoPath 倒序保存路徑
* @param vc               配置類
* @param listener         倒序回調
*/
public static void ExportUtils.reverseSave(Context context, MediaObject mediaObject, String
reverseVideoPath, VideoConfig vc, final ExportListener listener)
/**
快速倒序(原視頻必須每幀都為關鍵幀)
*
* @param context          上下文
* @param mediaObject      媒體對象
* @param reverseVideoPath 倒序保存路徑
* @param listener         倒序回調
*/
public static void ExportUtils.fastReverseSave(Context context,MediaObject mediaObject, String
reverseVideoPath, final ExportListener listener)


2.5.8 
MV
第一步:注冊MV,得到MVId
MVInfo temp = RdVECore.registerMV(localPath);
第二步:設置MV
if (null != mMVFragment) {
    mVirtualVideo.setMV(mMVFragment.getCurrentMVId());
}
//是否移除MV中的聲音(切換配樂時可以移除聲音,防止兩種聲音吵雜)
mVirtualVideo.removeMVMusic(bRemoveMVMusic);


2.5.9 
完成編輯導出視頻
/**
導出視頻
* @param context     上下文
* @param filePath    保存路徑
* @param videoConfig 導出配置
* @param listener    導出回調
*/
public VirtualVideo export(Context context, String filePath, VideoConfig videoConfig,
ExportListener listener)
其中 ExportListener 為導出Listener
public interface ExportListener {
    /**
     * 導出開始回調
     */
    void onExportStart();
    /**
     * 導出進度回調
     *
     * @param progress 當前進度
     * @param max      最大進度
     * @return 返回是否繼續執行,false為終止導出
     */
    boolean onExporting(int progress, int max);
    /**
     * 導出結束回調
     *
     * @param result 結束返回int
     */
    void onExportEnd(int result);
}
導出配置VideoConfig說明如下:
/**
設置視頻分辨率
如果設置此項,則寬高比將無效
*
* @param width  視頻寬度
* @param height 視頻高度
*/
public VideoConfig setVideoSize(int width, int height)
/**
設置視頻幀率
*
* @param frameRate 幀率
*/
public VideoConfig setVideoFrameRate(int frameRate)
/**
設置碼率
*
* @param bitRate 碼率(bps)
*/
public VideoConfig setVideoEncodingBitRate(int bitRate)
/**
設置關鍵幀間隔
*
* @param interval 關鍵幀間隔(秒為單位)
*/
public VideoConfig setKeyFrameTime(int interval)
/**
設置音頻編碼參數
*
* @param numChannels 聲音數
* @param sampleRate  采樣率
* @param bitRate     碼率(bps)
*/
public void setAudioEncodingParameters(int numChannels, int sampleRate, int bitRate)
/**
設置輸出文件是否需要針對網絡優化
*
* @param optimizeForNet 輸出文件是否需要針對網絡優化
*/
public VideoConfig setOptimizeForNet(boolean optimizeForNet)
/**
設置是否使用硬件編碼
*
* @param enable ture使用硬件編碼
*/
public VideoConfig enableHWEncoder(boolean enable)
/**
設置是否使用硬件解碼
*
* @param enable ture使用硬件解碼
*/
public VideoConfig enableHWDecoder(boolean enable)
/**
* 設置音頻編碼參數
*
@param numChannels 聲音數
@param sampleRate  采樣率
@param bitRate     碼率(bps)
*/
public void setAudioEncodingParameters(int numChannels, int sampleRate, int bitRate)


2.6 打包混淆
需要在proguard.cfg文件中添加如下配置項:
-dontwarn  com.rd.**
-keep class com.rd.** { *; }
#水印
-keepclassmembers class * extends com.rd.recorder.OSDBuilder{  * ;}



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女