HarmonyOS鸿蒙Next中相机开发录像功能,如何记录视频中各个图片的时间戳
HarmonyOS鸿蒙Next中相机开发录像功能,如何记录视频中各个图片的时间戳 录像有两个 surface,其中录像的 recordSurface 可以设置 fps 即帧率,但如果最后的视频需要转换成对应的图像序列,需要各个图像帧对应的时间戳,应该如何记录呢?
帧回调函数虽然可以获取时间戳,但在两个 surface (一个预览一个录像)下,预览的 previewSurface 同样存在帧回调。
请问怎么样才能记录实际录制相机帧的时间戳呢?
你好,这个问题,我使用 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进行视频录制。在录制过程中,可以通过Camera
的FrameCallback
回调获取每一帧的时间戳。
具体实现步骤:
- 初始化相机设备并设置参数,包括分辨率、帧率等。
- 设置
MediaRecorder
的参数,如视频编码格式、输出文件路径等。 - 实现
Camera
的FrameCallback
接口,在onFrame
方法中获取每一帧的时间戳。 - 在
onFrame
方法中,将时间戳与对应的帧数据关联,可以将其存储在内存或写入文件。 - 开始录制视频,
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()
方法获取每一帧的时间戳。具体步骤如下:
- 初始化相机:配置相机参数并启动预览。
- 设置帧回调:通过
Camera
的setFrameCallback()
方法注册帧回调。 - 获取时间戳:在回调函数中,使用
Frame
对象的getTimestamp()
方法获取当前帧的时间戳。 - 保存时间戳:将时间戳与帧数据一起保存或处理。
示例代码片段:
camera.setFrameCallback(frame -> {
long timestamp = frame.getTimestamp();
// 处理或保存时间戳
}, HandlerThread.MODE);
通过这种方法,可以准确记录视频中每一帧的时间戳。