阅读(2438)
赞(0)
鸿蒙OS 视频录制开发指导
2020-09-17 09:19:55 更新
场景介绍
视频录制的主要工作是选择视频/音频来源后,录制并生成视频/音频文件。
接口说明
接口名 | 功能描述 |
---|---|
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 实例。
- 调用 setOutputFormat(int outputFormat) 方法,设置录制文件存储格式。
- 构造数据源对象,并调用 Recorder 实例的 setSource(Source source) 方法,设置媒体源,代码示例如下:
Recorder recorder = new Recorder();
FileDescriptor fd = in.getFD();
Source source = new Source(fd);
source.setRecorderAudioSource(Recorder.AudioSource.DEFAULT);
recorder.setSource(source);
- (可选)构造音频属性 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 = "/path/audiotestRecord.mp4";
StorageProperty storageProperty = new StorageProperty.Builder()
.setRecorderPath(path)
.setRecorderMaxDurationMs(-1)
.setRecorderMaxFileSizeBytes(-1)
.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),实现录制过程收到错误信息时做相应的操作。下面的代码例子中录制异常时,打印了相关的日志信息,代码示例如下:
IRecorderListener listener = new RecorderErrorAndInfoListener() {
@Override
public void onError(int what, int extra) {
HiLog.error("EncodeWriteFileListener onError what:%{public}d, extra:%{public}d", what, extra);
}
}
- 调用 start() 方法,开始录制。
- (可选)调用 pause() 方法和 resume() 方法,可以实现暂停和恢复录制。
- 调用 stop() 方法停止录制。
- 录制结束后,调用 release() 释放资源。