OpenHarmony 录制时dump视频输入数据的方法

一、简介

当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编码数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值