Дано:
Скрипт для перекодирования (работают все варианты, неиспользуемые закомментированы) flac2mp3_vt.sh:
Взято тут http://blog.timofeyev.ru/2010/10/18/linux_samsung_upnp_dlna_server
- Телевизор 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>
#!/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"
Итоговый файл конфигурации (некоторые поля заменены на ***) MediaTomb config for Samsung TV, 2 kB .
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), в качестве решения подходит такая командаВзято тут http://blog.timofeyev.ru/2010/10/18/linux_samsung_upnp_dlna_server
ноября 7, 2010 в 13:05 У меня Samsung UE37C6000RW, Kubuntu 10 + MediaTomb.
Пока заставить их работать не удаётся. На телике видно медиафайлы, но при попытке воспроизведения — «Неподдерживаемый формат». На все типы контента.
Зато точно выявлено, что предложенный здесь (и в др источниках) add header содействует крушению MediaTomb´а после неудачных попыток воспроизведения.
ноября 7, 2010 at 16:58
В качестве первого шага, все должно работать и с Windows Media Player. После установки MediaTomb c конфигурацией «по умолчанию», ПК все отрабатывает, в отличие от телевизора. За все время ковыряний падений не происходило ни при каких условиях.
декабря 17, 2010 at 22:07
Если установлен KiS11 обязательно настрой сетевой экран.Найди в нем PC Share Manager-сеть,найди свою локальную сеть измени статус сети на «доверенная»и будет тебе счастье. содержимое папок увидишь!
ноября 7, 2010 в 17:42 Медиасервер под Windows7 работает и воспроизводит всё нормально. MediaTomb по-умолчанию вел себя также как и сейчас. Только сейчас он превьюшки показывает.
ноября 15, 2010 at 22:09
Возможно, крушения вызваны другой сборкой/версией MediaTomb в Kubuntu.
У меня версии пакетов такие:
main 0.11.0-3
base 0.11.0-3+b4
daemon 0.11.0-3
ноября 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.
Есть идеи?
ноября 15, 2010 at 17:27
Идея: в WEB-GUI файлы видны в соответствующих ветках деревьев Audio, Video?
ноября 15, 2010 в 19:08 Да на сервере все нормально, показывает что сохранил все фаилы. Стартует и все ок. С VLC на сервере показывает но вот с телека видит только папки и говорит что в них пусто. Уже перегуглил весь инет, проверял конфиг 10 раз) Где-то вычитал, что в Samsung в 6 серии по дурацки сделано DLNA, смотрел обновление прошивок, но там с DLNA никаких фиксов не производилось
ноября 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 фаилы тоже не видит. Как-то очень странно
ноября 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 пакет такой отсутствует.
Можно скачать его в тестовых репах сквиза, но на ленни не собирается. Решали данную проблему как-нибудь?
ноября 19, 2010 at 16:25
Поздравляю с успехом!
Тоже хотел сделать, но ffmpeg неожиданно умер, оживить пока не смог, так что иконки к фильмам мне не сделать. Имхо, это актуально если хранить постоянную коллекцию фильмов и клипов.
ноября 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? или что еще?
Спасибо.
декабря 28, 2011 at 9:47
Обычно в таком случае ставится XBMC, но можно что-то еще (http://en.wikipedia.org/wiki/List_of_UPnP_AV_media_servers_and_clients#Linux).
декабря 28, 2011 at 11:33
спасибо. будем пробовать
декабря 29, 2011 в 19:32 Еще раз спасибо за мануал!
Телевизор увидел сервер и его содержимое.
Но из видио показывает только MKV. На avi говорит «Формат файла не поддерживается». Формат файлов avi/XviD или divx.
Что-нть с этим можно сделать?
Спасибо.
декабря 30, 2011 at 15:41
Проверить AVI прямо на телевизоре через USB. Если не играет — дальше можно не мучиться, если напрямую играет, то смотреть конфиг mediatomb'а, там в моем примере есть настройки mimetype для телевизора.