一、简介
当OpenHarmony 应用调用AVRecorder或VideoRecorder ArkTS API进行视频录制时,录制的文件可能出现播放花屏等异常,此时可以尝试dump输入视频数据来排查是数据源的问题还是后续编码的问题
二、版本信息
OpenHarmony-4.X-Release 标准系统,录制引擎为gstreamer引擎
三、修改方法
原生框架提供了系统属性可以dump录制时的视频输入数据,但是代码有BUG无法生效,修改如下:
foundation/multimedia/player_framework/services/engine/gstreamer/plugins/source/videocapture/src/gst_video_capture_src.cpp 的gst_video_capture_src_fill 函数中添加一行代码
static GstFlowReturn gst_video_capture_src_fill(GstBaseSrc *src, guint64 offset, guint size, GstBuffer *buf)
{
g_return_val_if_fail(src != nullptr, GST_FLOW_ERROR);
GstVideoCaptureSrc *capturesrc = GST_VIDEO_CAPTURE_SRC(src);
(void)offset;
(void)size;
GstBufferTypeMeta *meta = gst_buffer_get_buffer_type_meta(buf);
g_return_val_if_fail(meta != nullptr, GST_FLOW_ERROR);
if (meta->bufferFlag & BUFFER_FLAG_EOS) {
return GST_FLOW_EOS;
}
// 新增修改
+ (void)GST_BASE_SRC_CLASS(parent_class)->fill(src, offset, size, buf);
if (capturesrc->is_first_buffer) {
gst_video_capture_src_set_caps(capturesrc, meta->pixelFormat);
capturesrc->is_first_buffer = false;
}
...
}
四、测试方法
1、上述代码修改后将编译生成的libgst_mem_src.z.so 动态库推到板子的/system/lib(64)/media/plugins/ 目录下,重启
2、板端创建dump文件目录并修改权限: mkdir /data/media;chmod 777 /data/media;
3、设置系统属性: param set sys.media.dump.surfacesrc.enable true
4、此时进行录制操作,会在/data/media/ 目录下生成 surface-in-xxx.yuv dump文件
5、dump文件的数据格式可以是YUV、RGBA或H264编码数据