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

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

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

    Этапы внедрения потокового видео:
    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
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 27

      0
      Привет
        0
        привет)
        0
        хабракат
          –1
          хабрапочта!
            0
            еще хабрахабра осталась)
            +2
            есть хабракат)
            0
            спасибо за «все в одном месте».
            не могли бы вы привести еще аргументов в пользу отказа от ffmpeg?
              –3
              качество видео после перекодировки у MEncoder выше чем Ffmpeg.
              Пример сравнения качества — тут
                +2
                Если бы вы соблаговолили проследовать по ссылке, гласящей «Next message: [Ffmpeg-user] Re: [MEncoder-users] ffmpeg vs. mencoder with libavcodec», то, возможно, прочитали бы, что
                Well, that's almost certainly one problem right there: 'mpeg4' is not the same as 'msmpeg4v2' (both of which are available in both MEncoder and FFmpeg). Try using the same codec for both commands.
                Что вполне и следовало ожидать. Кроме того, традиционными кодеками для флеша являются Sorenson H.263 aka FLV и On2 VP6 (энкодер которого стоит около $3K/сервер). Поэтому сравнение MPEG4'ов (причём разных!) в контексте флешвидео некорректно.
              0
              Занес в избранное на всякий случай :)
                0
                никогда не знаешь что понадобится завтра… тем более в наше интересное время)
                +1
                понятный браузеру формат флеш-видео
                Браузер флешвидео не понимает. А вы, похоже, не понимаете, что пишете.
                очень маленькое количество входных форматов видео-файлов
                да ну? вам ffmpeg -formats сюда скопипастить? Что кодеков, что контейнеров ffmpeg (а точнее, libavcodec) поддерживает предостаточно.
                двухэтапное перекодирование видео через промежуточных формат, понятный ffmpeg
                поподробнее вот с этого места, пожалуйста. Почему вы так решили? Как называется этот сикретни формат? Сильно ли жмёт видео? Как, в таком случае, работает mencoder?
                  0
                  видео в конечном счете смотрите в браузере, и флеш плагин ставится тоже в браузер.
                  по поводу двух этапного перекодирования вот источник —
                  тут
                    0
                    ffmpeg — это не подходящий инструмент для поставленной задачи, т. к. он поддерживает очень маленькое количество входных форматов видео-файлов, а организовывать двухэтапное перекодирование через промежуточных формат совсем не хочется.
                    Единственное предложение про «двухэтапное перекодирование» в этом тексте. Это, по-вашему, аргумент?
                      0
                      по-моему единственный аргумент + цена в 3 000$ — это тоже аргумент
                      а у вас какие аргументы?
                        0
                        цена в 3 000$
                        И что у нас столько стОит, напомните-ка?

                        Не могу отделаться от ощущения, что мечу бисер, но ладно.
                        Автор потса, который вы привели в качестве источника, считает, что ffmpeg умеет мало форматов, потому как смотрел, как и вы, устаревшую страничку в вики. Оттого и пишет, что якобы для перекодирования во флешьвидео придётся создавать промежуточный файл. Но ffmpeg'a либо не держал в руках, либо держал, но даже не потрудился посмотреть, что он умеет. Или не понял. Но не суть.
                        Так вот — по большому счёту, разницы между ffmpeg и mencoder при одинаковых настройках одинаковых кодеков быть не должно, и, как правило, нет.
                          +1
                          я использовал mencoder, а ffmpeg только смотрел поэтому видимо не правильно расставил акценты в инфе по ffmpeg
                          спасибо за информацию по ffmpeg
                          статью подправлю
                      0
                      видео в конечном счете смотрите в браузере, и флеш плагин ставится тоже в браузер
                      mplayer classic — тоже браузер, в таком случае?
                      0
                      с форматами, конечно погорячился. Все зависит от подключаемых кодеков
                      когда писал про форматы посмотрел в вики, а были только:
                      # ASF, и через него оригинальную версию DivX
                      # AVI
                      # FLV
                      # Matroska
                      # MPEG transport stream
                      # TXD
                        0
                        Все зависит от подключаемых кодеков
                        Опять мимо. Внешними зависимостями поддерживаются только пара контейнеров (NUT/OGG) и 4-5 кодеков. А FLV и MPEG4 есть искаропки.
                          0
                          (NUT/OGG) и 4-5 кодеков

                          это тоже подключаемые кодеки
                          так что не мимо, а то что есть «коробочные» форматы — это понятно, без них ffmpeg не нужен был бы
                            0
                            (устало) слейте исходники ffmpeg и почитайте же, наконец, configure --help, хотя бы.
                          0
                          выполните
                          ffmpeg -formats
                          неужели мало? к тому же, можно добавить…
                            0
                            согласен, убрал из статьи
                        0
                        Неплохая статья.
                        Было бы отлично если бы автор написал статью о реализации сервера потокового вещания, аналог вещания у смотри. ком
                        Мануалов по данной теме в интернете крайне мало, а тема достаточно интересна.
                          0
                          а чем не нравится разработка Facebook-цев flvtool++?

                          Написана на сиплюсах, а значит быстрее гораздо, чем рубиевский вариант
                            0
                            спасибо за ссылку, добавил в закладки — посмотрю на досуге)

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое