Дано:
- Телевизор Samsung LE-40C550J1W(R)
- Файл-сервер на Debian Lenny Linux, хранящий архив музыки в MP3 и FLAC
Задача:
- Подключить телевизор к локальной сети
- Настроить доступ телевизора к музыкальной библиотеке для прослушивания музыки
- Настроить воспроизведение видео по сети
Решение:
Подключение телевизора проще всего делать обычным проводом, т.к. Wi-Fi адаптер для него небыстрый и по цене сравним с сетевым HD-плеером.
Раз телевизор сам не умеет "ходить" по сетевым ресурсам, других вариантов, кроме настройки UPNP-сервера вроде как и не предвидится. Из всего многообразия UPNP-серверов, приведенного на википедии, после сравнения их характеристик, я выбрал MediaTomb, как максимально "упакованный" из бесплатных с развитой поддержкой перекодирования, что в данном случае крайне важно, т.к. телевизоры, в отличие от ПК, почему-то не умеют проигрывать FLAC.
Установка MediaTomb под Debian очень простая и описывается в один абзац тут. Конфигурация по-умолчанию уже годится для использования, добавить папки можно через WEB-GUI (ярлык в меню "Программы" создается автоматически). В результате, Windows Media Player видит UPNP-сервер, видит на нем файлы, умеет играть FLAC с отображением тэгов. А вот телевизор не увидел сервера вообще. Лечится раскомментированием следующих строчек в файле конфигурации config.xml:
<custom-http-headers><add header="X-User-Agent: redsonic"/>
<add header="transferMode.dlna.org: Streaming"/>
<add header="contentFeatures.dlna.org: DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=017000 00000000000000000000000000"/>
</custom-http-headers>
И перезапуском демона командой #/etc/init.d/mediatomb restart, причем сразу можно увидеть есть ли ошибки в конфиге.
Теперь телевизор все видит, но играет только MP3, а на FLAC ругается "неизвестный формат".
Попутно обнаружилась одна проблема - русские файлы нормально не отображаются. Решение очень простое и заключается в добавлении следующих трех строк в файл config.xml вмежду тэгами </server> и <import hidden-files="no">
<filesystem-charset>UTF-8</filesystem-charset>
<metadata-charset>UTF-8</metadata-charset>
<playlist-charset>UTF-8</playlist-charset>
Для воспроизведения FLAC на устройствах, его неподдерживающих, положено настраивать перекодирование на лету в удобоваримый формат. Сразу же выяснилось, что кодеков в Debian Lenny не предусмотрено из-за лицензионной политики, но их можно поставить с отдельного репозитория. Инструкция по установке кодеков есть прямо на сайте Debian.org.
Перекодирование включается опцией <transcoding enabled="yes">, далее, в зависимости от форматов, в конфигурационном файле прописывается команда перекодирования. Конфигурация по-умолчанию не заработала. Пришлось попрыгать вечер с бубном, в итоге, самое простое решение -- внешний скрипт для кодирования, на вход которому подаются параметры входных/выходных потоков. Скрипт намного более универсален -- при подборе нет необходимости в перезапуске демона, его можно отладить в консоли и он обходит ограничение MediaTomb, не позволяющее запускать цепочку команд.
В результате у меня получились три версии скрипта:
- с использованием ffmpeg и переводом FLAC -> MP2
- Комбинация FLAC->WAV->LAME (MP3)
- с использованием Gstreamer и переводом FLAC->MP3 (сохраняет тэги и встроенные обложки)
К сожалению, при любом варианте выхода в MP3 были проблемы с буферизацией на телевизоре, пляски с бубном вокруг параметров буферизации MediaTomb результатов не давали, в худших случаях телевизор просто отказывался воспроизводить поток. При этом ПК уверенно все переваривал. Возможно, это было вызванно недостатком вычислительной мощности Linux-сервера, хотя по моим замерам, перекодирование FLAC->MP3 происходило в три раза быстрее длительности файла. Так что в итоге я оставил перекодировку звука в формат MP2 с битрейтом 320кбит/с. Был даже произведен вариант скрипта, сохраняющий тэги и вложенные обложки, но, к сожалению, телевизор их не распознал в таком виде, в отличие от UPNP-клиентов на обычном ПК. При этом, из обычных MP3 файлов телевизор прекрасно получает тэги, обложки и т.п. Возможно, проблема где-то еще, но на музыку это не влияет.
Часть моего конфига, отвечающая за перекодирование:
<transcoding enabled="yes">
<mimetype-profile-mappings>
<transcode mimetype="audio/x-flac" using="audio-flac"/>
</mimetype-profile-mappings>
<profiles>
<profile name="audio-flac" enabled="yes" type="external">
<mimetype>audio/mpeg</mimetype>
<accept-url>no</accept-url>
<first-resource>yes</first-resource>
<hide-original-resource>yes</hide-original-resource>
<accept-ogg-theora>no</accept-ogg-theora>
<sample-frequency>44100</sample-frequency>
<audio-channels>2</audio-channels>
<agent command="/usr/bin/flac2mp3_vt.sh" arguments="%in %out"/>
<buffer size="1048576" chunk-size="262144" fill-size="262144"/>
</profile>
</profiles>
</transcoding>
Скрипт для перекодирования (работают все варианты, неиспользуемые закомментированы) flac2mp3_vt.sh:
#!/bin/sh
#flac -d -f -c -s "$1" | lame -S --noreplygain --strictly-enforce-ISO --cbr -b 256 - "$2"
#flac -d -f -c -s "$1" | lame -S --cbr -b 128 - "$2"
#ffmpeg -y -i "$1" -acodec mp2 -ab 320k -ac 2 -f mp3 "$2"
#flac -d -f -c -s "$1" | lame -S --cbr -b 320 - "$2"
#flac -d -f -c -s "$1" | lame -S --cbr -b 128 - "$2"
#gst-launch filesrc location = "$1" ! flacdec ! audioconvert! lame vbr=0 bitrate=320 ! id3mux name=tag v2-tag=true v1-tag=true ! filesink location = "$2"
ffmpeg -y -i "$1" -acodec mp2 -ab 320k -ac 2 -f mp3 "$2"
Итоговый файл конфигурации (некоторые поля заменены на ***) [download id="8" format="1"] .
PS: Видео он тоже выдает, только вот некоторые файлы телевизор видит, а играть отказывается, ссылаясь на неподдерживаемый формат, хотя будучи скопированными на USB-носитель телевизором они прекрасно играются.
Дополнение от 27.10.10:
Формат MKV (Matroska) с первой версией конфига не проигрывался. Оказывается, телевизорам Samsung нужно выдавать в описании потока X-MKV вместо X-MATROSKA. Правится корректировкой строки файла конфигурации (вложение обновил) с
<map from="mkv" to="video/x-matroska"/>
на
<map from="mkv" to="video/x-mkv"/>
Дополнение от 02.11.10:
Неожиданно "умер" ffmpeg. При любой попытке обращения к FLAC-файлам возникает ошибка сегментирования (segmentation fault), в качестве решения подходит такая команда
flac -d -f -c -s "$1" | twolame -r -s 44100 -N 2 -b 320 --quiet - "$2"
7 ноября, 2010 в 13:05
У меня Samsung UE37C6000RW, Kubuntu 10 + MediaTomb.
Пока заставить их работать не удаётся. На телике видно медиафайлы, но при попытке воспроизведения — «Неподдерживаемый формат». На все типы контента.
Зато точно выявлено, что предложенный здесь (и в др источниках) add header содействует крушению MediaTomb´а после неудачных попыток воспроизведения.
Ответить
Vasiliy Reply:
7 ноября, 2010 at 16:58
В качестве первого шага, все должно работать и с Windows Media Player. После установки MediaTomb c конфигурацией «по умолчанию», ПК все отрабатывает, в отличие от телевизора. За все время ковыряний падений не происходило ни при каких условиях.
Ответить
hal69 Reply:
17 декабря, 2010 at 22:07
Если установлен KiS11 обязательно настрой сетевой экран.Найди в нем PC Share Manager-сеть,найди свою локальную сеть измени статус сети на «доверенная»и будет тебе счастье. содержимое папок увидишь!
Ответить
7 ноября, 2010 в 17:42
Медиасервер под Windows7 работает и воспроизводит всё нормально. MediaTomb по-умолчанию вел себя также как и сейчас. Только сейчас он превьюшки показывает.
Ответить
Vasiliy Reply:
15 ноября, 2010 at 22:09
Возможно, крушения вызваны другой сборкой/версией MediaTomb в Kubuntu.
У меня версии пакетов такие:
main 0.11.0-3
base 0.11.0-3+b4
daemon 0.11.0-3
Ответить
max Reply:
17 ноября, 2010 at 10:22
На телевизоре есть система Media Play ?
Ответить
15 ноября, 2010 в 14:39
все установил, учел все инструкции
но комп с Медиа плеером ничего не видит.
Телик видит только списки директорий, а фаилов внутри нет(
В лог пишется странное сообщение:
tail /var/log/mediatomb.log
2010-11-12 00:16:16 ERROR: ActionRequest::update(): response is nil, code -115
2010-11-12 00:16:18 ERROR: ActionRequest::update(): response is nil, code -115
2010-11-12 00:16:18 ERROR: ActionRequest::update(): response is nil, code -115
Посмотрел на сайте mediatomb
http://mediatomb.cc/doxygen/upnp_8h.html
#define UPNP_E_BAD_RESPONSE -113
UPNP_E_INVALID_ACTION [-115]
{ UPNP_E_INVALID_ACTION} signifies that the SOAP action message is invalid. This can be because the DOM document passed to the function was malformed or the action message is not correct for the given action.
Есть идеи?
Ответить
Vasiliy Reply:
15 ноября, 2010 at 17:27
Идея: в WEB-GUI файлы видны в соответствующих ветках деревьев Audio, Video?
Ответить
15 ноября, 2010 в 19:08
Да на сервере все нормально, показывает что сохранил все фаилы. Стартует и все ок. С VLC на сервере показывает но вот с телека видит только папки и говорит что в них пусто. Уже перегуглил весь инет, проверял конфиг 10 раз) Где-то вычитал, что в Samsung в 6 серии по дурацки сделано DLNA, смотрел обновление прошивок, но там с DLNA никаких фиксов не производилось
Ответить
Vasiliy Reply:
15 ноября, 2010 at 22:04
А если в дереве на web-gui посмотреть свойства элементов, у них будет class=object.item.videoItem; Mimetype=video/что-то там?
Я для известных типов файлов правил mimetype секцию в файле конфигураций, т.к. каждый производитель желает видеть свои тэги.
Ну и тоже интересно, MP3 играются? У них, соответственно, должно быть object.item.audioItem.musicTrack и audio/mpeg
Ответить
16 ноября, 2010 в 10:05
mp3 не пробовал, в конфиге вроде все типы тоже подправлял, сегодня ближе к вечеру гляну
Ответить
17 ноября, 2010 в 10:17
Вот конфиг который я юзаю
http://coherence-project.org/attachment/ticket/248/config.xml
не mp3 фаилы тоже не видит. Как-то очень странно
Ответить
Vasiliy Reply:
17 ноября, 2010 at 21:34
Если вообще файлы не видит, то либо это глобальная проблема с сервером (что маловероятно, т.к., как я понял, VLC играет), либо локальная проблема с конфигурацией. На первый взгляд видны отличия в секции «сustom -http-headers» и чуть ниже. Нужно убедиться, что в WEB-GUI файлы определились с правильными аттрибутами.
Еще можно попробовать Coherence UPNP Server, телевизор его тоже видит, включая все файлы на диске, но детально я глубоко не копался. И, если проводить корректировку параметров типов, нужно не только перезапускать MediaTomb, но и переиндексировать файлы, иначе аттрибуты не обновляются.
Ответить
18 ноября, 2010 в 9:58
ок, понял, спасибо) покопаюсь еще, если что нить интересное откопаю — отпишусь в вашем блоге
Ответить
19 ноября, 2010 в 10:19
Вчера доразбирался с Медиатомбом, стал проигрывать все ок) Но ошибка в лог все равно пишется.
Дело было не в этой ошибке о которой я писал выше. Надо очень серьезно подойти вот к этой секции параметров и правильно выставить mime type
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
пока точно знаю что данная секция содержит ошибки!
Буду искать нормальные контент тайпы и править.
Пауза и перемотка работают отлично без перекодировки.
Но вот я так и не понял как воспользоваться ffmpegtumbanaller в debian lenny пакет такой отсутствует.
Можно скачать его в тестовых репах сквиза, но на ленни не собирается. Решали данную проблему как-нибудь?
Ответить
Vasiliy Reply:
19 ноября, 2010 at 16:25
Поздравляю с успехом!
Тоже хотел сделать, но ffmpeg неожиданно умер, оживить пока не смог, так что иконки к фильмам мне не сделать. Имхо, это актуально если хранить постоянную коллекцию фильмов и клипов.
Ответить
max Reply:
22 ноября, 2010 at 13:27
удобно определять тот фильм который ты смотрел по тумбаналке, потому что она должна тормозиться и в следующий раз перегенериться на месте где была остановка ролика
Ответить
19 ноября, 2010 в 10:21
mimetype-contenttype>
treat mimetype=»audio/mpeg» as=»mp3″
treat mimetype=»application/ogg» as=»ogg»
treat mimetype=»video/x-divx» as=»avi»
вот теги порезались)) stripslashes — не очень красивая обработка))))
Ответить
28 декабря, 2011 в 7:53
А как можно схему проверить до подключения телека? я по вашей инструкции mdiatomb поднял, телека пока нет — а проверить надо. Дома только linux-машины, WMP нет. Какой клиент для этого есть? VLC? или что еще?
Спасибо.
Ответить
vasiliy Reply:
28 декабря, 2011 at 9:47
Обычно в таком случае ставится XBMC, но можно что-то еще (http://en.wikipedia.org/wiki/List_of_UPnP_AV_media_servers_and_clients#Linux ).
Ответить
ujinsky Reply:
28 декабря, 2011 at 11:33
спасибо. будем пробовать 🙂
Ответить
29 декабря, 2011 в 19:32
Еще раз спасибо за мануал!
Телевизор увидел сервер и его содержимое.
Но из видио показывает только MKV. На avi говорит «Формат файла не поддерживается». Формат файлов avi/XviD или divx.
Что-нть с этим можно сделать?
Спасибо.
Ответить
vasiliy Reply:
30 декабря, 2011 at 15:41
Проверить AVI прямо на телевизоре через USB. Если не играет — дальше можно не мучиться, если напрямую играет, то смотреть конфиг mediatomb'а, там в моем примере есть настройки mimetype для телевизора.
Ответить