【问题标题】:GSTREAMER access video before an eventGSTREAMER 在活动开始前访问视频
【发布时间】:2018-08-30 13:16:29
【问题描述】:

我有一个软件,它会在事件(警报)发生时立即执行一些视频分析。

由于我的嵌入式板没有足够的空间,我应该只有在发生警报时才开始录制视频; 该算法适用于离线存储的视频(它不是实时算法,因此应该存储视频,它不足以附加到视频流)。

目前,我可以在检测到警报条件后立即附加到视频并存储它。 但是我想在事件发生前 10 秒分析数据。 是否可以预先记录长达 10 秒的 FIFO 队列,而不将整个流存储在磁盘上?

我在这里找到了与我的要求类似的东西:

https://developer.ridgerun.com/wiki/index.php/GStreamer_pre-record_element#Video_pre-recording_example

但我想知道是否有某种方法可以在不使用 ridgerun 工具的情况下获得相同的结果。 最好的祝福 乔瓦尼

【问题讨论】:

  • 1.有一个足够大的queue 来保存数据 10 秒怎么样? 2. 或者是一个临时的sink/ring buffer(可以保存10秒的数据),它正在不断地被输入数据。这个sink,后来当检测到警报时变成source,你把它和实际的source混合起来,最后记录下来。
  • 谢谢你的提示。我应该进一步阐述你提出的想法。您的第一个想法是在队列中保存 10 秒的视频,当警报发生时,将视频保存在另一个文件中。然后“连接”视频,我应该能够处理格式良好的视频。这样对吗?您是否有任何链接可以了解如何解决该问题?

标签: gstreamer buffering


【解决方案1】:

我想我把我的想法弄混了,而且它们似乎都是相似的。 我的建议如下:

  1. 有一个行为类似于环形缓冲区的元素,尽管您可以及时向后流。 queue 可能是一个很好的尝试示例。看看time-shift buffering

  2. 然后将内容存储到警报文件中,并使用另一个从中读取的管道。例如。使用teeoutput-selector

                              | -> ring-buffer
    src -> output-selector -> |   
                              |-> (on alarm) -> ringbuffer + live-src -> file-sink
    

根据您的问题,我了解到您的 src 可能是实时摄像头,因此这样做可能会很棘手。可能您可能必须像 RidgeRun 团队那样实现自己的插件,否则这个解决方案更像是一个 hack,而不是一个有意义的解决方案。遗憾的是,此类解决方案的参考资料并不多,您可能必须尝试一下。

【讨论】:

  • 感谢您真正有用的帮助。我将在接下来的几周内研究这个主题。最好的问候
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多