Gstreamer巴士打电话给i.c.w. python多处理导致Ubuntu中的X服务器错误

时间:2013-12-16 13:11:25

标签: python ubuntu multiprocessing gstreamer python-gstreamer

我在gstreamer中写了一个视频播放器,如下所示: https://github.com/dschreij/media_player_gst/blob/master/media_player_gst.py

在Windows中,它在“正常”和多处理模式下工作正常(即所有Gstreamer部件和播放器对象都在单独的过程中创建)。但是,在Ubuntu 13.10中,当玩家在自己的进程中运行时会调用

self.bus.peek()  # Reference to the playbin2 player's bus

导致以下错误并导致整个程序崩溃(也是父进程):

python: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.
python: Fatal IO error 4 (Interrupted system call) on X server :0.

否则播放器在新进程中运行良好。只有调用self.bus.peek()才能使其崩溃。我需要检查总线队列本身的事件,因为将总线连接到处理其消息的函数似乎也不起作用(仅在Ubuntu中再次运行!)

基本上我只使用总线来查看是否已经到达流的末尾(gst.MESSAGE_EOS),所以如果可以在不使用playbin2总线的情况下确定这一点,我也可以使用这样的解决方案。有没有人可以帮我解决这个问题?

1 个答案:

答案 0 :(得分:0)

我在平均时间内找到答案主要是在这个帖子中:

http://gstreamer-devel.966125.n4.nabble.com/fork-and-then-use-gstreamer-functions-td972935.html

在分叉进程中使用gstreamer是一种阻力,因为可能存在关于gst主循环和所涉及资源的访问冲突。但是,gst.Bus.pop()不与内部gst循环结构交互(peek()和poll()都很明显)并且通过使用gst.Bus.pop()我能够从总线检索消息没有问题!