Python中的GStreamer时间同步
在我的Python程序中,我使用GStreamer的playbin
和textoverlay
来播放视频文件,并在视频上方显示一些文字。这一切都很顺利:如果我改变textoverlay
的text
属性,新的文字就会显示出来。
但现在我想根据视频的当前播放位置/时间来设置文字(就像字幕一样)。
我了解了一些关于管道时钟、缓冲区时间戳、段事件和外部定时器的知识,这些定时器每隔一段时间就会查询当前时间。但是,怎样才能最好地获取时间变化的信息,以便我能尽快显示正确的文字呢?
1 个回答
0
要让视频和其他内容完美同步,最好的办法是使用像cairooverlay这样的元素,然后直接在处理流程中自己进行渲染,这样可以根据每一帧的实际时间戳来操作。或者,你也可以自己写一个元素来实现这个功能。
如果你对时间的准确性要求不高,最简单的办法就是使用处理流程的时钟。在处理流程启动后,你可以获取这个时钟,然后为你想要的时间或间隔创建单次(或定期)时钟ID。接着,可以在这个时钟上使用async_wait()方法。
如果你想要获取与处理流程中1秒位置对应的时钟时间,你只需在处理流程的基础时间上加上1秒(也就是1000000000纳秒)。然后在创建时钟ID时就可以使用这个值。