我已经用gstreamer编写了一个视频播放器,如下所示:https://github.com/dschreij/media_player_gst/blob/master/media_player_gst.py
在Windows中,它在“正常”和多处理模式下工作得很好(即所有的Gstreamer部件和播放器对象都是在一个单独的进程中创建的)。
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总线的情况下确定这一点,我也可以使用这样的解决方案。有谁能帮我解决这个问题吗?
发布于 2013-12-16 22:01:55
与此同时,我主要在这个帖子中找到了答案:
http://gstreamer-devel.966125.n4.nabble.com/fork-and-then-use-gstreamer-functions-td972935.html
在派生的进程中使用gstreamer是一种拖累,因为可能存在关于gst主循环和所涉及的资源的访问冲突。但是,gst.Bus.pop()并不与内部gst循环结构交互(这是peek()和gst.Bus.pop()各自独立完成的),并且通过使用gst.Bus.pop(),我能够毫无问题地从总线检索消息!
https://stackoverflow.com/questions/20611789
复制相似问题