Вопрос

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

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

Мы используем несколько серверов: один для Rails app, второй для DB и третий в качестве медиа-сервера Wowza.Мое мышление состоит в том, чтобы настроить nginx вкл . Вовза медиасервер и настройте псевдопотоковую передачу медиафайлов original (в той же файловой системе, которую Wowza использует для потоковой передачи через webcam capture).

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

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

Это было полезно?

Решение

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

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

  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-адрес на 2 часа (вы можете поместить его во flash-плеер) выглядит следующим образом:

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

P.S.Nginx должен быть скомпилирован со следующими параметрами --с-http_secure_link_module -с-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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top