HarmonyOS鸿蒙Next中相机开发录像功能,如何记录视频中各个图片的时间戳

HarmonyOS鸿蒙Next中相机开发录像功能,如何记录视频中各个图片的时间戳 录像有两个 surface,其中录像的 recordSurface 可以设置 fps 即帧率,但如果最后的视频需要转换成对应的图像序列,需要各个图像帧对应的时间戳,应该如何记录呢?

帧回调函数虽然可以获取时间戳,但在两个 surface (一个预览一个录像)下,预览的 previewSurface 同样存在帧回调。

请问怎么样才能记录实际录制相机帧的时间戳呢?

7 回复

你好,这个问题,我使用 triggerLoopingGroup 解决了,帖子链接为:https://developer.huawei.com/consumer/cn/forum/topic/0201118273713842752?fid=0103702273237520029

更多关于HarmonyOS鸿蒙Next中相机开发录像功能,如何记录视频中各个图片的时间戳的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


感谢您的反馈,如后期有疑问可以随时发帖,感谢您的支持。

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

我猜测尽管一个 FrameConfig 中有两个 surface,但他们应该对应同一个 frame,使用帧回调函数记录即可。不过注意,相机配置似乎是一个多线程程序,一定要保证视频记录对象 mediaRecorder.start() 操作在相机配置中 triggerLoopCapture() 动作之前完成,在录制结束后,mediaRecorder.stop 在新 triggerLoopCapture() 之后完成,这样完全对齐帧回调函数中记录得时间戳。

楼主您好,这个问题已经在分析中,请耐心等待一下。

在HarmonyOS鸿蒙Next中开发相机录像功能时,记录视频中各个图片的时间戳可以通过使用Camera API和MediaRecorder API来实现。首先,通过Camera API获取视频帧数据,然后使用MediaRecorder API进行视频录制。在录制过程中,可以通过CameraFrameCallback回调获取每一帧的时间戳。

具体实现步骤:

  1. 初始化相机设备并设置参数,包括分辨率、帧率等。
  2. 设置MediaRecorder的参数,如视频编码格式、输出文件路径等。
  3. 实现CameraFrameCallback接口,在onFrame方法中获取每一帧的时间戳。
  4. onFrame方法中,将时间戳与对应的帧数据关联,可以将其存储在内存或写入文件。
  5. 开始录制视频,MediaRecorder会将帧数据编码并写入输出文件。

示例代码片段:

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

// 初始化相机
let cameraManager = camera.getCameraManager(context);
let cameras = cameraManager.getSupportedCameras();
let cameraInput = cameraManager.createCameraInput(cameras[0]);

// 设置MediaRecorder
let mediaRecorder = media.createMediaRecorder();
let recorderConfig = {
    audioSourceType: media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC,
    videoSourceType: media.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV,
    outputFormat: media.OutputFormat.OUTPUT_FORMAT_MPEG_4,
    videoEncoder: media.VideoEncoder.VIDEO_ENCODER_H264,
    audioEncoder: media.AudioEncoder.AUDIO_ENCODER_AAC,
    outputPath: 'path/to/output/file.mp4'
};
mediaRecorder.prepare(recorderConfig);

// 实现FrameCallback
let frameCallback = {
    onFrame: (frame) => {
        let timestamp = frame.timestamp;
        // 处理时间戳和帧数据
    }
};
cameraInput.setFrameCallback(frameCallback);

// 开始录制
mediaRecorder.start();

在HarmonyOS鸿蒙Next中开发录像功能时,可以通过Camera API获取视频帧,并使用Frame对象的getTimestamp()方法获取每一帧的时间戳。具体步骤如下:

  1. 初始化相机:配置相机参数并启动预览。
  2. 设置帧回调:通过CamerasetFrameCallback()方法注册帧回调。
  3. 获取时间戳:在回调函数中,使用Frame对象的getTimestamp()方法获取当前帧的时间戳。
  4. 保存时间戳:将时间戳与帧数据一起保存或处理。

示例代码片段:

camera.setFrameCallback(frame -> {
    long timestamp = frame.getTimestamp();
    // 处理或保存时间戳
}, HandlerThread.MODE);

通过这种方法,可以准确记录视频中每一帧的时间戳。

回到顶部