Skip to content

Recorder_Config_Params

zanxiaofei edited this page Mar 22, 2018 · 13 revisions

录制参数配置

KSYMediaEditorKit提供KSYRecordKit来提供录制的相关功能
初始化参数设置方式为:

KSYRecordKit类的setXXX接口 

1. 录制前必须设置的参数:

2. 详细说明

录制的本地文件路径
例如:/sdcard/ksy_sv_rec_test/test.mp4

设置接口:startRecord,在录制开始时直接设置即可

2.2.1 三种编码模式
  • 软编模式:ENCODE_METHOD_SOFTWARE
    支持所有GPU滤镜,cpu占用较高,支持4.4及以上系统,相对硬编有更好的机型兼容性,而且相同码率下有更好的视频质量。
    该模式下如果设置了比较高的编码参数(比如720p分辨率),长时间录制可能会导致手机发热严重,帧率下降等问题。
    如4.4以下的系统设置了该编码模式,则系统会自动fallback至软编兼容模式。
  • 硬编模式:ENCODE_METHOD_HARDWARE
    支持所有GPU滤镜,cpu占用最低,支持4.3及以上系统。
    该模式下录制,功耗最低,不过相对于软编,同码率下的画面质量差很多, 而且在某些机型上可能会导致应用crash,不建议全部设置成硬编, 可以通过测试过的硬编白名单来设置。
    如4.3以下的系统设置了该编码模式,则系统会自动fallback至软编兼容模式。
  • 软编兼容模式:ENCODE_METHOD_SOFTWARE_COMPAT
2.2.2 设置接口

setEncodeMethod,该接口在录制过程中设置会抛异常IllegalStateException

可通过 setVideoCodecId(int) 接口设置。可取值有:

  • AVConst.CODEC_ID_AVC 使用H264编码
  • AVConst.CODEC_ID_HEVC 使用H265编码

该属性与软硬编设置是独立的,如果设置为硬编264模式,而机型不支持的话,会fallback到264软编模式。

设置方法有以下两种:

  • 固定分辨率设置:setPreviewResolution(int)
    定义的分辨率指明了录制分辨率短边的长度,长边会根据录制设置的预览View尺寸比例计算(不包括navigation bar的高度)
    此种方式支持以下四种type
type
VIDEO_RESOLUTION_360P
VIDEO_RESOLUTION_480P
VIDEO_RESOLUTION_540P
VIDEO_RESOLUTION_720P

默认值:VIDEO_RESOLUTION_360P

该接口在录制过程中设置无效,设置会在下一次startCameraPreview时生效

支持以下两种方式设置:

  • 固定分辨率设置:setTargetResolution(int)
    定义的分辨率指明了录制分辨率短边的长度,长边会根据录制设置的预览View尺寸比例计算(不包括navigation bar的高度)
    此种方式支持以下四种type
type
VIDEO_RESOLUTION_360P
VIDEO_RESOLUTION_480P
VIDEO_RESOLUTION_540P
VIDEO_RESOLUTION_720P

默认值VIDEO_RESOLUTION_360P

该接口在录制过程中设置无效,设置只在下一次调用startRecord时生效

2.6 码率设置方式

接口在录制过程中设置,只能在下一次调用startRecord时生效
setXXXKBitrate型接口的码率单位为kbps, setXXXBitrate型接口的码率单位为bps

2.7.1 视频码率推荐值

码率的设置都需要跟分辨率以及应用场景相关。大致的选择规律如下:

  • 分辨率越高,需要的码率越高。
  • 视频场景越复杂,运动越剧烈,需要的码率也越高。

硬编模式下,不同机型的编码质量差异较大,还请自行斟酌。

软编模式下录制分辨率及码率推荐值可对应下表(帧率统一为15fps):

分辨率 推荐码率
360p 400
480p 600
540p 700
720p 1000

最大关键帧间隔,一般说的GOP长度。每一个关键帧表示随机访问的点,但是关键帧的大小比非关键帧大很多。

关键帧间隔越小,表示关键帧越多,但是压缩率也会越低,请合理选择。
默认值为 3秒。实际生效方式为 3* videoFPS。 比如15帧每秒,则每45帧有一个关键帧。

2.8.1设置接口

setIFrameInterval(float)

接口在录制过程中设置,只能在下一次调用startRecord时生效

2.9.1 音频采样率
2.9.2 音频码率
2.9.3 音频声道数

支持设置音频ChannelNumber,可选值为1(单声道)或2(双声道),默认是1.
参见: setAudioChannels(int)
建议在开启背景音乐录制时设置为双声道(立体声)。

设置横竖屏代表预览画面需要旋转的角度,对于横屏,需要旋转90或者270度,对于竖屏需要旋转0或者180度

Demo中只演示了竖屏录制UI,您可通过此接口适配横屏录制

mRecordKit.setRotateDegrees(mIsLandscape ? 90 : 0);

3. 参数表

KSYRecordKit中配置方法继承自KSYStreamer,javadoc 参考KSYStreamer

方法 功能 推荐值
setAudioSampleRate 设置音频采样率 44100 Hz
setPreviewFps 设置预览编码帧率 15 fps
setTargetFps 设置录制编码帧率 15 fps
setVideoBitrate(int initbitrate) 设置初始视频码率 500 kbps
setAudioBitrate 设置音频编码码率 48 kbps
setPreviewResolution 设置预览分辨率 VIDEO_RESOLUTION_480P
setTargetResolution 设置录制分辨率 VIDEO_RESOLUTION_480P
setIFrameInterval 设置视频编码时的I帧间隔,单位为秒,float型 默认值为 3秒。实际生效方式为 3* videoFPS。 比如15帧每秒,则每45帧有一个关键帧。
setRotateDegrees 旋转角度 横屏:90/270;竖屏:0/180
setEncodeMethod 编码方式 ENCODE_METHOD_SOFTWARE
setFrontCameraMirror 设置开启前置摄像头镜像 默认关闭

4. 录制过程中可动态调整参数(Demo中RecordActivity)

  • 美颜切换:
    参考Demo中initBeautyUI函数中onItemSelected;
  • 美声及其它音频滤镜切换:
    参考Demo中addAudioFilter函数;
  • 背景音切换:
    参考Demo中onBgmItemClick函数;
  • 水印切换:
    参考demo中onWaterMarkChecked函数
  • 镜像切换:
    参考demo中onFrontMirrorChecked函数
  • 摄像头切换(不受时间限制):
    参考demo中onSwitchCamera函数
  • 动态贴纸切换:
    参考demo中onStickerChecked函数
  • 背景音变调切换: 参考demo中onPitchClick函数
Clone this wiki locally