GSTREAMER 在活动前访问视频

GSTREAMER access video before an event

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

由于我的内嵌板子space不够用,所以只有报警时才开始录像; 该算法适用于离线存储的视频(它不是实时算法,因此应该存储视频,附加到视频流是不够的)。

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

我在这里找到了与我的要求类似的内容:

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

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

我想我把我的想法搞混了,他们两个似乎很相似。 我的建议如下:

  1. 拥有一个行为类似于环形缓冲区的元素,通过它您可以及时倒流。 element queue 是一个很好的尝试示例。看看 time-shift buffering

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

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

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