Wednesday, December 31, 2008

Как весело провести праздники

Ситуация самая простая: если есть коллекция музыки и видео в одном месте, то нет ничего глупее, чем таскать части коллекции за собой, как прицепившиеся колючки лопуха. Это кажется вполне очевидным, что удобнее to stream media files over a network, чем с грустью вспоминать, как последний альбом Eluveitie остался лежать дома, а на ступеньках парадного лед, который никто не желает убирать, а еще что Днепр зимой похож на Волгу, потому что проплыть по нему можно только на ледоколе. Вспоминать, что с неба сыпет белая дрянь, а по утрам, заканчивая завтрак, с особенной ненавистью поглядывать на последнюю страницу Коммерсанта, где напечатанная температура в Сиднее будит одновременно удрученность и поток проклятий на свой адрес.

Так вот. Чтобы не быть полевым хорьком, бегающим в зубах с flash дисками и dvd (навсегда и безнадежно устаревшей чепухой), нужно поднять RTP сервер для трансляции музыки и видео в то место, где ты находишься. Это, кажется, ясно решительно всем.

Проблемы начинаются, когда узнаешь, что divx/xvid файлы нужно перекодировать в нечто, поддающееся, говоря русским языком, seekable'льности по RTSP. Например, mpeg-4. Это касается фильмов; с музыкой проще, т.к. пустить по RTP mp3 файл можно достаточно легко и без всякой перекодировки, например, посредством live555MediaServer, который идет в качестве example в комплекте c liveMedia. В качестве домашнего задания читателю можно предложить упражнение по написанию простого web-каталога с генерацией списка коллекции в виде rtsp:// ссылок.

Какой RTP и RTSP сервер выбрать? Я провел очень плохой вечер копошась с ffmpeg и vlc, чтобы потом совершенно случайно узнать, что у меня vlc был собран без faac и faad2 и мой аккуратно сварганенный тестовый sample.mp4 (ffmpeg'ом и mp4creator'ом из mp3-файла) vlс игнорировал не потому что у него вредный характер, а потому что у кого-то кривые руки.

Впрочем, Darwin Streaming Server (DSS) есть давно в портах FreeLSD, и списком зависимостей, в отличие от ffmpeg и vlc, испугать не способен. Кроме того, многие клевещут, что с ним "все работает".

Ладно. Собираем порт, читаем pkg-message и хватаеся за сердце: Mozilla, Netscape4/7 and Opera etc... are not useful. DSS Administration Tool requires MSIE(4.5 and later) J-Script feature. Пробуем DSS Administration Tool из firefox и видим, что не все так страшно.

Когда я вижу конфигурационные файлы в xml (а /usr/local/etc/streaming/streamingserver.xml им в Darwin Streaming Server и является), то всегда вспоминаю теплые слова Торвальдса по поводу конфигурационных файлов Gnome:

In past discussions, I've seen people think that since I'm a "developer", I should use a text-editor to edit binary configuration files by hand (and anybody who calls XML "text" has drunk a bit too much of the cool-aid).

Не смотря на эту пакость с конфигурированием, DSS запускается без малейших проблем, а gmp4player и vcl счастливо запели мой sample.mp4.

После тяжелой 2-й Пунической войны, народ Рима, не успев вернуть солдат из легионов Спициона в Африке, по совету сената, тут же начал войну Македонскую. Точно так же, закончив с RTP сервером, я начал воевать с Windows Media Player.

Кому дорого свое время, наилучшим решением будет положить на WMP и пользовать для смотрения трансляций версию плеера vlc под Windows. Кому нужен лишний геморрой, будет запускать wireshark, смотреть как WMP посылает по RTSP метод DESCRIBE, читает красивый ответ от DSS с кодом 200, потом, полагая что вы совершенный идиот, попытается спросить ваш http-сервер о наличие sample.mp4 и после этого покажет окошко "с ошибкой", как всегда, дающее абсолютный нуль информации.

Гугление показывает, что WMP умеет streaming только для своих asf и wma, так что не поддавайтесь на рекламу "мы можем rtsp, мы можем mpeg-4". Mpeg-4 оно может только для локальных файлов. В году 2002-м родился enviviotv plugin для WMP, который якобы позволял играть mpeg-4 RTP поток из Darwin Streaming Server, о чем даже писали в Linux Journal. Сейчас от enviviotv на сайте envivio.com отстался только пресс-релиз, а plugin ушел куда-то глубоко под воду, исследовать темные глубины океана. Сегодня, какие-то веселые парни из Elecard Ltd предлагают Elecard AVC Streaming PlugIn for WMP всего за $40, так что если вдруг, то вы знаете что делать; я же скачал неясно какой свежести версию enviviotv.exe и теперь стал особенно восхищаться происходящим.

Во-первых, оно все равно не может распознать mp4 сэмпл'ы идущие в комплекте с Darwin Streaming Server, хотя играет мой sample.mp4 (поправка от 2009-01-03: распознает, если вместо rtsp://foo.bar говорить e-rtsp://foo.bar). Во-вторых, если не трогать настройки enviviotv, при попытке начать издавать звуки, скромный WMP вместе с Vista от радости мигает экраном и показывает вот такое окно:

20 KB

Мне оно очень нравится.

Лечится убиранием галочки с "Use DirectDraw overlays if available" в %SystemRoot%\System32\EnvivioTVSettings.cpl. Btw, EnvivioTVSettings.cpl пускать нужно с правами администратора. Пожалуйста, не спрашивайте меня, почему сделано так удобно, что настройки enviviotv бывают только system wide.

В-третьих, harm, который наносит enviviotv вашему WMP, выразится кроме всего прочего и в том, что при проигрывании локальных файлов mp4 вы получите задержку (буферизации?) как будто они вам передаются по RTP с таким сомнительным рвением, как в России поют гимн. Эй! Dude, который администрирует Linux в потасканном свитере. Да-да, вы. Я вас имею ввиду. Прекратите нам тут на весь зал выводить голосом про белую овечку и продукты Microsoft. Комментарии по этому поводу слушать сил никаких нету. Хотя, конечно, я согласен граждане, иногда, чувствуешь себя ежиком из анекдота.