В основе этого решения лежит MPlayer, который запускается из-под скрипта tablet-encode для перекодирования видео. Данные в сеть раздает другой перловый скрипт - mediaserv. Вся эта связка уже натаскана на maemo, осталось только запустить и насладиться. Решение годится скорее для домашней сети, чем для вещания в инет, хотя некие наметки для многопользовательского режима все-таки есть.
Итак, последовательные шаги.
1. Установка MPlayer.
Качаем исходники MPlayer, распаковываем. Качаем оттуда же бинарные кодеки, распаковываем и копируем в /usr/local/lib/codecs.
Поскольку мы будем собирать пакет .deb, нам потребуются fakeroot и debhelper, установите их, если только вы уже не занимаетесь сборкой пакетов debian на этой машине. Также для MPlayer потребуется libconfhelper-perl и liblogfile-rotate-perl:
Только после всего этого заходим в распакованный MPlayer и говорим:
sudo apt-get install fakeroot debhelper \
libconfhelper-perl \
liblogfile-rotate-perl
DEB_BUILD_OPTIONS="--enable-largefiles --disable-tv" fakeroot debian/rules binary
Полный список опций скажет ./configure --help, с другой стороны можно не пижонить и набирать просто fakeroot debian/rules binary. Результат, как всегда, лежит каталогом выше, устанавливаем его в систему:
sudo dpkg -i ../mplayer_1.0svn_i386.deb
2. Качаем и распаковываем tablet-encoder. Его можно закинуть в PATH, но это необязательно, главное помнить путь.
3. Качаем и распаковываем mediaserv. Распакуйте и запустите install.sh: он создаст в каталог ~/.mediaserv и поместит туда файл config. Пробегитесь по настройкам и установите как минимум путь к tablet-encoder.
Кроме того, надо позаботиться об установке пакетов, от которых зависит mediaserv:
sudo apt-get install libdatetime-format-mail-perl \
libdatetime-format-w3cdtf-perl \
libdatetime-perl \
libtest-manifest-perl
Для отдачи наружу RSS-ленты, потребуются перловые модули XML::RSS и XML::Parser. Автор рекомендует ставить их через CPAN, но в Debian уже есть пакеты:
sudo apt-get install libxml-rss-perl libxml-parser-perl
4. Запускайте mediaserv, он напишет конфигурацию и форкнется, повиснув сервером.
5. Идите в браузере по адресу и порту, который вы пробили в ~/.mediaserv/config, выбирайте нужное видео. Далее, запускается встроенный медиапроигрыватель и... можно смотреть.
Нюансы (а как же без них?)
1. Перекодированные файлы не проигрываются
У меня замечательно генерировались страницы с тумбалисами в браузере, но при тычке на картинку, перекодированные файлы решительно отказывались проигрываться. Почти сразу я выяснил, что перекодированный видеофайл имеет нулевую длину. Причиной этого оказалось нежелание tablet-encode работать с ключами -p smallest и -p small: отредактируйте config и выставьте качество в average - все должно заработать.
2. Русский язык в наименованиях файлов
(если вы - фанатик транслитерационного наименования файлов, можете смело пропускать)
Поскольку HTTP-страницы mediaserv генерирует, считывая имена файлов "как есть", а Contnet-Type выставляет как "text/html; charset=utf-8", это может породить проблемы. Возьмем мой случай: локаль ru_RU.CP1251, скрипт считывает и выводит имена файлов в файловой системе, но браузер пытается истрактовать их как UTF-8. Получается нечитаемо по определению.
Казалось бы, нет ничего проще: поменять Content-Type с utf-8 на windows-1251, и дело с концом! Но в браузере-то все будет ОК, а вот медиа-плеер на таблетке будет решительно промахиваться и не находить фильм для просмотра, если в нем были русские буквы. Обратно получается ерудна.
На свою беду, я не поклонник правильных решений. Мой рецепт: перед выводом страниц и RSS-лент, перекодировать из текущей кодировки в UTF-8. Для этого надо подредактировать скрипт: в начале загрузить модуль Encoding:
use Encode qw(from_to);
а в процессе формирования текстовых строк использовать функцию form_to, например:
(и точно так же в других местах, например функция doRSS).
sub doBrowse {
...
$response->header( 'Content-Type' =>
'text/html; charset=utf-8' );
from_to($content, "cp1251", "utf8");
$response->content($content);
}
3. Рассинхронизация видео и звука
Получил такое на некоторых медиа-файлах. Как бороться - пока не понял...
2 комментария:
А я вот несколько моментов не понял : файл начинает декодироваться только после клика на нём в браузере на странице mediaserv ? Хотелось бы чтобы декодирование происходило в фоне и заблаговременно - ибо приходится всё таки какое то время ждать после клика... на некоторых фильмах у меня тоже конкретная рассинхронизация звука :(
дык если заранее, то все упрощается. берем фильмы, натравливаем на них tablet-encode. результат отдаем наружу по http каталогом с видимым индексом через apache.
а со звуком - да, я сам пока не поборол...
Отправить комментарий