在寻找了一些通过uPnP流式传输音频/视频的解决方案之后,Coherence似乎是最有前途的选择:例如:http://coherence.beebits.net/browser/trunk/Coherence/coherence/backends/gstreamer_renderer.py似乎是直接将文件播放到HDMI TV加密狗所需要的。
奇怪的是,在安装Ubuntu一致性软件包之后,在Python终端中运行import coherence
并不会真正显示该模块。 bpython中的制表符补全显示:
>>> coherence.
┌───────────────────────────────────────────────────────────────────────────┐
│SERVER_ID Version platform │
│sys twisted_version twisted_web_version │
└───────────────────────────────────────────────────────────────────────────┘
这些子模块似乎只是提供有关系统的信息。如何导入和使用Coherence将桌面或视频流式传输到uPnP屏幕?有基本的入门指南吗?
更新资料
看起来GUPnP可以链接到Python:
>>> from gi.repository import GUPnP
>>> GUPnP.ControlPoint.new()
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: new() takes exactly 2 arguments (0 given)
显然是在调用此处记录的函数:
https://developer.gnome.org/gupnp/unstable/GUPnPControlPoint.html
不幸的是,文档没有关于如何流式传输到视频接收器的完整示例-具体来说,它是如何启动通过网络发送视频文件的?
更新:这是我用来检测设备的第一步:
import socket
import threading
import time
Addr = None;
StartLock = threading.Lock()
def DoUDP():
global Addr
global StartLock
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #Internet, UDP
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
while 1:
s.sendto('0:0',('192.168.0.255',63630))
data,addr = s.recvfrom(1024)
print data
print 'from', addr
Addr = addr
try:
StartLock.release()
except:
pass
time.sleep(1)
return
StartLock.acquire()
print 'starting...'
udpthread = threading.Thread(target=DoUDP)
udpthread.start();
#... knowing address of the device... send stuff?
最佳答案
关于python上的GUPnP:它没有得到广泛使用,并且绝对没有足够好的文档记录,但是它应该可以工作。这是使用GUPnP ControlPoint列出wlan0网络上可用设备的快速示例:
from gi.repository import GLib, GUPnP
def device_available (cp, proxy):
print ("Found " + proxy.get_friendly_name ())
ctx = GUPnP.Context.new (None, "wlan0", 0)
cp = GUPnP.ControlPoint.new (ctx, "upnp:rootdevice")
cp.set_active (True)
cp.connect ("device-proxy-available", device_available)
GLib.MainLoop ().run ()
“流式传输到渲染器”的问题在于,您实际上需要两件事:告诉渲染器您要播放的内容的控制点,以及在渲染器要求时为实际媒体提供服务的媒体服务器-如果这些已集成合二为一(称为“ 2-box push model”),mediaserver部分虽然不那么复杂,但仍需要完成。
dleyna是您可能感兴趣的一个项目:它基于GUPnP,并试图使此客户端工作更容易一些。请参见Jens' article和PushHost文档。但是dleyna是D-Bus服务的集合,而不是库,因此您必须确定它是否适合您的目的。
另外,您当然也可以运行普通的媒体服务器(如rygel),并使用控制点(如gupnp-tools的gupnp-av-cp)选择要播放的媒体和应播放的渲染器。