Стриминг Flash Video при помощи Nginx

Posted by Alexey Kovyrin under Uncategorized · english

Я ждал этой возможности в Nginx на протяжении последних 3 месяцев! И вот, наконец-то, она реализована! Теперь, nginx прекрасно работает на наших стриминг серверах, а возможность стриминга flv-файлов больше не является уникальной фичей Lighttpd. :-) Этот пост расскажет вам о том, как использовать новый модуль Nginx под названием http_flv_module, впервые реализованный в версии 0.4.7 (но там была досадная ошибка в реализации стриминга, которая исправляется моим патчем) и доведенный до идеала в 0.4.8.

Во-первых, для использования этого модуля, Вы должны перекомпилировать nginx с опцией –with-http_flv_module:

# ./configure --with-http_flv_module ...SOME-OTHER-OPTS...

Следующим действием является активация стриминга для Ваших flv-файлов в nginx.conf:

1
2
3
4
5
6
7
8
9
10
11
12
...
http {
    ...
    server {
        ...
        location ~ \.flv$ {
            flv;
        }
        ...
    }
    ...
}

Эта опция требует от Nginx добавлять специальный “заголовок” в поток данных, запрошенный из определенного flv-файла передачей параметра “?start=XXX”, обозначающего “отдай мне файл flv с байта XXX до конца файла” (такова идея стриминга видео во флеше).

Последнее действие, которое требуется, если вы его еще не сделали, – это конвертация Вашего видео в FLV формат и добавление meta-информации в созданные файлы. Детальнее об этом процессе вы можете прочесть в одном из моих предыдущих постов.

Как всегда, хочу попросить Вас, если Вам понравится этот пост, поддержите его на Digg.com


Related posts:

  1. Использование lighttpd, Mplayer/Mencoder и Flvtool2 для реализации потоковой раздачи Flash Video
  2. Образовательные семинары от Google (techtalks) и Сохранение Роликов из Google Video на Локальный Диск
  3. Nginx – Маленький, Но Очень Мощный И Эффективный Web-Сервер
  4. Обзор Типичных Конфигураций Для Nginx
  5. Использование X-Accel-Redirect с Nginx для реализации контролируемых скачиваний

Tags: ,

26 Comments » | Bookmark on del.icio.us

26 Responses to this entry

Boo says:

Сделал все, как сказано в статье, но nginx выдает ошибку 404. В чем может быть проблема?

nginx/0.4.12

Zenny says:

Impressive article. But I could not make nginx work with php, ruby etc in my debian 3.1 VPS with debian etch as HN with OpenVZ.

I followed a tutorial at http://concentrationstudios.com/2006/8/26/nginx-and-rimuhosting-a-grand-ol-time but it does not behave like it is stated after executing the php-spin script in the article.

Debian certainly has nginx binary package in their repositories but I am not sure whether they support all the nginx modules and scripting languages.

Here I have noticed wonderful experts in nginx and lighttpd. I wish experts here (particularly Scondrel) could advise me how to proceed?

Thank you! Spaciva bolshoi!

lhotski says:

А как реализовать flv-стриминг в nginx вместе с его внутренним редиректом (X-Accel-Redirect)? $request_uri после редиректа уже не содержит первоначального параметра start..

Scoundrel says:

2lhotski: А что мешает передавать этот параметр в редиректе? Скрипт получает его через GET и отдает назад в редиректе вместе с именем файла.

lhotski says:

2Scoundrel: Насколько я понял, параметр для X-Accel-Redirect не парсится как URI, а воспринимается как путь к файлу, который приаттачивается еще к пути в root внутри location. и при отсутсвии файла “/path/some.flv?start=XXX” естественно выдает 404.
Может URI можно как то дополнительным заголовком сформировать? или я жестко туплю?

Kareem Kouddous says:

Is there any way to secure the streams so that users cannot download the flv directly?

vadimka says:

немогу сообразить обязательно указывать file.flv?&start=123
а если без этой переменной то должно отдать файл с 0 байта, правильно я понимаю?

allendale says:

нашёл небольшой баг в nginx, если flv-директива стоит после защиты от хотлинка, то стриминг нихрена не работает – отдаёт весь файл целиком, если же до хотлинка – то работает.
вот пример правильной конфигурации:
location ~ \.flv$ {
flv;
}
location ~ \.(jpg|jpeg|gif|mpg|mpeg|wmv|avi|flv)$ {
access_log off;
valid_referers none blocked server_names *.site.com/;
if ($invalid_referer) {
return 403;
}
}

steveking says:

YouTubeRobot.com today announces YouTube Robot 2.0, a tool that enables you to download video from YouTube.com onto your PC, convert it to various formats to watch it when you are on the road on mobile devices like mobile phone, iPod, iPhone, Pocket PC, PSP, or Zune

Jordan says:

location ~ \.flv$ { – I had a problem with this line of code, it gave me and 404 error, but when removed the space before \.flv everything was ok

conxway says:

PSP Downloads at Ultra High Speed! Download Games for PSP and More! Download as much PSP content as you want to your computer and transfer it to your PSP device. It is easy, fast & fun! Personalize your PSP with themes, wallpapers, screensavers, and never buy a game again. Simply download everything for free! http://www.allfreepspdownloads.com

conxway says:

This website was a godsend, and has already saved me so much money; almost $400 dollars already! I, like most users, came here from a search engine a little weary; however, you guys really pulled through with me every step of the way http://allfreepspdownloads.com

Videos says:

Just wondering, what advantages are there for streaming videos using Nginx, I mean does it provide optional features, stress a server CPU and resources less, could be awesome for a video website to use.