我一直在学习 gstreamer,尝试编写一个应用程序,该应用程序获取多个视频文件并同步处理其中的每个帧(具体来说,我需要比较这些帧,直到转向下一个帧)。 我构建了一个具有多个独立“分支”的管道:
filesrc ---> decodebin ---> videoconvert ---> appsink
filesrc ---> decodebin ---> videoconvert ---> appsink
...
filesrc ---> decodebin ---> videoconvert ---> appsink
我已经成功地处理彼此独立的帧。 我的问题是:
如何同步每个应用程序接收器,以便可以将一个应用程序接收器的帧与其他应用程序接收器的帧进行比较?
我想到的就是在新示例回调函数中轮询其他应用程序接收器是否已将其缓冲区存储在某些共享内存中,然后这些回调之一开始对所有缓冲区进行工作。然而,这似乎是相当残酷和困惑的方法。你能帮我找到一个更好的吗?
最佳答案
GStreamer 中的所有接收器(继承自 GstBaseSink)都有一个属性“sync”。这意味着它将把缓冲区时间戳与时钟时间同步,并且在时间到了之前不会给你缓冲区。如果启用了此功能,则可以简单地使用缓冲区上的 GST_BUFFER_TIMESTAMP 来比较它们。
关于c - 如何同步多个appsink,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25142781/