2012-03-25 39 views
10

更新:現在這是一個關於如何提供擔保的一定程度的流媒體視頻,如果一個教程:
1)您使用的Flowplayer與Apache
2)你不希望用戶能夠下載視頻(僅限流媒體)
3)您不希望用戶能夠在瀏覽器中放置視頻的URL(限制訪問視頻)
4)您只希望用戶能夠以視頻流如果他們有適當的憑據的Flowplayer安全流與Apache

您必須事先了解PHP.htaccess文件。

原貼:
我的客戶想要掩飾自己的視頻,它們不能被(他不希望用戶能夠下載任何視頻)流,直到他們在他的領地購買。我試圖用Flowplayer的Secure Streaming來做到這一點,我想我現在差不多在那裏了!)。到處搜索後,我發現this post

我已經通過的.htaccess其他網站現在我試圖限制某人僅僅複製URL訪問,在地址欄中粘貼限制熱聯(即http://www.mydomain.com/videos/testVideo.mov

我用PHP/AJAX來生成這個HTML(大部分例子都使用JS Flowplayer插件,我使用<object>標籤來嵌入播放器,不涉及JS。如果使用JS插件,則使用該插件代替嵌入式版本, .htaccess文件和video.php文件將是一樣的。)

$videofilename = 'testVideo.mov';  
$hash = md5('1234'); 
$timestamp = time(); 
$videoPath = $hash.'/'.$timestamp.'/'.$videofilename; 
echo ' 
<object width="667" height="375" type="application/x-shockwave-flash" data="http://releases.flowplayer.org/swf/flowplayer-3.2.8.swf"> 
    <param name="wmode" value="transparent"/> 
    <param name="movie" value="../swf/flowplayer.securestreaming-3.2.8.swf" /> 
    <param name="allowfullscreen" value="true" /> 
    <param name="timestamp" value="'.$timestamp.'" /> 
    <param name="token" value="'.$hash.'" />  
    <param name="streamName" value="'.$videofilename.'" />  

    <param name="flashvars" value=\'config={ 
     "playlist":[ 
      {"url": "'.$videoPath.'", "baseUrl": "http://www.mydomain.com/videos", "autoPlay":false,"autoBuffering":true,"bufferLength":5} 
      ] 

     }\' /> 
</object>'; 

現在在目錄中videos我把這個.htaccess文件:

RewriteEngine on 
RewriteRule ^(.*)/(.*)/(.*)$ http://www.mydomain.com/vidoeos/video.php?h=$1&t=$2&v=$3 
RewriteRule ^$ - [F] 
RewriteRule ^[^/]+\.(mov|mp4)$ - [F] 

更新: php文件的目的是1)獲取數據的哈希,時間戳和視頻文件名(test.mov或其他)2)確保所有內容都被檢出(我故意省略此示例中的安全檢查長度)和3)爲Flowplayer提供視頻流。確保$originaltimestamp$hash在訪問之前良好。您還可以檢查會話憑據,從數據庫獲取「真實」文件位置,或者在授予用戶訪問權限之前進行任何類型的PHP安全檢查。

還記得改變Content-type:字段,以便其與正確的文件擴展名關聯(即video/mp4如果視頻是* .MP4)

而且videos/video.php看起來是這樣的:

<?php 
session_start(); 

$hash = $_GET['h']; 
$streamname = $_GET['v']; 
$originaltimestamp = $_GET['t']; 

header('Content-Description: File Transfer'); 
header('Content-type: video/quicktime'); 
header("Content-length: " . filesize($streamname)); 
header("Expires: 0"); 
header("Content-Transfer-Encoding: binary"); 

$file = fopen($streamname, 'r'); 
echo stream_get_contents($file);  
fclose($file); 
?> 

三個文件總計,HTML與播放器,.htaccess文件和最後video.php文件。我原來的問題是$streamname是錯的。記住$streamname應該是BaseUrl之後(或之下)的文件位置。希望這可以幫助像我這樣的人!

任何人都以這種方式看到安全問題?

+0

**更新:不要使用的Flowplayer-3.2.8.swf與此代碼**使用的Flowplayer-3.2.7。 swf與flowplayer.controls-3.2.5.swf。如果您使用的是flowplayer-3.2.8.swf,它只能在Chrome中運行,而不能在FF,Safari或IE中運行(9) – phpKid 2012-03-26 14:43:43

+0

**更新:您可以使用flowplayer-3.2.8 **,只要確保您擁有最新的Flash版本! (我的壞) – phpKid 2012-03-31 17:17:05

+0

Flow Player HTML5播放器可以使用這種技術嗎? – Wikki 2014-06-09 09:06:45

回答

3

好吧我解決了!在這一行:

$streamname = "http://www.mydomain.com/videos/".$streamname;(在那不存在了)

我擁有了一切錯誤的。我所需要做的就是刪除這一行,它工作。它將從你的baseUrl開始。所以它已經在'videos'文件夾中,所以$ streamname應該等於baseUrl之後文件的位置。

在一個側面說明,這花了我大約一個星期的時間來解決我在網上找到的任何地方放在一起。我創造了這個變成一個教程,讓其他人不會有這樣的頭痛(希望!)

2

我花了2天,發現這個....

如果您的視頻的存儲目錄是777權限然後它會拖延流...

我繞到房子試圖找出爲什麼在地獄裏的名字,這將不流我的視頻......

我有視頻文件已經建立的目錄正如另一個流行的圖片php腳本所使用的,該腳本已經在時間內將該目錄設置爲CHMOD 777 ...簡單地將其設置爲CHMOD 755允許flv或mp4流到我的播放器嵌入到我的PHP頁面...我的救濟!

所以感謝緩解頭痛......這也幫助了這麼多,歡呼聲

+0

感謝您的補充信息,我很快就會將我的網站移動到另一臺服務器上,所以我很高興您提到了這一點,以防出現相同的錯誤。 – phpKid 2012-04-06 15:51:30