1. 程式人生 > >XVideo 一個能自動進行壓縮的小視訊錄製庫

XVideo 一個能自動進行壓縮的小視訊錄製庫

XVideo

xv api

一個能自動進行壓縮的視訊錄製庫

關於我

github csdn

特徵

  • 支援自定義小視訊錄製時的視訊質量。

  • 支援自定義視訊錄製的介面。

  • 支援自定義最大錄製時長和最小錄製時長。

  • 支援自定義屬性的視訊壓縮。

演示(請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.** { *; }

特別感謝

聯絡方式

qq交流群