gpt4 book ai didi

c++ - Yocto OpenCV w/GStreamer 安装问题

转载 作者:行者123 更新时间:2023-11-27 23:38:39 26 4
gpt4 key购买 nike

我有一个通过 OpenCV VideoWriter 实例化的简单 GStreamer 管道

LOG_INFO("Opening VP8 GStreamer writer object at "
<< host << ":" << port << " with " << horizontal_resolution
<< "x" << vertical_resolution << "p@" << fps << "fps"
<< "(color=" << is_color << ")");

const std::string filename{
" appsrc is-live=true ! videoconvert ! "
" vp8enc cpu-used=2 threads=2 min_quantizer=5 max_quantizer=5 deadline=100000 ! "
" rtpvp8pay ! application/x-rtp,media=video,encoding-name=VP8,payload=96 ! "
" udpsink host= " + host + " port= " + port
};

writer.open(
filename,
cv::CAP_GSTREAMER,
fps,
cv::Size{horizontal_resolution, vertical_resolution},
is_color
);

在我的主机上它运行顺利,但是当我在目标上交叉编译和运行时,我得到以下信息:

Opening VP8 GStreamer writer object at 127.0.0.1:8004 with 160x120p@30fps(color=true)
0:00:00.003785000 3484 0xe7e0ac0 WARN GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "appsrc"!
0:00:00.003901750 3484 0xe7e0ac0 ERROR GST_PIPELINE grammar.y:816:priv_gst_parse_yyparse: no element "appsrc"
0:00:00.003951125 3484 0xe7e0ac0 WARN GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "videoconvert"!
0:00:00.003972875 3484 0xe7e0ac0 ERROR GST_PIPELINE grammar.y:816:priv_gst_parse_yyparse: no element "videoconvert"
0:00:00.003998375 3484 0xe7e0ac0 ERROR GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no source [sink=@(nil)]
0:00:00.004042250 3484 0xe7e0ac0 WARN GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "vp8enc"!
0:00:00.004070875 3484 0xe7e0ac0 ERROR GST_PIPELINE grammar.y:816:priv_gst_parse_yyparse: no element "vp8enc"
0:00:00.004105500 3484 0xe7e0ac0 ERROR GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no source [sink=@(nil)]
0:00:00.004135750 3484 0xe7e0ac0 WARN GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "rtpvp8pay"!
0:00:00.004160250 3484 0xe7e0ac0 ERROR GST_PIPELINE grammar.y:816:priv_gst_parse_yyparse: no element "rtpvp8pay"
0:00:00.004186875 3484 0xe7e0ac0 ERROR GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no source [sink=@(nil)]
0:00:00.004309875 3484 0xe7e0ac0 WARN GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "udpsink"!
0:00:00.004336375 3484 0xe7e0ac0 ERROR GST_PIPELINE grammar.y:816:priv_gst_parse_yyparse: no element "udpsink"
0:00:00.004364125 3484 0xe7e0ac0 ERROR GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no source [sink=@(nil)]

(EXE:3484): GStreamer-CRITICAL **: gst_debug_log_valist: assertion 'category != NULL' failed

** (EXE:3484): CRITICAL **: gst_app_src_end_of_stream: assertion 'GST_IS_APP_SRC (appsrc)' failed

我的 Yocto 配置文件如下,目标平台是 i.MX8M Mini。

require conf/distro/include/yocto-uninative.inc

MACHINE ??= "e0219"
UBOOT_CONFIG ??= "sd"
UBOOT_CONFIG[sd] ??= "e0219_config"


#MACHINE ??= 'imx8mmevk'
DISTRO ?= 'fsl-imx-xwayland'
PACKAGE_CLASSES ?= "package_rpm"
EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
USER_CLASSES ?= "buildstats image-mklibs image-prelink"
PATCHRESOLVE = "noop"
BB_DISKMON_DIRS ??= "\
STOPTASKS,${TMPDIR},1G,100K \
STOPTASKS,${DL_DIR},1G,100K \
STOPTASKS,${SSTATE_DIR},1G,100K \
STOPTASKS,/tmp,100M,100K \
ABORT,${TMPDIR},100M,1K \
ABORT,${DL_DIR},100M,1K \
ABORT,${SSTATE_DIR},100M,1K \
ABORT,/tmp,10M,1K"
PACKAGECONFIG_append_pn-qemu-native = " sdl"
PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl"
CONF_VERSION = "1"

DL_DIR ?= "${BSPDIR}/downloads/"

CORE_IMAGE_EXTRA_INSTALL += " net-tools iputils dhcpcd"
CORE_IMAGE_EXTRA_INSTALL += " openssh nano python3 ethtool i2c-tools strace spitools"
CORE_IMAGE_EXTRA_INSTALL += " tcpdump socat opencv libmicrohttpd libsrtp curl boost"
CORE_IMAGE_EXTRA_INSTALL += " nmap python-djangorestframework net-snmp"
CORE_IMAGE_EXTRA_INSTALL += " openmp llvm"
ACCEPT_FSL_EULA = "1"

如果我理解正确的话,opencv 配方应该需要 gstreamer 和它的一些插件,但在我看来,在构建之后,GStreamer 找不到运行管道所需的插件。这是 gst-inspect 的输出:

$ gst-inspect-1.0        
coreelements: capsfilter: CapsFilter
coreelements: concat: Concat
coreelements: dataurisrc: data: URI source element
coreelements: downloadbuffer: DownloadBuffer
coreelements: fakesrc: Fake Source
coreelements: fakesink: Fake Sink
coreelements: fdsrc: Filedescriptor Source
coreelements: fdsink: Filedescriptor Sink
coreelements: filesrc: File Source
coreelements: funnel: Funnel pipe fitting
coreelements: identity: Identity
coreelements: input-selector: Input selector
coreelements: output-selector: Output selector
coreelements: queue: Queue
coreelements: queue2: Queue 2
coreelements: filesink: File Sink
coreelements: tee: Tee pipe fitting
coreelements: typefind: TypeFind
coreelements: multiqueue: MultiQueue
coreelements: valve: Valve element
coreelements: streamiddemux: Streamid Demux
staticelements: bin: Generic bin
staticelements: pipeline: Pipeline object

Total count: 2 plugins, 23 features

我该如何解决这个问题?

使用@Subrata 建议更新 2

我将@Subrata 建议的包添加到我的 local.conf 中,如下所示:

CORE_IMAGE_EXTRA_INSTALL += " gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav"

现在可以通过 gst-inspect 查看 179 个插件。

启动我的应用程序时,我仍然缺少一个元素,但这是朝着正确方向迈出的一步。

Opening VP8 GStreamer writer object at 127.0.0.1:8004 with 160x120p@30fps(color=true)
0:00:00.053317750 3520 0x16290b00 WARN GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "vp8enc"!
0:00:00.053537875 3520 0x16290b00 ERROR GST_PIPELINE grammar.y:816:priv_gst_parse_yyparse: no element "vp8enc"
0:00:00.053606125 3520 0x16290b00 ERROR GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no sink [source=@0x16293290]
0:00:00.057937500 3520 0x16290b00 ERROR GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no source [sink=@0x162a0250]
0:00:00.081852625 3520 0x1629f720 FIXME default gstutils.c:3981:gst_pad_create_stream_id_internal:<appsrc0:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id

最佳答案

完成@Subrata 的回答:您需要安装与 gstreamer 所需元素对应的包。

我不知道您使用的是哪个 Yocto 版本,但您可以看到默认情况下在 gstreamer 上安装了哪些 gstreamer 元素。在 meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good.inc 文件中:

PACKAGECONFIG ??= " \
${GSTREAMER_ORC} \
${@bb.utils.filter('DISTRO_FEATURES', 'pulseaudio x11', d)} \
cairo flac gdk-pixbuf gudev jpeg libpng soup speex taglib v4l2 \
"

[...]

PACKAGECONFIG[vpx] = "--enable-vpx,--disable-vpx,libvpx"

现在您需要 vp8enc,包含在 vpx 中库,但是,如您所见,PACKAGECONFIG 变量不包含此选项。

您需要添加一个 .bbappend 文件并添加此选项才能使用此插件,在您的 meta 中:your-meta/repices-multimedia/gstreamer/gstreamer1.0-plugins- good_%.bbappend

PACKAGECONFIG_append=" vpx"

如果您打算编写一个需要此 vpx 元素的食谱,您可以将其添加到 RDEPENDS 中:

DEPENDS=" gstreamer1.0 gstreamer1.0-plugins-good"

RDEPENDS_${PN}=" gstreamer1.0 \
gstreamer1.0-plugins-good-vpx "

关于c++ - Yocto OpenCV w/GStreamer 安装问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57291680/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com