亚当的python脚本正是我所需要的。辉煌。带有gst-launch的Rygel不适用于我的渲染器之一,但此脚本可同时用于这两个渲染器。就我而言,我要从squeezelite(用于squeezebox)输入音频流,然后发送到渲染器。如果需要的话,该脚本还可以原始形式工作,以从PulseAudio监视器获取输入。
几乎不了解这些,我设法对脚本进行了一些补充:
i)允许它从Shell脚本运行并以SIGTERM / SIGKILL终止(“ except”语句现在包括“ systemexit”)
ii)允许脚本停止并重新启动,然后重新使用同一端口(因为重新启动的脚本倾向于失败,即如果渲染器仍将其打开则无法打开该端口)-(allow_reuse_address = True语句)
iii)制作一个从stdin输入并使用sox重新采样以wav格式输出的版本(在端口8082上)
所以我的版本看起来像:
#!/usr/bin/python
import BaseHTTPServer
import SocketServer
import subprocess
PORT = 8082
MIMETYPE = 'audio/x-wav'
BUFFER = 65536
class Handler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_HEAD(s):
print s.client_address, s.path, s.command
s.send_response(200)
s.send_header('content-type', MIMETYPE)
s.end_headers()
def do_GET(s):
s.do_HEAD()
pa = subprocess.Popen('sox -t raw -r 96000 -b 24 -L -e signed -c 2 - -t wav -r 44100 -b 16 -L -e signed -c 2 - ', shell = True, bufsize = BUFFER, stdout = subprocess.PIPE)
while True:
data = pa.stdout.read(1024)
if len(data) == 0: break
s.wfile.write(data)
print 'stream closed'
SocketServer.TCPServer.allow_reuse_address = True
httpd = SocketServer.TCPServer(("", PORT), Handler)
print "listening on port", PORT
try:
httpd.serve_forever()
except (KeyboardInterrupt, SystemExit):
pass
httpd.server_close()