Как стать автором
Обновить

Потоковая обработка видео при помощи lighttpd/nginx, Mplayer(Mencoder), Ruby, Flvtool2

Время на прочтение3 мин
Количество просмотров3.7K
Как только на сайте или портале появляется необходимость в видео-сервисе, сразу же перед разработчиками встает вопрос о конвертации загружаемых пользователями ресурса видео-файлов в понятный браузеру формат флеш-видео.

Исследование данной проблемы нашло отражение в следующей статье.

Этапы внедрения потокового видео:
  1. Сервер для работы видео с включенным стримминг-модулем
    Существует два наиболее распространенных варианта реализации площадки для обработки видео:
    • lighthttpd
      Для него необходимо:
    • nginx
      Для него необходимо:
      • Установить nginx.
      • Перекомпилировать nginx с опцией –with-http_flv_module. В новом модуле http_flv_module, впервые реализованный функция стриминга в версии 0.4.7 (там была досадная ошибка в реализации стриминга, которая исправляется http://blog.kovyrin.net/files/flv_fix.patch). В 0.4.8 ошибки уже нет.
        # ./configure --with-http_flv_module ...SOME-OTHER-OPTS...
      • Следующим действием является активация стриминга для flv-файлов в nginx.conf:
        server {<br/> ...<br/> location ~ \.flv$ {<br/> flv;<br/> }<br/> ...<br/> }
      Сервер nginx по отзывам является более приемлемым вариантом.
      См. также здесь.
  2. Конвертирование видео файлов в формат, предназначенный для передачи по сети в виде потока Flash Video (flv)
    Существует два самых распространенных варианта конвертирования:
    • с использованием модуля Ffmpeg
      Подробнее см. здесь.
      Однако это не самый подходящий инструмент для поставленной задачи, т.к. он организовывает двухэтапное перекодирование видео через промежуточных формат, понятный ffmpeg.
    • с использованием MPlayer/MEncoder
      Для этого необходимо:
      • Скачать пакет исходных кодов для mplayer с официального сайта mplayer и скомпилировать их;
      • Минимизировать набор выключенных кодеков на этапе компиляции.
        Пример перекодирования с mencoder:
        mencoder The.Simpsons.18x05.avi \<br/> -o simpsons.flv -of lavf \<br/> -oac mp3lame -lameopts abr:br=56 -srate 22050 -ovc lavc \<br/> -ofps 25 \<br/> -lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 \<br/> -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames \<br/> -vf scale=320:240
        Документация – см. здесь.Необходимо учесть, что файл в 170 мб будет перекодироваться в течении 17-20 минут. Т.е. необходимо либо запрещать файлы подобного размера, то ли включать процесс в бекграунде.
      Замечание:
      В mplayer уже есть кодеки для декодирование аудио. Для Ffmpeg необходимо ставить дополнительно Lame кодек для декодирования аудио.
  3. Получение метаданных видео-файла.
    Получать метаданные необходимо для того, чтобы была возможность прокрутки видео.
    Для этого необходима утилита flvtool2.
    Она написана на Ruby Для работы flvtool2 необходима версия не ниже чем 1.8.4 — скачать.
    Для установки пакета flvtool2:
    gem install flvtool2-1.0.6.gem
    Чтобы обновить мета-информацию в файле:
    flvtool2 -UP simpsons.flv
    Замечание:
    В источнике blog.kovyrin.net указано, что текущая версия 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')Однако в источнике webnext.ru подобная ошибка не указывается – возможно ее уже поправили в новых версиях flvtool2.
  4. Создание очереди
    Нужно учитывать что конвертирование видео достаточно ресурсозатратный процесс. Его необходимо запускать с низким приоритетом. Плюс необходимо создавать очередь из файлов, ожидающих конвертацию. Длину очереди необходимо расчитывать исходя из конфигурации каждого конкретного сервера.
  5. Флеш-плеер, понимающий стримм-видео
    FlowplayerJW FLV MEDIA PLAYER
Теги:
Хабы:
Всего голосов 21: ↑20 и ↓1+19
Комментарии27

Публикации