Как только на сайте или портале появляется необходимость в видео-сервисе, сразу же перед разработчиками встает вопрос о конвертации загружаемых пользователями ресурса видео-файлов в понятный браузеру формат флеш-видео.
Исследование данной проблемы нашло отражение в следующей статье.
Этапы внедрения потокового видео:
Сервер для работы видео с включенным стримминг-модулем
Существует два наиболее распространенных варианта реализации площадки для обработки видео:
Перекомпилировать 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 по отзывам является более приемлемым вариантом.
См. также здесь.
Конвертирование видео файлов в формат, предназначенный для передачи по сети в виде потока Flash Video (flv)
Существует два самых распространенных варианта конвертирования:
с использованием модуля Ffmpeg
Подробнее см. здесь.
Однако это не самый подходящий инструмент для поставленной задачи, т. к. он организовывает двухэтапное перекодирование видео через промежуточных формат, понятный ffmpeg.
Минимизировать набор выключенных кодеков на этапе компиляции.
Пример перекодирования с 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 кодек для декодирования аудио.
Получение метаданных видео-файла.
Получать метаданные необходимо для того, чтобы была возможность прокрутки видео.
Для этого необходима утилита 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.
Создание очереди
Нужно учитывать что конвертирование видео достаточно ресурсозатратный процесс. Его необходимо запускать с низким приоритетом. Плюс необходимо создавать очередь из файлов, ожидающих конвертацию. Длину очереди необходимо расчитывать исходя из конфигурации каждого конкретного сервера.
Здравствуйте. Ваша статья интересна. Передо мной стоит такая задача: изображения нескольких человек, которые захватываются вебкамерой из одного помещения нужно вставить среди участников видеоконференции транслируемой одновременно вебкамерой из другого помещения, и выводить смешанное изображение на монитор в третьем помещении на протяжении всего времени проводимой видеоконференции. В моем понимании должно происходить онлайн редактирование потокового видео по заранее определенному сценарию-алгоритму с последующим выводом результата. Всего доброго.