本文原创发布在华为开发者社区。
介绍
本示例基于Camera Kit(相机服务)实现了使用手机摄像头进行视频的拍摄录制,并在首页进行视频的预览。
效果预览
使用说明
点击“录制视频”按钮会进入视频录制界面,视频录制结束,点击“返回”按钮返回首页,录制的视频会在首页按钮上方显示,点击视频可进行预览。
实现思路
视频录制
通过调用\@ohos.multimedia.camera接口以及AVRecorder接口访问系统相机,实现录像和预览的基础操作。
- 初始化相机
首先通过camera.getCameraManager接口获取相机管理器实例实例,通过CameraDevice接口获取相机id、相机类型等相机设备信息。根据设备信息获取相机输出流,调整预览流分辨率的宽高比与输出流一致。创建相机输入流以及预览输出流,配置并启动会话。核心代码如下,源码参考Lx.ets。
// 向会话中添加录像输出流
try {
this.captureSession.addOutput(this.videoOutput);
} catch (error) {
let err = error as BusinessError;
console.error(`Failed to add videoOutput. error: ${JSON.stringify(err)}`);
}
// 提交会话配置
try {
await this.captureSession.commitConfig();
} catch (error) {
let err = error as BusinessError;
console.error(`captureSession commitConfig error: ${JSON.stringify(err)}`);
}
// 启动会话
try {
await this.captureSession.start();
} catch (error) {
let err = error as BusinessError;
console.error(`captureSession start error: ${JSON.stringify(err)}`);
}
// 启动录像输出流
this.videoOutput.start((err: BusinessError) => {
if (err) {
console.error(`Failed to start the video output. error: ${JSON.stringify(err)}`);
return;
}
console.log('Callback invoked to indicate the video output start success.');
});
- 录制视频
调用avRecorder.start方法录制视频,核心代码如下,源码参考Lx.ets。
async startRecord() {
if (this.avRecorder) {
// 开始录像
try {
await this.avRecorder.start();
} catch (error) {
let err = error as BusinessError;
console.error(`avRecorder start error: ${JSON.stringify(err)}`);
}
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。