在视频播放期间在特定时间戳触发事件

Fire events at specific timestamps during video playback

我正在使用 Raspberry Pi 3 运行 Raspbian。我需要通过 HDMI 播放视频文件,我需要在视频播放期间以特定时间码触发事件。这些事件是对 GPIO 的简单写操作。我的问题是:我应该使用什么方法来做到这一点?

我的第一个方法是使用 OpenCv (python) 和 VideoCapture(),但是 raspberry pi 太慢了,而且我的 FPS 很低(我需要至少 25 FPS @ 1080p ).

所以现在我正在研究其他解决方案:Gstreamer、FFMPEG、omxplayer,我阅读了文档,但我不知道该使用哪个工具来完成这项工作。

您需要为此编写一些代码。您可以编写一个 gpiowriter 元素。该元素将具有 io-pin 的 gobject 属性和值的可控 属性。然后您可以附加一个列出 timestamp:value 对的 GstControlSource。 gpiowriter 可以没有 pad,只有 运行 个线程,并根据管道时钟从控制器同步属性,或者它可以是像身份这样的直通元素。后者将同步框架上的属性。

感谢 python-omxplayer-wrapper (https://github.com/willprice/python-omxplayer-wrapper)

,我终于用 omxplayer 轻松解决了这个问题

*编辑:这是基本示例代码的样子:

from omxplayer import OMXPlayer
from time import sleep

/* Setup the player as shown in omxplayer-wrapper examples : */
source = '../video/gray10sec.mp4'
player = OMXPlayer(source, args=['--loop', '--no-osd', '--blank'])
player.pause()
sleep(5)
player.play()

/* Make a query to position() inside infinite loop : */
while (1):
    position = player.position() * 1000
    /* Event timecodes values are stored in "events" */
    for event in events.values():
        if position - 20 <= event['tc'] and position + 20 >= event['tc']:
            /* Put your code here */

player.quit()