HarmonyOS鸿蒙Next中录制视频的同时获取视频流的snapshot

HarmonyOS鸿蒙Next中录制视频的同时获取视频流的snapshot 录制视频的同时获取视频流的snapshot

3 回复

参考:https://gitee.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/Camera_js

// 接受图像帧
this.mReceiver.on('imageArrival', (): void => {
  this.mReceiver.readNextImage((errCode: BusinessError, imageObj: image.Image): void => {
    console.info('readNextImage start');
    if (errCode || imageObj === undefined) {
      console.error('readNextImage failed');
      return;
    }
    imageObj.getComponent(image.ComponentType.JPEG, (errCode: BusinessError, component: image.Component): void => {
      console.info(`err: ${JSON.stringify(errCode)}`);
      if (errCode || component === undefined) {
        console.info('getComponent failed');
        return;
      }
      let buffer: ArrayBuffer;
      if (component.byteBuffer as ArrayBuffer) {
        // 预览帧,可以处理人脸数据,设置变量来判断是否为录制状态
        buffer = component.byteBuffer;
        this.savePictureJpg(buffer, GlobalContext.getContext().cacheDir + "/test.jpg");
      } else {
        console.error('component byteBuffer is undefined');
      }
    });
  });
});

更多关于HarmonyOS鸿蒙Next中录制视频的同时获取视频流的snapshot的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,录制视频的同时获取视频流的snapshot可以通过使用CameraKit API实现。CameraKit提供了CameraRecorder类来管理相机操作和视频录制。通过CameragetSurface()方法可以获取视频流的Surface,并将其传递给Recorder进行录制。同时,使用Cameracapture()方法可以在录制过程中捕获当前的视频帧作为snapshot。

具体步骤如下:

  1. 初始化CameraRecorder实例。
  2. 使用Camera.getSurface()获取视频流的Surface,并将其设置为Recorder的输入。
  3. 开始录制视频。
  4. 在录制过程中,调用Camera.capture()方法捕获当前帧,并将其保存为图片文件。

示例代码片段如下:

import camera from '@ohos.multimedia.camera';
import media from '@ohos.multimedia.media';

// 初始化Camera和Recorder
let cameraManager = camera.getCameraManager();
let cameraInput = cameraManager.getDefaultCamera();
let profile = media.getRecorderProfile(cameraInput.deviceId, media.RecorderFormat.FORMAT_MP4);
let recorder = media.createRecorder();

// 获取视频流Surface并开始录制
let surface = cameraInput.getSurface();
recorder.prepare(profile);
recorder.start();

// 捕获snapshot
cameraInput.capture((err, image) => {
    if (err) {
        console.error('Capture snapshot failed');
    } else {
        // 保存image为文件
    }
});

在HarmonyOS鸿蒙Next中,录制视频时获取视频流的快照(snapshot)可以通过以下步骤实现:

  1. 创建录像会话:使用CameraRecorder类配置并启动录像会话。
  2. 获取视频帧:通过CameraFrameReceiver接口实时获取视频帧数据。
  3. 保存快照:从视频帧中提取图像数据,使用Image类将其保存为快照。

示例代码片段:

// 配置并启动录像会话
Recorder recorder = new Recorder(context);
recorder.prepare();
recorder.start();

// 获取视频帧
FrameReceiver receiver = new FrameReceiver() {
    @Override
    public void onFrameReceived(byte[] frameData) {
        // 提取并保存快照
        Image image = Image.fromBytes(frameData);
        image.save("snapshot.jpg");
    }
};
camera.setFrameReceiver(receiver);
回到顶部