【问题标题】:get a video frame using qt gstreamer使用 qt gstreamer 获取视频帧
【发布时间】:2022-01-07 06:28:15
【问题描述】:

我检查了在 qml 视频表面中显示良好的视频流。现在我想获取视频帧数据来做一些不错的事情。但是,直到现在它似乎做得不好......我做了一个像下面这样的简单管道来专注于测试。

nvarguscamerasrc - appsink

我使用 QGst::Utils::ApplicationSink 来获取一帧数据。我引用了一个例子“appsink-src

/* making pipeline */
QGst::ElementPtr source, sink;
SubClassApplicationSink *appsink;

source = QGst::ElementFactory::make("nvarguscamerasrc");
sink = QGst::ElementFactory::make("appsink");
appsink = new SubClassApplicationSink();

// configure elements    
source->setProperty("sensor-id", n);
appsink->setElement(sink);
appsink->enableDrop(true);
appsink->setMaxBuffers(7654321);

m_pipeline->add(source, sink);
source->link(sink);

ApplicationSink 的子类实现了一些回调 eos、preroll、sample。

然后我在从新样本中获得的缓冲区中打印一些值。

调用回调函数时重复相同的输出。

结果:[开始-结束偏移量为-1,无标志,内存计数1,内存大小1008]

我不知道为什么……你觉得怎么样?

【问题讨论】:

    标签: gstreamer-1.0


    【解决方案1】:

    我解决了这个问题。问题在于管道的组成。在“nvarguscamerasrc”和“appsink”之间放置一个“nvvidconv”元素后,我可以成功获取视频帧。

    我不知道为什么需要一个 nvvidconv 元素。但是,似乎是因为源的视频类型“video/x-raw(memory:NVMM)”,这意味着出于性能原因使用 DMA 缓冲区。

    https://forums.developer.nvidia.com/t/what-is-the-meaning-of-memory-nvmm/180522

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 2016-02-03
      • 2015-08-28
      • 2011-12-23
      • 2022-01-06
      • 1970-01-01
      相关资源
      最近更新 更多