gpt4 book ai didi

python - 使用 Coherence(或 GUPnP)?流式传输 A/V?

转载 作者:行者123 更新时间:2023-11-30 23:28:52 28 4
gpt4 key购买 nike

在寻找通过 uPnP 流式传输音频/视频的解决方案一段时间后,Coherence 似乎是最有前途的选择:例如:http://coherence.beebits.net/browser/trunk/Coherence/coherence/backends/gstreamer_renderer.py似乎是直接在 HDMI 电视适配器上播放文件所需要的。

奇怪的是,安装 Ubuntu coherence 包后,在 Python 终端中运行 import coherence 并没有真正显示类似此模块的任何内容。 bpython 中的 Tab 补全显示:

>>> 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 控制点列出 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盒推送模型”),媒体服务器部分没有那么复杂,但仍然需要完成。

您可能感兴趣的一个项目是 dleyna:它基于 GUPnP,并试图使客户端工作更容易一些。请参阅Jens' article和文档 PushHost 。然而 dleyna 是一组 D-Bus 服务,而不是一个库,因此您必须决定它是否适合您的目的。

或者,您当然可以运行一个普通的媒体服务器(如 rygel)并使用控制点(如 gupnp-tools 中的 gupnp-av-cp)来选择您想要播放的媒体以及应该播放它的渲染器。

关于python - 使用 Coherence(或 GUPnP)?流式传输 A/V?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21423249/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com