我已经按照此处的说明在 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 总线的情况下确定这一点,我也可以使用这样的解决方案。有没有人可以帮助我解决这个问题?