实时录制

初始化LiveCaptureSession

LiveConfig.Builder builder = new LiveConfig.Builder();
// 配置录制参数
builder.setCameraOrientation(90) // 设置相机旋转参数,通常横屏传0度,竖屏传90度
    .setOutputOrientation(0) // 设置产出的视频的逆时针旋转方向,该参数最终用于VideoFilter的setEncodeSize接口
    .setCameraId(LiveConfig.CAMERA_FACING_FRONT) // 设置所使用的相机
    .setVideoWidth(videoWidth) // 设置输出视频的宽(像素个数)
    .setVideoHeight(videoHeight); // 设置输出视频的高(像素个数)
// 初始化录制Session
mLiveCaptureSession = new LiveCaptureSession(context, builder.build());
// 绑定SurfaceHolder
mLiveCaptureSession.setSurfaceHolder(surfaceView.getHolder());
// 设置错误回调
mLiveCaptureSession.setCaptureErrorListener(new LiveCaptureSession.CaptureErrorListener() {
    @Override
    public void onError(int error, String desc) {
        Toast.makeText(context, "Error! id=" + error + ";info=" + desc, Toast.LENGTH_SHORT).show();
    }
});
// 设置美颜、色彩调整、风格等滤镜链
mLiveCaptureSession.setGPUImageFilters(filterList);

使用LiveCaptureSession

创建与销毁

// 初始化录音与捕获视频的device. 在创建Session时仅调用一次;
mLiveCaptureSession.setupDevice();
// 初始化mp4格式封装器 
mLiveCaptureSession.configMp4Muxer(mp4SavedPath);

// 销毁,不再使用时调用
mLiveCaptureSession.destroyMp4Muxer();
mLiveCaptureSession.release();

开始、暂停、恢复、结束

以下操作LiveCaptureSession可调用多次

// 开始录制
mLiveCaptureSession.start();

// 暂停录制
mLiveCaptureSession.pause();

// 恢复录制
mLiveCaptureSession.resume();

// 停止录制
mLiveCaptureSession.stop();

设置滤镜

// 美颜滤镜
beautyFilter = new GPUImageSoftenBeautyFilter();
// 颜色调整滤镜
colorAdjustFilter = new ColorAdjustFilter(context);
// 其他滤镜:如风格滤镜,自定义滤镜
customFilter = new GPUImageFilter();
filterList.add(beautyFilter); // 先加美颜,因为会检测皮肤
filterList.add(colorAdjustFilter);
filterList.add(customFilter);
// 设置滤镜
mLiveCaptureSession.setGPUImageFilters(filterList);

选择滤镜参数

我们内置了两种美颜算法,GPUImageNaturalBeautyFilterGPUImageSoftenBeautyFilter,前者比较自然,后者带有柔焦效果,请根据实际使用场景选择对应的算法。

  • 美颜参数调整
// 美白,取值[0f, 1.0f]
beautyFilter.setBrightLevel(bright);
// 磨皮,取值[0f, 1.0f]
beautyFilter.setSmoothLevel(smooth);
// 粉嫩,取值[0f, 1.0f]
beautyFilter.setPinkLevel(pink);

几组美颜经验值:

无: (美白,磨皮,粉嫩) = (0f, 0f, 0f);

自然: (美白,磨皮,粉嫩) = (0.4f, 0.55f, 0.05f);

美白: (美白,磨皮,粉嫩) = (0.65f, 0.35f, 0.45f);

粉嫩: (美白,磨皮,粉嫩) = (0.6f, 0.35f, 0.95f);

魔幻: (美白,磨皮,粉嫩) = (0.65f, 0.80f, 0.65f);

  • 颜色度调整
// 亮度,取值[-1f, 1f], 默认为0f
colorAdjustFilter.setBrightness(brightness);
// 对比度, 取值[0f, 4f], 默认为1f
colorAdjustFilter.setContrast(contrast);
// 饱和度, 取值[0f, 2f], 默认为1f
colorAdjustFilter.setSaturation(saturation);
// 色温, 取值[-180f, 180f], 默认为0f
colorAdjustFilter.setHue(hue);
// 锐度, 取值[-4f, 4f], 默认为0f
colorAdjustFilter.setSharpness(sharpness);
  • 更换自定义Filter(如风格滤镜)
// 根据name创建Filter类
final GPUImageFilter filter = FiltersAdapter.getFilterByName(context, name);
// 移除老的滤镜
filterList.remove(customFilter);
customFilter = filter;
// 增加新的滤镜
filterList.add(customFilter);
// 设置新的滤镜列表
mLiveCaptureSession.setGPUImageFilters(filterList);

设置背景音乐

// 设置背景乐
mLiveCaptureSession.configBackgroundMusic(boolean enableBGM, String bgmPath, boolean isLooping)
// 设置背景乐区间,单位为微妙(us)
mLiveCaptureSession.configBackgroundMusicClip(long clipStartInUSec, long clipDurationInUSec)

设置音量增益

// 设置录音音量增益,取值[0f, 1f]
mLiveCaptureSession.setRecordTrackGain(float gain);
// 设置背景音音量增益,取值[0f, 1f]
mLiveCaptureSession.setBGMTrackGain(float gain);

摄像头相关

以下接口可在录制过程中,根据用户的点击来分别调用

// 开启或关闭闪光灯
mLiveCaptureSession.toggleFlash(boolean flag);
// 是否可以切换摄像头
mLiveCaptureSession.canSwitchCamera();
// 切换摄像头
mLiveCaptureSession.switchCamera(int cameraId);
// focus到具体位置
mLiveCaptureSession.focusToPoint(int x, int y);
// 获取最大缩放因子
mLiveCaptureSession.getMaxZoomFactor();
// 设置缩放因子
mLiveCaptureSession.setZoomFactor(int factor);

更多详情,参见demo中的CaptureViewModel类。