weixin_42158928 2025-04-01 14:57 采纳率: 0%
浏览 55

RK3588中使用Gstreamer通过tee分流出两个kmssink,会因drm-master权限报错

在RK3588中,使用Gstreamer的插件tee分流出两个kmssink,希望单流同时往两个HDMI口输出画面,但是现在是后一个kmssink会因获取不到drm-master权限而报错
Gstreamer管道大致示意
kmssink1
src -> tee <
kmssink2
那么该怎么做解决这个问题?或者说有没有什么别的方案能做到单流多显?
0:00:01.016805633 10270 0x165021e0 WARN kmssink gstkmssink.c:1713:gst_kms_sink_show_frame: error: drmModeSetPlane failed: Permission denied (13)
Error received from element HDMI-A-1: GStreamer encountered a general resource error.

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2025-04-01 14:57
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    RK3588中使用Gstreamer通过tee分流出两个kmssink,会因drm-master权限报错

    你遇到的问题是使用Gstreamer的tee插件将流分流到两个kmssink,但是第二个kmssink无法获取到drm-master权限,导致报错。

    解决方案:

    1. 使用gst-launch-1.0命令时,添加drm-master权限:
    gst-launch-1.0 ... ! tee name=t ! kmssink device=/dev/video0 t. ! kmssink device=/dev/video1
    

    其中,/dev/video0/dev/video1是两个HDMI口对应的视频设备文件。

    1. 在Gstreamer应用程序中,使用gst_element_set_property函数设置kmssink的device属性:
    GstElement *kmssink1 = gst_element_factory_make("kmssink", "kmssink1");
    GstElement *kmssink2 = gst_element_factory_make("kmssink", "kmssink2");
    
    gst_element_set_property(kmssink1, "device", "/dev/video0");
    gst_element_set_property(kmssink2, "device", "/dev/video1");
    

    其中,/dev/video0/dev/video1是两个HDMI口对应的视频设备文件。

    1. 在Gstreamer应用程序中,使用gst_device_get_device_path函数获取kmssink对应的视频设备文件:
    GstDevice *device = gst_device_get_device_path(kmssink1);
    if (device) {
        gchar *path = gst_device_get_device_path(device);
        gst_element_set_property(kmssink1, "device", path);
        g_free(path);
        gst_device_unref(device);
    }
    

    其中,kmssink1是kmssink的Gstreamer元素对象。

    这些解决方案都可以解决你遇到的问题,但是需要根据你的具体情况选择合适的解决方案。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月1日