视频录制开发指导
场景介绍
视频录制的主要工作是选择视频/音频来源后,录制并生成视频/音频文件。
接口说明
接口名 | 功能描述 |
---|---|
Recorder() | 创建Recorder实例。 |
setSource(Source source) | 设置音视频源。 |
setAudioProperty(AudioProperty property) | 设置音频属性。 |
setVideoProperty(VideoProperty property) | 设置视频属性。 |
setStorageProperty(StorageProperty property) | 设置音视频存储属性。 |
prepare() | 准备录制资源。 |
start() | 开始录制。 |
stop() | 停止录制。 |
pause() | 暂停录制。 |
resume() | 恢复录制。 |
reset() | 重置录制。 |
setRecorderLocation(float latitude, float longitude) | 设置视频的经纬度。 |
setOutputFormat(int outputFormat) | 设置输出文件格式。 |
getVideoSurface() | 获取视频窗口。 |
setRecorderProfile(RecorderProfile profile) | 设置媒体录制配置信息。 |
registerRecorderListener(IRecorderListener listener) | 注册媒体录制回调。 |
release() | 释放媒体录制资源。 |
开发步骤
调用Recorder()方法,创建Recorder实例。
构造数据源对象,并调用Recorder实例的setSource(Source source)方法,设置媒体源,代码示例如下:
Recorder recorder = new Recorder();Source source = new Source();source.setRecorderAudioSource(Recorder.AudioSource.DEFAULT);recorder.setSource(source);
调用setOutputFormat(int outputFormat)方法,设置录制文件存储格式。
(可选)构造音频属性AudioProperty对象(不设置音频则是只录视频),并调用Recorder实例的setAudioProperty(AudioProperty property)方法,设置录制的音频属性,代码示例如下:
final int AUDIO_NUM_CHANNELS_STEREO = 2;final int AUDIO_SAMPLE_RATE_HZ = 8000;AudioProperty audioProperty = new AudioProperty.Builder() .setRecorderNumChannels(AUDIO_NUM_CHANNELS_STEREO) .setRecorderSamplingRate(AUDIO_SAMPLE_RATE_HZ) .setRecorderAudioEncoder(Recorder.AudioEncoder.DEFAULT) .build();recorder.setAudioProperty(audioProperty);
构造存储属性StorageProperty对象,并调用Recorder实例的setStorageProperty(StorageProperty property)方法,设置录制的存储属性,代码示例如下:
String path = "/sdcard/audiotestRecord.mp4";StorageProperty storageProperty = new StorageProperty.Builder() .setRecorderPath(path) .setRecorderMaxDurationMs(1000000) .setRecorderMaxFileSizeBytes(1000000) .build();recorder.setStorageProperty(storageProperty);
(可选)构造视频属性VideoProperty对象,并调用Recorder实例的setVideoProperty(VideoProperty property)方法,设置录制的视频属性,代码示例如下:
VideoProperty videoProperty = new VideoProperty.Builder() .setRecorderVideoEncoder(Recorder.VideoEncoder.DEFAULT) .setRecorderWidth(1080) .setRecorderDegrees(0) .setRecorderHeight(800) .setRecorderBitRate(10000000) .setRecorderRate(30) .build();recorder.setVideoProperty(videoProperty);
调用prepare(),准备录制。
(可选)构造录制回调,首先构造对象IRecorderListener,IRecorderListener需要实现onError(int what, int extra),实现录制过程收到错误信息时做相应的操作。下面的代码例子中录制异常时,打印了相关的日志信息,代码示例如下:
class RecorderErrorAndInfoListener implements IRecorderListener { @Override public void onError(int what, int extra) { } @Override public void onMessage(int what, int extra) { }}IRecorderListener listener = new RecorderErrorAndInfoListener() { @Override public void onError(int what, int extra) { HiLog.error(TAG, "EncodeWriteFileListener onError what:%{public}d, extra:%{public}d", what, extra); }}
调用start()方法,开始录制。
(可选)调用pause()方法和resume()方法,可以实现暂停和恢复录制。
调用 stop()方法停止录制。
录制结束后,调用release()释放资源。