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

时间:2017-08-06 14:03:24

标签: video ffmpeg gstreamer raspberry-pi3 omxplayer

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

我的第一种方法是使用OpenCv(python)和VideoCapture(),但树莓派太慢,我的FPS非常低(我需要至少25 FPS @ 1080p)。

所以现在我正在寻找其他解决方案: Gstreamer,FFMPEG,omxplayer ,我阅读了文档,但我无法确定使用哪种工具来完成这项工作。< / p>

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我终于通过omxplayer轻松解决了这个问题,感谢 python-omxplayer-wrapper https://github.com/willprice/python-omxplayer-wrapper

*编辑:这是一个基本的示例代码:

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()