flv - 安全的伪流 flv 文件

标签 flv rtmp wowza http-streaming

我们使用RTMP来保护Wowza的流媒体内容,它的作用就像一个魅力。 Wowza 是一款真正强大且稳健的媒体服务器,可用于商业目的。

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

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

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

非常感谢

最佳答案

我找到了解决方案,让我与感兴趣的人分享。

首先,我的限制是尽可能使用最少的工具,因此理想情况下仅在 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 小时 URL(您可以将其放入 flash-player 中)如下所示:

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

附注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

关于flv - 安全的伪流 flv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8848919/

相关文章:

ruby-on-rails - Rails 回形针问题

nginx - 使用 ffmpeg 将 HLS 转码/transmux 到 RTMP 以使 nginx 联播不起作用

ffmpeg - FFMPEG 库可以使用 RTSP 将实时 H264 iOS 相机流发送到 Wowza

ffmpeg - 如何在命令行上使用 FFmpeg 将 *.flv 文件转换为 *.ts 文件?

audio - 暂时没有声音时,从 vlc 到 ffmpeg 的 flv 实时视频错误

c++ - OpenCV 和 RTMP 流

iOS 直播要求

java - Tomcat 和媒体服务器如何协同工作?

ffmpeg视频流播放延迟?

ffmpeg - 在 debian 上使用 ffmpeg cli flv 到 mp4