Как только на сайте или портале появляется необходимость в видео-сервисе, сразу же перед разработчиками встает вопрос о конвертации загружаемых пользователями ресурса видео-файлов в понятный браузеру формат флеш-видео.
Исследование данной проблемы нашло отражение в следующей статье.
Этапы внедрения потокового видео:
Исследование данной проблемы нашло отражение в следующей статье.
Этапы внедрения потокового видео:
- Сервер для работы видео с включенным стримминг-модулем
Существует два наиболее распространенных варианта реализации площадки для обработки видео:- 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 {<br/> ...<br/> location ~ \.flv$ {<br/> flv;<br/> }<br/> ...<br/> }
См. также здесь.
- lighthttpd
- Конвертирование видео файлов в формат, предназначенный для передачи по сети в виде потока 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 кодек для декодирования аудио.
- с использованием модуля Ffmpeg
- Получение метаданных видео-файла.
Получать метаданные необходимо для того, чтобы была возможность прокрутки видео.
Для этого необходима утилита 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. - Создание очереди
Нужно учитывать что конвертирование видео достаточно ресурсозатратный процесс. Его необходимо запускать с низким приоритетом. Плюс необходимо создавать очередь из файлов, ожидающих конвертацию. Длину очереди необходимо расчитывать исходя из конфигурации каждого конкретного сервера. - Флеш-плеер, понимающий стримм-видео
FlowplayerJW FLV MEDIA PLAYER