Потоковое воспроизведение медиафайлов через DLNA/UPnP

В настоящее время я использую Raspbmc на своем Raspberry Pi и активировал UPnP для потоковой передачи рендеринга.

Моя цель — написать простой Python для потоковой передачи видео или музыкального плейлиста.

Я пробовал Coherence, но он выдает кучу исключений, и я действительно не понимаю указать, поскольку документация довольно хаотична. Поэтому я ищу более простой способ/библиотеку.

Какой самый простой способ потоковой передачи медиафайлов на мой телевизор с помощью Python?


person WhatIsName    schedule 21.03.2013    source источник
comment
Насколько я понимаю, DLNA - довольно сложный стандарт, поэтому (я предполагаю здесь) исключения могут быть чем-то, с чем вам придется иметь дело. Может быть, стоит упомянуть, какие из них вы получаете? Если вам не нужно писать программу самостоятельно, Mediatomb и minidlna могут выполнять потоковую передачу с Pi.   -  person Samizdis    schedule 21.03.2013
comment
Спасибо, посмотрю на Mediatomb и minidlna. Ну, как я уже сказал, я получаю, наверное, сотню исключений, просто начиная когерентность, но большинство из них так или иначе связаны с Торнадо: 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)   -  person WhatIsName    schedule 21.03.2013
comment
Вы достигли того, что хотели сделать? Я тоже пробую когерентность, но она кажется искаженной, и когерентность плохо работает вместе, если вы не исправите файлы когерентности.   -  person Depado    schedule 04.04.2013
comment
Можете ли вы опубликовать свой код до сих пор?   -  person NoBugs    schedule 01.02.2014
comment
DLNA — это сложный проприетарный протокол. В настоящее время я использую minidlna   -  person johntellsall    schedule 24.05.2014
comment
@Depado Coherence отстает от искривленного. Вам нужно использовать более старую версию Twisted, если вы хотите работать с ней.   -  person unode    schedule 17.06.2014
comment
Я написал небольшой клиент dlna, используя PyGTK и Coherence, который больше похож на браузер папок. В моем случае потоковая передача выполняется mplayer (как только вы знаете URL-адреса, это очень просто). Это еще не общедоступно, потому что это скорее взлом для личного использования. Если вы можете показать нам ошибки, возможно, мы сможем добавить некоторые рекомендации. Я также исправил Coherence, чтобы разрешить загрузку субтитров (проверено только с сервером minidlna). Вы можете найти исправленную версию на github.com/Unode/Coherence.   -  person unode    schedule 17.06.2014
comment
Это звучит интересно. Мне нравится хакерский способ. Не могли бы вы показать мне несколько примеров вашего кода? (Не все, если не хотите обнародовать, а основную часть?)   -  person Depado    schedule 19.06.2014


Ответы (3)


Существует легкая библиотека на чистом питоне dlnap, которая позволяет воспроизводить мультимедиа на устройствах DLNA/UPnP в той же локальной сети.

person Pavel Cherezov    schedule 13.10.2016

Вы можете использовать привязку GUPnP для python через репозиторий gi.. Найдите документацию по GUPnP и GSSDP, GUPnP AV.

Вы можете соединить их с чем-то вроде мини-веб-сервера, работающего с базой данных django + SQLite, чтобы определить своего рода службу каталогов контента (CDS), также вы можете использовать Gstreamer (существует привязка python под названием Gst). С этими элементами вы можете создать собственный сервер, используя SSDP для обнаруженных вещей; из gstreamer вы можете получить метаданные о каждом элементе мультимедиа, а также можете использовать «rtspsrc» gstreamer для потоковой передачи.

person Narcisse Doudieu Siewe    schedule 13.03.2015

Только для аудио я получил хорошие результаты с rygel. Сложность заключается в настройке коннектора pulseaudio GstLaunch в файле .config/rygel.conf. Вот мой раздел, но вы можете получить правильный источник 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
person Pivert    schedule 21.09.2014