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脚本实现这一目标,那么我也全力以赴。
最佳答案
在启动时打开两个进程并保持打开状态听起来不错。这是什么问题?管道中是否包含先前测试中的一些垃圾?您应该重新整理(或冲洗)它们。
您也可以看看匿名管道。对我来说,他们似乎更适合这里。