Вход
Регистрация Забыли пароль?

Статьи

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

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

 

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

 

Этапы внедрения потокового видео:

  1. Сервер для работы видео с включенным стримминг-модулем
    Существует два наиболее распространенных варианта реализации площадки для обработки видео:
    • lighthttpd
      Для него необходимо:
      • Скачать Lighttpd web server с его официального сайта и установить его .
      • Включите стриминг-модуль (mod_flv_streaming) в config-файле .
        См. также здесь.
    • 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 {
        ...
        location ~ \.flv$ {
        flv;
        }
        ...
        }
      Сервер nginx по отзывам является более приемлемым вариантом.
      См. также здесь.
  2. Конвертирование видео файлов в формат, предназначенный для передачи по сети в виде потока Flash Video (flv)
    Существует два самых распространенных варианта конвертирования:
    • с использованием модуля Ffmpeg
      Подробнее см. здесь.
      Однако это не самый подходящий инструмент для поставленной задачи, т. к. он организовывает двухэтапное перекодирование видео через промежуточных формат, понятный ffmpeg.
    • с использованием MPlayer/MEncoder
      Для этого необходимо:
      • Скачать пакет исходных кодов для mplayer с официального сайта mplayer и скомпилировать их;
      • Минимизировать набор выключенных кодеков на этапе компиляции.
        Пример перекодирования с mencoder:
        mencoder The.Simpsons.18x05.avi \
        -o simpsons.flv -of lavf \
        -oac mp3lame -lameopts abr:br=56 -srate 22050 -ovc lavc \
        -ofps 25 \
        -lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 \
        -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames \
        -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. Флеш-плеер, понимающий стримм-видео
    Flowplayer
    • документация
    • описание
    JW FLV MEDIA PLAYER
    • описание
Теги: потоковая обработка видео, ruby, mplayer(mencoder), lighttpd/nginx, flvtool2
Рейтинг: +3 Голосов: 3 5561 просмотр
Комментарии (1)
Alexiao # 10 мая 2015 в 15:44 0
Здравствуйте. Ваша статья интересна. Передо мной стоит такая задача: изображения нескольких человек, которые захватываются вебкамерой из одного помещения нужно вставить среди участников видеоконференции транслируемой одновременно вебкамерой из другого помещения, и выводить смешанное изображение на монитор в третьем помещении на протяжении всего времени проводимой видеоконференции. В моем понимании должно происходить онлайн редактирование потокового видео по заранее определенному сценарию-алгоритму с последующим выводом результата. Всего доброго.
Добавить комментарий RSS лента RSS-лента комментариев
 

Популярные статьи

+4↑
Уроки Photoshop (Тыква на Хэллоуин)
+3↑
ВОЛШЕБНОЕ ПОЯВЛЕНИЕ ЛОГОТИПА 1 (урок Flash)

В данном уроке на примере конкретного логитипа разбираются способы димамического появления лог...

+3↑
ВОЛШЕБНОЕ ПОЯВЛЕНИЕ ЛОГОТИПА 2 (урок Flash)

 Продолжение серии уроков по Flash. 

+3↑
Анимированные фоны (FLASH)

Анимированные фоны (FLASH)

+3↑
Уроки Photoshop (Рисуем Мохнатого смайлика) :)
+3↑
Уроки Photoshop (Капельки росы)
+3↑
Уроки Photoshop (Наложение текстуры)
+3↑
Стили. ПЛАМЯ

Стили. ПЛАМЯ

+3↑
Потоковая обработка видео при помощи lighttpd/nginx, Mplayer(Mencoder)...

Как только на сайте или портале появляется необходимость в видео-сервисе, сразу же перед разр...

Полный рейтинг →