本文原创发布在华为开发者社区

介绍

本示例基于Camera Kit(相机服务)实现了使用手机摄像头进行视频的拍摄录制,并在首页进行视频的预览。

实现录制视频功能源码链接

效果预览

请添加链接描述

使用说明

点击“录制视频”按钮会进入视频录制界面,视频录制结束,点击“返回”按钮返回首页,录制的视频会在首页按钮上方显示,点击视频可进行预览。

实现思路

视频录制

通过调用\@ohos.multimedia.camera接口以及AVRecorder接口访问系统相机,实现录像和预览的基础操作。

  1. 初始化相机
    首先通过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.');
    });
  1. 录制视频
    调用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)}`);
      }
    }
  }

鸿蒙场景化代码
1 声望0 粉丝