Этот короткий пост о том, как при помощи
набора бесплатных инструментов
реализовать полнофункциональный потоковый
видео сервер, основанный на flash video. Итак, что
же мы хотим получить после окончания
настройки сервера? Все очень просто - мы
хотим получить бесплатный функциональный
аналог решения по стримингу видео,
реализованного в Flash
Communication Server (Flash Media Server) компании Macromedia.
Первым нашим шагом, как и при
использовании любой другой технологии
потоковой передачи видео, будет
конвертация видео файлов в
специализированный формат,
предназначенный для передачи по сети в виде
потока (этот формат называется “Flash Video” (flv))
и добавление в него специализированной
мета-информации, предназначенной для
плееров, которые реализуют “перемотку”
видео потока до нужного вам места в видео
файле. В интернете есть множество статей,
авторы которых смело заявляют “просто
запустите ffmpeg и все будет отлично”, но я
вынужден не согласиться с ними. Ffmpeg - это не
подходящий инструмент для поставленной
задачи, т.к. он поддерживает очень маленькое
количество входных форматов видео-файлов, а
мы не хотим организовывать двухэтапное
перекодирование видео через промежуточных
формат, понятный ffmpeg. Именно поэтому мой
выбор - это бесплатное ПО со скромным именем
mplayer,
содержащее в себе утилиту mencoder,
предназначенную для перекодирования видео-файлов
из одного формата в другой и понимающей
огромное количество входных форматов.
В первую очередь тебе нужно будет скачать
пакет исходных кодов для mplayer с официального
сайта mplayer и скомпилировать их. Я не буду
описывать здесь, как это сделать, т.к.
существует море статей, рассказывающий об
этом, но хочу привлечь твое внимание к
простому факту: постарайся минимизировать
набор выключенных кодеков на этапе
компиляции установив все требующиеся
библиотеки из репозитория твоего
дистрибутива или собери их самостоятельно,
т.к. чем больше кодеков у тебя будет, тем
больше форматов видео файлов ты сможешь
обрабатывать.
После установки mplayer/mencoder тебе будет нужно
установить интерпретатор языка
Ruby чтобы запустить ПО flvtool2. Пожалуйста,
убедись, что у тебя стоит версия Ruby не ниже
1.8.4.
Следующим шагом будет инсталляция flvtool2 -
небольшой утилиты, позволяющей вставлять
meta-информацию в видео-файлы и позволяющую
использовать “перемотку” видео потока во
flash плеерах. Исходные тексты можно получить
на домашней
странице проекта, но я хочу посоветовать
тебе использовать последнюю версию flvtool2 из
SVN-репозитория (процесс описан на домашней
странице проекта).
Небольшое замечание: текущая версия flvtool2
содержит маленькую, но очень неприятную
ошибку, не дающую использовать данное ПО с
файлами, сгенерированными mencoder’ом. Когда
ты запустишь flvtool2, ты получишь следующий
результат:
/usr/local/lib/site_ruby/1.8/flv/amf_string_buffer.rb:163:
[BUG] Segmentation fault
Для решения этой проблемы откройте файл lib/flv/amf_string_buffer.rb
в исходных текстах flvtool2 и измените строку 163
с
write [(time.to_i * 1000.0)].pack('G')
на
write [(time.to_f * 1000.0)].pack('G')
Хочу сказать ОГРОМНОЕ СПАСИБО Дмитрию
Штефлюку за это исправление.
Итак, сейчас вы готовы к конвертации ваших
видео файлов из любого формата в формат flv.
Вы можете сделать это, используя следующий
набор команд:
$ mencoder \
orig_file.ext \
-ofps 25 \
-o dest_file.flv \
-of lavf \
-oac mp3lame \
-lameopts abr:br=64 \
-srate 22050 \
-ovc lavc \
-lavfopts i_certify_that_my_video_stream_does_not_use_b_frames \
-lavcopts vcodec=flv:keyint=50:vbitrate=300:mbd=2:mv0:trell:\
v4mv:cbp:last_pred=3 -vop scale=320:240
....
....
$ flvtool2 -UP dest_file.flv
...
Эти команды конвертируют файл orig_file.ext в
dest_file.flv и добавляют meta информацию в него.
Последнее, что вам нужно будет сделать -
это скачать Lighttpd
web server с его официального сайта и
установить его . После этого, включите
стриминг-модуль в config-файле и вы сможете использовать
любой flash
player, понимающий идею стриминга видео для
создания вашего собственного сервиса Youtube и
зарабатывания вашего первого миллиарда
долларов. 🙂 А для того, чтобы отблагодарить
автора статьи, поддержите
ее на digg.com.
Оригинал:
http://blog.kovyrin.net/2006/10/08/lighttpd-memcoder-flvtool-for-streaming/