Безопасный псевдопоток FLV-файлов - PullRequest
2 голосов
/ 13 января 2012

Мы используем RTMP для защиты потокового медиа-контента через Wowza, и это работает как шарм.Wowza - действительно сильный и надежный медиа-сервер для бизнес-целей.

Но мы столкнулись с проблемой, с каждым днем ​​она становится все больше.Многие новые клиенты не могут использовать RTMP по своим правилам брандмауэра, и проблема заключается в том, чтобы предоставить им бизнес-медиаконтент.Но у всех нет проблем с http-псевдопотоком или просто прогрессивным, как это бывает youtube или vimeo .Поэтому мы должны сделать то же самое, но обеспечить безопасные ссылки на псевдопотоковый трафик, чтобы предотвратить прямую загрузку путем кражи ссылок.

Мы используем несколько серверов, один для приложения Rails, второй для БД и третийв качестве медиа-сервера Wowza.Я хочу настроить nginx на Wowza медиасервер и настроить для псевдопотока медиафайлов исходные файлы (в той же файловой системе, которую Wowza использует для потоковой передачи через захват веб-камеры).

Можете ли вы предложить использовать nginx с модулями http_secure_link_module и http_flv_module?Еще одна идея моего коллеги - создать крошечное приложение на стороне Wowza для получения зашифрованных ссылок и преобразования его в локальную файловую систему, затем получить доступ к файлам через X-Accel-Redirect и проверить аутентификацию через прямое подключение кDB.

Большое спасибо

Ответы [ 3 ]

4 голосов
/ 14 января 2012

Я нашел решение, позвольте мне поделиться со всеми заинтересованными в нем.

Прежде всего, мои ограничения заключались в том, чтобы использовать как можно меньше инструментов, поэтому в идеале нужно иметь встроенный модуль только в веб-сервере, без базовых сценариев. И сейчас у меня есть решение.

  server {
      listen       8080 ssl;
      server_name  your_server.com;

      location /video/ {
        rewrite /video/([a-zA-Z0-9_\-]*)/([0-9]*)/(.*)\.flv$ /flv/$3.flv?st=$1&e=$2;
      }

      location /flv/ {
        internal;
        secure_link $arg_st,$arg_e;
        secure_link_md5 YOUR_SECRET_PASSWORD_HERE$arg_e$uri;

        if ($secure_link = "") { return 403; }
        if ($secure_link = "0") { return 403; }

        root /var/www/;
        flv;

        add_header  Cache-Control             'private, max-age=0, must-revalidate';
        add_header  Strict-Transport-Security 'max-age=16070400; includeSubdomains';
      }
}

Реальные FLV-файлы, расположенные в каталоге "/ var / www / flv". Чтобы зашифровать URL на стороне Ruby, вы можете использовать этот скрипт:

expiration_time = (Time.now + 2.hours).to_i   # 1326559618
s = "#{YOUR_SECRET_PASSWORD_HERE}#{expiration_time}/flv/video1.flv"
a = Base64.encode64(Digest::MD5.digest(s))
b = a.tr("+/", "-_").sub('==', '').chomp    # HLz1px_YzSNcbcaskzA6nQ
# => "http://your_server.com:8080/video/#{b}/#{expiration_time}/video1.flv"

Таким образом, защищенный двухчасовой URL (вы можете поместить его во flash-плеер) выглядит так:

"http://your_server.com:8080/video/HLz1px_YzSNcbcaskzA6nQ/1326559618/video1.flv"

P.S. Nginx должен быть скомпилирован со следующими параметрами - with-http_secure_link_module --with-http_flv_module

$ cd /usr/src
$ wget http://nginx.org/download/nginx-1.2.2.tar.gz
$ tar xzvf ./nginx-1.2.2.tar.gz && rm -f ./nginx-1.2.2.tar.gz

$ wget http://zlib.net/zlib127.zip
$ unzip zlib127.zip && rm -f zlib127.zip

$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.30.tar.gz
$ tar xzvf pcre-8.30.tar.gz && rm -f ./pcre-8.30.tar.gz

$ wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz
$ tar xzvf openssl-1.0.1c.tar.gz && rm -f openssl-1.0.1c.tar.gz

$ cd nginx-1.2.2 && ./configure --prefix=/opt/nginx --with-pcre=/usr/src/pcre-8.30 --with-zlib=/usr/src/zlib-1.2.7 --with-openssl-opt=no-krb5 --with-openssl=/usr/src/openssl-1.0.1c --with-http_ssl_module --without-mail_pop3_module --without-mail_smtp_module --without-mail_imap_module --with-http_stub_status_module --with-http_secure_link_module --with-http_flv_module
$ make && make install
0 голосов
/ 31 мая 2012

Мы используем Wowza с портом 80 с нашими клиентами

0 голосов
/ 17 января 2012

JW-проигрыватель и Flowplayer автоматически переключаются на RTMPT (через HTTP), когда соединение RTMP не удается, и Wowza делает доступным оба. Я столкнулся с портом 1935, заблокированным в нескольких местах, и откат к RTMPT через порт 80 обычно работает. Предостережение, конечно, заключается в том, что вам нужно, чтобы Wowza прослушивал порт 80 (в VHost.xml, где определен 1935, измените его на 80,1935), и это исключает возможность любого вида прослушивания веб-сервером на одном и том же порт.

...