OMXPlayer是目前唯一支持GPU加速的Raspberry Pi播放器。不幸的是,它不支持播放列表,大约需要2秒才能开始,我需要能够播放两个或多个视频,而它们之间没有任何明显的差距。
我围绕它编写了一个简单的python包装器,以便在当前视频每次结束时启动OMXPlayer的新实例。这适用于大型视频,但当你的视频持续时间约为10秒时,它会变得非常烦人。
我一直在摆弄命名管道,并取得了一些结果:差距缩小到1.4秒,但这仍然比我想要的要大得多。
这是我当前的代码:
(...)
video1 = "/home/user/video1.mp4"
video2 = "/home/user/video2.mp4"
pipe1 = "/tmp/fifo1"
pipe2 = "/tmp/fifo2"
payload = 'exec omxplayer --vol %s -o "%s" "%s" < %s' % (0, "hdmi", video1, pipe1)
start = time.time()
p1 = subprocess.Popen(payload, stdout=open('/dev/null', 'w'), shell=True)
payload = 'exec omxplayer --vol %s -o "%s" "%s" < %s &' % (0, "hdmi", video2, pipe2)
p2 = subprocess.Popen(payload, stdout=open('/dev/null', 'w'), shell=True)
# Let the games begin
os.system("echo -n . > %s" % pipe1)
p1.wait()
os.system("echo -n . > %s" % pipe2)
p2.wait()
end = time.time
print("ELAPSED: %g" % (end-start))
我还尝试在打开第一个管道后立即打开第二个管道,然后暂停它(通过管道发送"p"),结果在p1.wait()之后立即恢复播放,但第二个视频根本不会暂停。
关于如何最大限度地减少这种情况,有什么建议吗?如果有人能使用Bash脚本实现这一点,我也完全支持。
在启动时打开两个进程并保持它们的打开状态听起来不错。这有什么问题?也许管道里有以前测试的垃圾?您应该重新生成(或刷新)它们。
你也可以看看匿名管道。对我来说,他们在这里会更合适。