- Posted in: Uncategorized
Это очень короткий пост о том, как при помощи набора бесплатных инструсментов реализовать полнофункциональный потоковый видео сервер, основанный на flash video. Итак, что же мы хотим получить после окончания настройки сервера? Все очень просто – мы хотим получить бесплатный функциональный аналог решения по стримингу видео, реализованного в Flash Communication Server (Flash Media Server) компании Macromedia. 🙂
Первым нашим шагом, как и при использовании любой другой технологии потоковой передачи видео, будет конвертация видео файлов в специализированный формат, предназначенный для передачи по сети в виде потока (этот формат называется “Flash Video” (flv)) и добавление в него специализированной мета-информации, предназначенной для плееров, которые реализуют “перемотку” видео потока до нужного вам места в видео файле. В интернете есть множество статей, авторы которых смело заявляют “просто запустите ffmpeg и все будет отлично”, но я вынужден не согласиться с ними. Ffmpeg – это не подходящий инструмент для поставленной задачи, т.к. он поддерживает очень маленькое количество входных форматов видео-файлов, а мы не хотим организовывать двухэтапное перекодирование видео через промежуточных формат, понятный ffmpeg. Именно поэтому мой выбор – это бесплатное ПО со скромным именем mplayer, содержащее в себе утилиту mencoder, предназначенную для перекодирования видео-файлов из одного формата в другой и понимающей огромное количество входных форматов.
В первую очередь вам нужно будет скачать пакет исходных кодов для mplayer с официального сайта mplayer и скомпилировать их. Я не буду описывать здесь, как это сделать, т.к. существует море статей, рассказывающий ою этом, но хочу привлечь ваше внимание к просому факту: Постарайтесь минимизировать набор выключенных кодеков на этапе компиляции установив все требующиеся библиотеки из репозитория вашего дистрибутива или соберите их самостоятельно, т.к. чем больше кодеков у вас будет, тем больше форматов видео файлов вы сможете обрабатывать”.
После установки mplayer/mencoder вам будет нужно установить интерпретатор языка Ruby чтобы запустить ПО flvtool2. Пожалуйста, убедитесь, что у вас стоит версия Ruby не ниже 1.8.4.
Следующим шагом будет инсталляция flvtool2 – небольшой утилиты, позволяющей вставлять meta-информацию в видео-файлы и позволяющую использовать “перемотку” видео потока во flash плеерах. Исходные тексты можно получить на домашней странице проекта, но я хочу посоветовать вам использовать последнюю версию flvtool2 из SVN-репозитория (процесс описан на домашней странице проекта).
Небольшое замечание: текущая версия flvtool2 содержит маленькую, но очень неприятную ошибку, не дающую использовать данное ПО с файлами, сгенерированными mencoder’ом. Когда вы запустите flvtool2, вы получите следующий результат:
1 | /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')
Хочу сказать ОГРОМНОЕ СПАСИБО Дмитрию Штефлюку за это исправление.
Итак, сейчас вы готовы к конвертации ваших видео файлов из любого формата в формат flv. Вы можете сделать это, используя следующий набор команд:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $ mencoder \\ orig_file.ext \\ -ofps 25 \\ -o dest_file.flv \\ -of lavf \\ -oac mp3lame \\ -lameopts abr:br=64 \\ -srate 22050 \\ -ovc lavc \\ -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames \\ -lavcopts vcodec=flv:keyint=50:vbitrate=300:mbd=2:mv0:trell:\\ v4mv:cbp:last_pred=3 -vop scale=320:240 .... .... $ flvtool2 -UP dest_file.flv ... |
Эти команды конвертируют файл orig_file.ext
в dest_file.flv и добавляют meta информацию в него.
Последнее, что вам нужно будет сделать – это скачать Lighttpd web server с его официального сайта и установить его . После этого, включите стриминг-модуль в config-файле и вы сможете ипользовать любой flash player, понимающий идею стриминга видео для создания вашего союственного сервиса Youtube и зарабатывания вашего первого миллиарда долларов. 😉 А для того, чтобы отблагодарить автора статьи, поддержите ее на digg.com
Notice: Читайте мою новую статью о стриминге видео “Стриминг Flash Video при помощи Nginx” чтобы узнать, как реализовать стриминг сервер на nginx.