如何阻止Gstreamer初始化X11
我一直在尝试创建一个简单的音频播放器,想通过命令行来运行。为此,我使用了 Gstreamer
和 pygst
这个 Python 库,到目前为止我的代码是这样的:
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)
根据文档,上面的代码会禁用自动启用视频流的功能。不过,这并没有解决我遇到的警告问题。
编辑 2
好的,element(?) playbin
就像是一个现成的管道,连接了多个与音频和视频相关的东西,抱歉我现在无法更好地解释。不过,似乎 playbin 初始化了一些 elements(?)
,这些东西试图访问 X11
。我猜因为我没有播放任何与视频相关的内容,所以它并没有崩溃。我已经尝试编辑了一些 playbin elements(?)
,但没有一个能解决 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)
元素后面的问号是因为我不确定这个词是否正确。
1 个回答
1
你可以在playbin的flag
属性中关闭video
这个选项。如果你确实需要视频,并且知道要用哪个视频输出设备,可以相应地设置video-sink
属性。