Skip to main content
 首页 » 编程设计

python之如何阻止 Gstreamer 尝试初始化 X11

2025年05月04日12mayingbao

我一直在尝试创建一个我想从命令行运行的简单音频播放器,为此我使用了 Gstreamer 和 pygst python 绑定(bind)到目前为止,我的代码如下所示:

import pygst 
pygst.require('0.10') 
import gst 
import os 
 
class Player(object): 
    mp3stream = "http://http-live.sr.se/p1-mp3-192" 
 
    def __init__(self): 
        self.pipeline = gst.Pipeline("RadioPipe") 
        self.player = gst.element_factory_make("playbin", "player") 
        self.pipeline.add(self.player) 
 
        self.player.set_property('uri', self.mp3stream) 
        self.pipeline.set_state(gst.STATE_PLAYING) 
 
player = Player() 
 
while 1: 
    if(1 == 2): 
        break     

现在由于某种原因,当我运行这段代码时,我收到以下警告:

** (radio.py:7803): WARNING **: Command line `dbus-launch --autolaunch=f12629ad79391c6f12cbbc1a50ccbcc8 --binary-syntax --close-stderr' exited with non-zero exit status 1: Autolaunch error: X11 initialization failed.\n 

我可以毫无问题地播放音乐,但我很想摆脱这些警告,现在我假设 Gstreamer 库出于某种原因试图启动需要 X11 但对于音频播放部分不是必需的。欢迎就此假设的有效性提出任何意见。

我可以导入其他东西或传递某种标志来阻止 Gstreamer 尝试初始化 X11 吗?

编辑 1

我试过添加这个:

fakesink = gst.element_factory_make("fakesink", "fakesink") 
self.player.set_property("video-sink", fakesink) 

根据documentation上面的代码将禁用自动启用视频流。但是,这并不能解决我的警告问题。

编辑 2

好吧,element(?) playbin 就像是一些音频和视频相关内容的现成管道,抱歉,我现在无法更好地解释它。然而,playbin 似乎初始化了一些试图访问 X11 的 elements(?)。我猜因为我没有播放任何与视频相关的东西,所以它不会崩溃。我已经设法编辑了一些 playbin 元素(?),但它们都没有修复 X11 警告。

当前代码如下所示:

self.pipeline = gst.Pipeline("RadioPipe") 
 
self.player = gst.element_factory_make("playbin", "player") 
pulse = gst.element_factory_make("pulsesink", "pulse") 
fakesink = gst.element_factory_make("fakesink", "fakesink") 
 
self.player.set_property('uri', channel) 
self.player.set_property("audio-sink", pulse) 
self.player.set_property("video-sink", fakesink) 
 
self.pipeline.add(self.player) 

元素后的问号与我不确定这是正确的措辞有关。

请您参考如下方法:

您应该能够在 playbin 的 flag 属性中禁用 video 标志。或者,如果您确实需要视频并且知道您需要哪个视频接收器,请相应地设置 video-sink 属性。