通过DLNA/UPnP传输流媒体文件

17

我目前在我的树莓派上运行Raspbmc,并激活了UPnP流媒体和渲染功能。

我的目标是编写一个简单的Python程序来流式传输视频或音乐播放列表。

我尝试过Coherence,但它抛出了许多异常,而且我不太明白它的要点,因为文档十分混乱。因此,我正在寻找一种更简单的方式/库。

使用Python将媒体文件流式传输到我的电视的最简单方法是什么?


1
据我所知,DLNA是一个相当复杂的标准,所以(我猜)异常可能是你必须处理的问题。也许值得提一下你遇到了哪些异常? 如果您不需要自己编写程序,Mediatomb和minidlna都可以从树莓派进行流媒体传输。 - Samizdis
1
谢谢,我会看一下Mediatomb和minidlna。 就像我说的那样,我只是启动coherence就可能会出现100个异常,但其中大多数与Tornado有关: File "/Users/.../Envs/UPNP/lib/python2.7/site-packages/twisted/internet/selectreactor.py", line 145, in doSelect _logrun(selectable, _drdw, selectable, method, dict) --- <exception caught here> --- File "/Users/.../Envs/UPNP/lib/python2.7/site-packages/twisted/python/log.py", line 88, in callWithLogger return callWithContext({"system": lp}, func, *args, **kw) - WhatIsName
你达到了想做的事情吗?我也在尝试使用coherence,但是似乎twisted和coherence不太兼容,除非你修补一下coherence文件。 - Depado
1
你能把你目前的代码发出来吗? - NoBugs
DLNA是一种复杂的专有协议。我目前正在使用minidlna - johntellsall
显示剩余3条评论
3个回答

5

有一个轻量级的纯Python库dlnap,可以在同一本地网络上的DLNA/UPnP设备上播放媒体。


1

仅音频, 我使用rygel获得了良好的结果。棘手的部分是在.config/rygel.conf中配置GstLaunch pulseaudio连接器。这是我的部分,但您可以使用以下命令获取正确的pulseaudio源:

pactl list | egrep -A2 '^(\*\*\* )?Source #' | grep 'Name: .*\.monitor$' | awk '{print $NF}' | tail -n1

这是我的GstLaunch部分:

[GstLaunch]
enabled=true
launch-items=myaudiowav;myaudiompeg

myaudiowav-title=WAV audio on @HOSTNAME@
myaudiowav-mime=audio/x-wav
myaudiowav-launch=pulsesrc device=alsa_output.pci-0000_00_14.2.analog-stereo.monitor ! audio/x-raw,channels=2 ! wavpackenc

myaudiompeg-title=MPEG audio on @HOSTNAME@
myaudiompeg-mime=audio/mpeg
myaudiompeg-launch=pulsesrc device=alsa_output.pci-0000_00_14.2.analog-stereo.monitor ! audio/x-raw,channels=2 ! lamemp3enc target=quality q
uality=6

1
你可以通过 gi.repository使用 GUPnP 绑定 Python。搜索文档,寻找有关 GUPnP、GSSDP 和 GUPnP AV 的信息。
你可以将它们与运行 Django + SQLite 数据库的迷你 Web 服务器配对,以定义一种内容目录服务 (CDS)。同时,你也可以使用 Gstreamer (存在一个名为 Gst 的 Python 绑定)。借助这些元素,你可以使用 SSDP 构建自定义服务器以发现内容;从 gstreamer 可以获取有关每个媒体项的元数据,并且还可以使用 gstreamer 的“rtspsrc”进行流式传输。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接