【问题标题】:Avoid time lapse between 2 processes (2 instances of OMXPlayer)避免 2 个进程之间的时间间隔(OMXPlayer 的 2 个实例)
【发布时间】:2014-05-21 08:30:31
【问题描述】:

OMXPlayer 是目前唯一支持 GPU 加速的树莓派播放器。不幸的是,它不支持播放列表,大约需要 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 脚本完成此任务,我也完全赞成。

【问题讨论】:

  • 在启动时打开两个进程并保持它们打开听起来不错。这有什么问题?
  • 第二个视频不会暂停;两者都将同时开始播放。如果我得了癫痫症,我现在已经死了。
  • 真的很想测试一下,但不幸的是我在工作,我的树莓在家里。晚上可以看看,如果之前没有答案...
  • @hek2mgl 管道有问题!在重新创建它们后,我再次尝试了暂停技术,它奏效了。唯一的问题是 a) 第一个视频加载似乎需要更长的时间(有意义)和 b) OMXPlayer 给出第二个视频已暂停的视觉反馈。谢谢!如果你回答我会接受的问题:)
  • 呵呵 :) 好的,我已经回答了

标签: python bash video raspberry-pi


【解决方案1】:

在启动时打开两个进程并保持它们打开听起来不错。那有什么问题?也许管道包含以前测试的一些垃圾?您应该重新生成(或刷新)它们。

你也可以看看匿名管道。对我来说,它们看起来更适合这里。

【讨论】:

  • 检查this 看看如何在这里使用匿名管道
猜你喜欢
  • 2015-09-10
  • 2012-09-18
  • 1970-01-01
  • 2017-03-17
  • 2021-08-26
  • 2012-06-04
  • 2012-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多