我如何确保mp4& amp; flv视频

时间:2011-07-05 10:19:27

标签: security video streaming

我正在开发一个仅限会员的网站,并且需要保护可在其上使用的视频网址,以便不会在其周围共享或传递给非会员。

我听说过网址屏蔽,但不知道如何做到这一点。或者还有另一种方式吗?

基本上,视频将保存在远程服务器(vps)上或通过Amazon S3保存,该网站将调用视频并在流媒体播放器,JW播放器或我能找到的任何可以保护的播放器中播放视频视频。

有谁知道怎么做?或者知道为我做这件事的服务?

由于

TT

1 个答案:

答案 0 :(得分:2)

我不知道为什么这么多人给出错误的建议,但是你可以这样做。仅仅因为它被“播放”了客户端并不意味着它将被保存在客户端 - 你必须使用能够在播放时记录流的软件。屏幕捕获软件或类似的东西。

无论如何,要做到这一点,你需要使用.htaccess将文件请求重定向到一个php文件,该文件将动态地提供文件的位置并对URL进行模糊处理。

您的html代码中需要以下内容

<html>
<body>
<script type="text/javascript" src="flowplayer-3.2.12.min.js">
</script>
  <script type="text/javascript">
// <![CDATA[
  window.onload = function () {
    $f("player", "flowplayer-3.2.16.swf", {
      plugins: {
        secure: {
          url: "flowplayer.securestreaming-3.2.8.swf",
          timestampUrl: "sectimestamp.php"
        }
      },
      clip: {
        baseUrl: "secure", // Im using a folder called "secure" you can call it whatever you want
        url: "trailer.flv",
        urlResolvers: "secure",
        scaling: "fit",
        onStart: function (clip) {
          document.getElementById("info").innerHTML = clip.baseUrl + "/" + clip.url;
        }
      }
    });
  };
  // ]]>
  </script>

<div id="player"></div>

</body>
</html>

sectimestamp.php中只有这一行:

<?php
echo time();
?>

然后您需要按如下方式编写.htaccess文件,并将其放在“安全”文件夹或视频保存的任何位置:

RewriteEngine on


RewriteRule ^(.*)/(.*)/(.*)$ video.php?h=$1&t=$2&v=$3

RewriteRule ^$ - [F]
RewriteRule ^[^/]+\.(flv|mp4)$ - [F]

下一步是你的video.php文件,该文件与.htaccess在同一目录中(你可以把它放在别处只调整.htaccess中的url

<?php
$hash = $_GET['h'];
$streamname = $_GET['v'];
$timestamp = $_GET['t'];
$current = time();
$token = 'kljaslidilhal9023402'; // I recommend a dynamic token to be generated using something like mt_rand() function
$checkhash = md5($token . '/' . $streamname . $timestamp);

if (($current - $timestamp) <= 2 && ($checkhash == $hash)) {
  $fsize = filesize($streamname);
  header('Content-Disposition: attachment; filename="' . $streamname . '"');
  if (strrchr($streamname, '.') == '.mp4') {
    header('Content-Type: video/mp4');
  } else {
    header('Content-Type: video/x-flv');
  }
  header('Content-Length: ' . $fsize);
  session_cache_limiter('nocache');
  header('Expires: Thu, 19 Nov 1981 08:52:00 GMT');
  header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
  header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
  header('Pragma: no-cache');
  $file = fopen($streamname, 'rb');
  print(fread($file, $fsize));
  fclose($file);
  exit;
} else {
  header('Location: /secure');
}

?>

这是验证部分,其中针对流检查令牌以确保它不超过2秒 - 否则您将必须刷新页面并请求新令牌。

现在所有这一切都是如果您尝试访问url.com/secure/trailer.flv,您将无法感谢.htaccess(下载管理器也无法工作)。但是,由于php信息到url.com/video.html,你将能够流式传输该位置,FLV文件中的源代码将类似于url.com/md5hashtimestamp/md5hashstreamname/md5hashtimestamp/trailer.flv。因此,直接从flash文件中删除流是非常困难的,因为该URL不会退出;由于.htaccess,您无法直接访问网站url.com/secure/trailer.flv;最后,只有选项是在流式传输时记录的屏幕截图/软件。

所以它不是100%安全但它确实让最终用户感到困难 - 最重要的是它是免费的