假設域名:www.test.com
詳情控制器
// 詳情頁
public function detail(){
$_SESSION['play_token'] = md5("laofan666"); //做一個token 用於失效方案
return View::fetch('video/detail');
}
詳情頁
<video controls="controls" autoplay="autoplay">
<source type="video/ogg" src="http://www.test.com/video/paly?id=1" />
Your browser does not support the video tag.
</video>
獲取播放資源
//處理播放資源
public function paly(){
$request_data = Request::param();
//數據庫存放的資源id
$vid = (int)$request_data['id'];
//通過vid 獲取 數據庫存放的真實資源地址
$data_mes = Db::name('video')->field('video_url')->where('id',$vid)->find();
if($_SESSION["play_token"]){
//刪除token,保證每次只能播放一次
//此處能做的東西就很多了,可以參考下方建議
unset($_SESSION["play_token"]);
}
//頁面直接輸出視頻
$filePath=$data_mes['video_url'];
ini_set('memory_limit', '512M');
header("Pragma: public");
header("Expires: 0");
header("Content-Type: application/octet-stream"); //文件mime類型
ob_clean();
flush();
@readfile($filePath);
}
頁面鏈接只需要訪問 詳情控制器,就可以看到效果
www.test.com/video/detail/1.html
關於token設計
-
用戶登陸觀看, 用戶id + 視頻id + 失效時間,存放一條記錄,校驗token
-
無需登陸觀看,ip地址&瀏覽器等信息 + 視頻id + 失效時間, 存放一條記錄 校驗token
后話:代碼預防下載只能暫時性的處理,要是用戶錄屏呢,一幀一幀的截取呢,手動滑稽.jpg