如何阻止Gstreamer初始化X11

2 投票
1 回答
1343 浏览
提问于 2025-04-17 20:08

我一直在尝试创建一个简单的音频播放器,想通过命令行来运行。为此,我使用了 Gstreamerpygst 这个 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属性。

撰写回答