2011-07-05 105 views
5

我正在開發一個僅限會員的網站,並且需要保護將在其上可用的視頻網址,以便它們不能共享或傳遞給非成員。如何保護mp4和flv視頻

我聽說過網址掩蓋,但不知道如何做到這一點。還是有另一種方式?

基本上,視頻將保存在遠程服務器(vps)或通過亞馬遜S3,該網站將調用視頻並通過流媒體播放器,JW播放器或任何我能找到的播放器保護視頻。

有誰知道如何做到這一點?或知道一個服務,將爲我做這個?

感謝

TT

+0

色情?對不起,只好問:-) –

+0

如果他們可以將它流式傳輸到他們的計算機上,那麼可以以這種或那種方式保存流。然後他們可以隨意分發他們喜歡的東西。 DRM有很大的失敗歷史。 – Raoul

+0

杜克先生說,如果它正在播放客戶端,它可以保存在客戶端。沒有其他辦法了。但是,您可以保護它,以便只有會員才能訪問視頻,這是您的問題嗎?或者也許你可以編寫自己的播放器,將視頻記錄到內存中,因此只能在播放器中播放(除非有人屏幕抓住了它,顯然,或者顛倒過來設計了你的加密密鑰)。 –

回答

2

我不知道爲什麼那麼多人給了錯誤的建議,不過是你可以做到這一點。僅僅因爲它被「播放」了,客戶端並不意味着它會被保存在客戶端 - 你必須使用可以記錄正在播放的流的軟件。無論是屏幕捕捉軟件或類似的東西。

無論如何,要做到這一點,您需要使用.htaccess將文件請求重定向到一個php文件,該文件將動態地提供文件的位置並混淆網址。

你需要在你的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(你可以把它放在其他地方只是調整的URL在.htaccess

<?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(下載管理器也不會工作)。但是,您可以通過將信息發送到url.com/video.html來將該位置進行流式傳輸,並且FLV文件中的源代碼將看起來像url.com/md5hashtimestamp/md5hashstreamname/md5hashtimestamp/trailer.flv。因此,直接從Flash文件中擷取流是非常困難的,因爲該URL不會退出;感謝.htaccess,您無法直接訪問網站url.com/secure/trailer.flv;最後只有選項是屏幕捕獲/在流式傳輸時記錄的軟件。

所以它不是100%安全,但它確實使事情最終用戶的困難 - 而最重要的是它是免費的