Использование lighttpd, Mplayer/Mencoder и Flvtool2 для реализации потоковой раздачи Flash Video
Это очень короткий пост о том, как при помощи набора бесплатных инструсментов реализовать полнофункциональный потоковый видео сервер, основанный на 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.
Related posts:
- Стриминг Flash Video при помощи Nginx
- Образовательные семинары от Google (techtalks) и Сохранение Роликов из Google Video на Локальный Диск
- Варианты настройки Ruby On Rails на максимальную производительность: mongrel vs lighttpd vs nginx
- Использование X-Accel-Redirect с Nginx для реализации контролируемых скачиваний
- Обзор Неофициальных Репозитариев Пакетов Для Дистрибутива Debian GNU/Linux

69 Responses to this entry
2alex: Мы писали сами… Наш флеш-девелопер за день наколбасил хотя до этого ваще не видел флеш-фидео. Потому я уверен, что не сильно сложно. Хотя, может, есть и готовое.
Спасибо за пост. mplayer forever.
Достойной заменой может послужить Yamdi, делающая то же самое в контексте задачи и работающая в на порядки быстрее.
Но flvtool2 в силу свой чистой скриптовости имхо жутко тормозная штука и на больших роликах массовую конвертацию делает тяжким трудом
2lhotski: Wow! Great thanks really useful thing!
[...] If you don’t want to upload your video at Youtube[1] and if you don’t want to set up a streaming server[2] here are some instructions mainly from Netzspielwiese[3] First convert you video with Riva encoder[4] to Flash format, then install the Wordtube[5] plugin and insert some cryptic code in your blog and your video will look like this one. [...]
Здравствуйте! Спасибо за информацию! Есть вопрос – какая конфигурация сервера подойдёт для создания работоспособного сайта с видеоконтентом (на начальной стадии)?
Спасибо.
[...] If you don’t want to upload your video at Youtube[1] and if you don’t want to set up a streaming server[2] here are some instructions mainly from Netzspielwiese[3] for an alternative. [...]
[...] Использование lighttpd, Mplayer/Mencoder и Flvtool2 для реализации потоковой раздачи Flash Video [...]
[...] Использование lighttpd, Mplayer/Mencoder и Flvtool2 для реализации потоковой раздачи Flash Video [...]
[...] I started from this blog entry. But as I’m using ubuntu dapper, I have the nice debian apt tool [...]
[...] あと配信に関しては http://blog.kovyrin.net/2006/10/08/lighttpd-memcoder-flvtool-for-streaming/ http://blog.lighttpd.net/articles/2006/03/09/flv-streaming-with-lighttpd あたりはどうでしょう。 [...]
[...] Using Lighttpd, Mplayer/Mencoder and Flvtool2 to Implement Flash Video Streaming [...]
Hi, I have use the same mencoder command above listed and it works fine. But my video player is a bit big, and when I play the converted flv video, its pixelated,i.e the quality is not good.
What are the things I need to change to make it a size of 407×305 and quality will be better.
[...] read more | digg story Posted by seethepost Filed in news [...]
[...] to create your own video sharing service with flash video streaming using only open-source tools.read more | digg story [?] Share [...]
[...] to create your own video sharing service with flash video streaming using only open-source tools.read more | digg story Posted in Uncategorized | Leave a [...]
[...] Using Lighttpd, Mplayer/Mencoder and Flvtool2 to Implement Flash Video Streaming [...]
Есть проблема при конвертации mov (QuickTime) файла в flv. Вот такая команда.
mencoder input.mov -o output.flv -of lavf \
-oac mp3lame -lameopts abr:br=56 -srate 22050 -ovc lavc \
-lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 \
i_certify_that_my_video_stream_does_not_use_b_frames
С -nosound работает. То есть как я понял проблема с
аудио кодеком.
Opening audio decoder: [faad] AAC (MPEG2/4 Advanced Audio Coding)
AUDIO: 44100 Hz, 2 ch, s16le, 64.0 kbit/4.54% (ratio: 8000->176400)
Selected audio codec: [faad] afm: faad (FAAD AAC (MPEG-2/MPEG-4 Audio) decoder)
Но итоге получаю ошибку.
Cannot initialize muxer.
Exiting…
Кто-нибудь сталкивался с подобным?
You should probably use flvmeta (http://code.google.com/p/flvmeta/) instead of flvtool2.
It’s a small tool written in C that is much faster than flvtool2, which is written in ruby, and uses way too much memory.
[...] mi buscador me dice que mire en Using Lighttpd, Mplayer/Mencoder and Flvtool2 to Implement Flash Video Streaming y allí me indican sustituya en /opt/lib/site_ruby/1.8/flv/amf_string_buffer.rb la línea 163 [...]