Делаем свой аналог YouTube за пол часа

В этом посте я расскажу о том, как за 30 минут на основе бесплатных инструментов сделать свой сервис по раздаче video flash контента.

Для этого нам потребуется

  • Утилиту mencoder из пакета mplayer для перекодирования. Можно использовать ffmpeg но mencoder/mplayer понимает больше входных форматов.
  • Утилиту flvtool2 - после получения flv файла нам необходимо добавить в него мета-информацию, для того чтобы flash-плееры могли реализовать перемотку видео.
  • Веб-сервер Nginx. Этот веб-сервер является легковесным решением в арсенале которого есть специальный модуль http_flv_module, который добавляет специальный заголовок в поток данных, позволяющий смотреть видео с любого места фильма.

Перекодируем фильмы

Ставим mplayer, позаботесь чтобы mplayer был собран с максимально большим количеством поддерживаемых форматов.

Каждый наш фильм необходимо перекодировать, я не буду расписывать возможности mencoder`а или ffmpeg`а, а сразу покажу пример команды:

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 метров и минут 15-20 наверное прождал.

Дальше нам нужна утилита flvtool2. Она написана на Ruby так что убедитесь что у вас Ruby версии не ниже чем 1.8.4; если так, то вперёд, качаем flvtool2 gem-пакет и ставим

gem install flvtool2-1.0.6.gem

Далее обновляем мета-информацию в файле

flvtool2 -UP simpsons.flv

Настраиваем площадку

Ставим Nginx если его у вас ещё нет. Если вы компилируете nginx руками, не забывайте о модуле http_flv_module. Всё что нам надо поправить в конфиге nginx.conf:

    server {
        ...
        location ~ \.flv$ {
            flv;
        }
        ...
    }

Это, активирует flv модуль для файлов с расширением flv. Перегружаем nginx и последнее что нам осталось, это взять какой нибудь flash player например JW FLV Player. Качаем его и расспаковываем, нам нужны пару файлов, это — flvplayer.swf и swfobject.js; копируем их в наш проект. Дальше ещё одна интересная фенечка, это картинка предпросмотр, выдернем из фмльма один кадр, следующим образом:

mplayer -nosound -vo jpeg simpsons.flv -frames 1 -ss 120

Эта команда получит кадр от начала в 120 секунд и сохранить его в файл 00000001.jpg

Кадр есть, перекодированное видео тоже, создадим в нашем проекте файл movie.html в которым вставим следующий код:

<script type="text/javascript" src="swfobject.js"></script>

<p id="player1"><a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> to see this player.</p>
<script type="text/javascript">
  var s1 = new SWFObject("flvplayer.swf","single","512","384","7");
  s1.addParam("allowfullscreen","true");
  s1.addVariable("file","simpsons.flv");
  s1.addVariable("image","00000001.jpg");
  s1.write("player1");
</script>

Вот и всё, открываем что то типа и смотрим видео, это конечно не YouTube, не всё сразу :-)

Регистрация доменов RU за 350р!!!
Совместно с регистратором onreg.ru мы проводим акцию! Купи домен для своего блога или нового интернет проекта по выгодным ценам. Так домен в зоне RU стоит всего 350 рублей. При покупке нескольких доменов, возможны скидки. На onreg.ru есть система тикетов, через которую мы всегда готовы ответить на все ваши вопросы и предложения.


Стоит заглянуть: игры флеш играть.
Комментарии
  • MPlayer — 04.02.2008 #1
    Спасибо, именно то что нужно и никакой воды.
  • virua — 05.03.2008 #2
    Благодарю за статью. Все в одном месте и в удобном, доступном стиле изложено. Долго искал в Интернете что-то подобное и на конец нашел. Обязательно попробую.
  • Горбунов Дмитрий — 05.03.2008 #3
    Для тех кто пользуется Wordpress есть плагин для публикации такого видео (Это чтобы более менее автоматизировать процесс вставки видео в блог)
    Flash Video Player Plugin for WordPress - http://www.mac-dev.net/blog/index.php
  • Alexander Artemenko — 27.01.2009 #4

    Ух! А можно то же самое сделать, но на lighttpd?

  • blacknot — 29.01.2009 #5
  • Юрий — 17.02.2009 #6

    Не совсем понятно: у меня нингс сделан как прокси. Сделал вот так:
    server {

          listen       11.222.333.44:80;
          charset windows-1251;
          server_name 12312312.su;
          location / {
                  proxy_pass      http://www.1231231231.su:8080;
          }
          location ~ i/video/(.*)\.flv$ {
                  flv;
          }

    }

    и при попытке обращения к видео получаю 404

  • shade — 27.02.2009 #7

    По-моему вы забыли укзать root
    location ~ i/video/(.*)\.flv$ {

    root /path/to/documentRoot;
    flv;

    }

  • Игорь — 24.07.2009 #8

    Надо писать именно так location ~ \.flv$ { но при этом не забіть указать в server корректній root

Оставить комментарий
Ваше имя:
E-mail:
Сайт (блог):
Сообщение:
Если вы не робот, введите код: