我们使用 RTMP 通过Wowza保护流媒体内容,它就像一个魅力。 Wowza是一个非常强大和强大的媒体服务器,用于商业目的。
但我们遇到了一个问题,它每天都在为我们变大。许多新客户不能通过他们的防火墙规则使用RTMP,并且为他们提供商业媒体内容是一个问题。 但是每个人都没有使用http伪流媒体或只是渐进式的问题,就像 youtube 或 vimeo 一样。 所以我们应该这样做,但提供到伪流媒体流量的安全链接,以防止通过窃取链接直接下载。
我们使用少量服务器,一个用于Rails应用程序,第二个用于DB,第三个用作Wowza媒体服务器。 我的想法是在 Wowza 媒体服务器上设置 nginx 并配置为伪流媒体原始文件(在Wowza用于通过网络摄像头捕获流的同一文件系统中)。
你能建议使用带有http_secure_link_module和http_flv_module模块的nginx吗? 我的同事的另一个想法是在Wowza端构建一个小应用程序来获取加密链接并将其转换为本地文件系统,然后通过 X-Accel-Redirect 访问文件并通过直接连接检查身份验证到DB。
非常感谢
答案 0 :(得分:4)
我找到了一个解决方案,让我与任何对此感兴趣的人分享。
首先,我的约束是尽可能使用最少的工具,所以理想情况下只在Web服务器中安装内置模块,没有上游后端脚本。我现在有一个解决方案。
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小时网址(您可以将其放入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
答案 1 :(得分:0)
当RTMP连接失败时,JW播放器和Flowplayer将自动回退到RTMPT(通过HTTP),Wowza使两者都可用。我在几个地方遇到了阻塞1935的端口,并且端口80上的RTMPT回退通常有效。当然,需要注意的是,你必须让Wowza监听端口80(在VHost.xml中定义了1935,将其更改为80,1935),这就排除了让任何类型的Web服务器都在监听港口。
答案 2 :(得分:0)
我们将Wowza与端口80一起用于我们的客户