XVideo 一個能自動進行壓縮的小視訊錄製庫
阿新 • • 發佈:2019-01-27
XVideo
一個能自動進行壓縮的視訊錄製庫
關於我
特徵
支援自定義小視訊錄製時的視訊質量。
支援自定義視訊錄製的介面。
支援自定義最大錄製時長和最小錄製時長。
支援自定義屬性的視訊壓縮。
演示(請star支援)
新增Gradle依賴
1.在專案根目錄的 build.gradle 的 repositories 新增:
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
2.在主專案的 build.gradle 中增加依賴。
dependencies {
···
implementation 'com.github.xuexiangjys:XVideo:1.0.1'
}
3.進行視訊錄製儲存目錄地址的設定。
/**
* 初始化xvideo的存放路徑
*/
public static void initVideo() {
XVideo.setVideoCachePath(PathUtils.getExtDcimPath() + "/xvideo/");
// 初始化拍攝
XVideo.initialize(false, null);
}
視訊錄製
1.視訊錄製需要CAMERA
STORAGE
許可權。在Android6.0機器上需要動態獲取許可權,推薦使用XAOP進行許可權申請。
2.呼叫MediaRecorderActivity.startVideoRecorder
開始視訊錄製。
/**
* 開始錄製視訊
* @param requestCode 請求碼
*/
@Permission({PermissionConsts.CAMERA, PermissionConsts.STORAGE})
public void startVideoRecorder(int requestCode) {
MediaRecorderConfig mediaRecorderConfig = MediaRecorderConfig.newInstance();
XVideo.startVideoRecorder(this , mediaRecorderConfig, requestCode);
}
3.MediaRecorderConfig
是視訊錄製的配置物件,可自定義視訊的寬、高、時長以及質量等。
MediaRecorderConfig config = new MediaRecorderConfig.Builder()
.fullScreen(needFull) //是否全屏
.videoWidth(needFull ? 0 : Integer.valueOf(width)) //視訊的寬
.videoHeight(Integer.valueOf(height)) //視訊的高
.recordTimeMax(Integer.valueOf(maxTime)) //最大錄製時間
.recordTimeMin(Integer.valueOf(minTime)) //最小錄製時間
.maxFrameRate(Integer.valueOf(maxFrameRate)) //最大幀率
.videoBitrate(Integer.valueOf(bitrate)) //視訊位元速率
.captureThumbnailsTime(1)
.build();
視訊壓縮
使用libx264進行視訊壓縮。由於手機本身CPU處理能力有限的問題,在手機上進行視訊壓縮的效率並不是很高,大約壓縮的時間需要比視訊拍攝本身的時長還要長一些。
LocalMediaConfig.Builder builder = new LocalMediaConfig.Builder();
final LocalMediaConfig config = builder
.setVideoPath(path) //設定需要進行視訊壓縮的視訊路徑
.captureThumbnailsTime(1)
.doH264Compress(compressMode) //設定視訊壓縮的模式
.setFramerate(iRate) //幀率
.setScale(fScale) //壓縮比例
.build();
CompressResult compressResult = XVideo.startCompressVideo(config);
混淆配置
-keep class com.xuexiang.xvideo.jniinterface.** { *; }