2

我们使用RTMP通过 Wowza 来保护流媒体内容,它就像一个魅力。Wowza 是一个非常强大和强大的媒体服务器,用于商业目的。

但是我们遇到了一个问题,它对我们来说每天都在变大。很多新客户不能通过他们的防火墙规则使用RTMP,并且为他们提供商业媒体内容是一个问题。但是每个人都对 http 伪流或渐进式没有问题,就像youtubevimeo一样。所以我们应该做同样的事情,但提供伪流媒体流量的安全链接,以防止通过窃取链接直接下载。

我们使用的服务器很少,一台用于 Rails 应用程序,第二台用于 DB,第三台用于 Wowza 媒体服务器。我的想法是在Wowza媒体服务器上设置nginx并配置为伪流媒体原始文件(在 Wowza 用于通过网络摄像头捕获流式传输的同一文件系统中)。

你能建议将 nginx 与 http_secure_link_module 和 http_flv_module 模块一起使用吗?我同事的另一个想法是在 Wowza 端构建一个小型应用程序来获取加密链接并将其转换为本地文件系统,然后通过X-Accel-Redirect访问文件并通过直接连接到 DB 来检查身份验证。

非常感谢

4

3 回答 3

4

我找到了一个解决方案,让我分享给任何对此感兴趣的人。

首先,我的限制是尽可能使用最少的工具,所以理想情况下只在 web-server 中有内置模块,没有上游后端脚本。我现在有一个解决方案。

  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”目录中。要在 Ruby 端加密 URL,您可以使用该脚本:

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"

因此,安全的 2 小时 URL(您可以将其放入 flash-player)如下所示:

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

PS 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
于 2012-01-14T15:38:45.663 回答
0

当 RTMP 连接不成功时,JW 播放器和 Flowplayer 将自动回退到 RTMPT(通过 HTTP),并且 Wowza 使两者都可用。我在几个位置遇到了端口 1935 被阻塞的情况,并且通过端口 80 回退到 RTMPT 通常有效。当然,需要注意的是,您必须让 Wowza 侦听端口 80(在定义 1935 的 VHost.xml 中,将其更改为 80,1935),这排除了让任何类型的 Web 服务器在同一端口上侦听港口。

于 2012-01-17T19:22:45.833 回答
0

我们与客户一起使用带有 80 端口的 Wowza

于 2012-05-31T12:30:50.730 回答