我如何保护mp4和flv视频

The*_*Tub 5 security video streaming

我正在开发一个仅限会员的网站,需要保护其上可用的视频网址,以便它们不会被共享或传递给非成员.

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

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

有谁知道如何做到这一点?或者知道能为我做这件事的服务?

谢谢

TT

mae*_*416 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>
Run Code Online (Sandbox Code Playgroud)

sectimestamp.php 中只有这一行:

<?php
echo time();
?>
Run Code Online (Sandbox Code Playgroud)

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

RewriteEngine on


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

RewriteRule ^$ - [F]
RewriteRule ^[^/]+\.(flv|mp4)$ - [F]
Run Code Online (Sandbox Code Playgroud)

下一步是你的 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');
}

?>
Run Code Online (Sandbox Code Playgroud)

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

现在,如果您尝试访问 url.com/secure/trailer.flv,您将无法访问 .htaccess(下载管理器也无法工作)。但是,借助 url.com/video.html 的 php 信息,您将能够流式传输该位置,并且 FLV 文件中的源代码将类似于 url.com/md5hashtimestamp/md5hashstreamname/md5hashtimestamp/trailer.flv。因此,直接从 Flash 文件中提取流将非常困难,因为该 URL 不存在;由于 .htaccess,您无法直接访问 url.com/secure/trailer.flv 网站;最后唯一的选择是屏幕捕获/流媒体录制的软件。

所以它不是 100% 安全,但它确实给最终用户带来了困难 - 最重要的是它是免费的