1、問題
- 直接放在WEB目錄下,文件不安全,沒有認證可以直接訪問;
- PHP認證通過後返回WEB目錄下的真實文件地址,不安全,訪問一次後後續可以直接訪問;
- 用PHP讀MP4文件然後再輸出:加載速度、內存佔用、快進快退都會有問題;
2、解決思路:
- 採用php認證後nginx播放
- 轉hls後加密播放
3、PHP認證後nginx播放
在nginx中配置:
# 這裏使用internal做下載防護,只允許內部程序(PHP等)訪問,這樣外部直接訪問這個地址就會提示404錯誤 location ~ \.mp4$ { internal; # 這裏的路徑配置是可選的,可以配置到網站外部,和其他location裏的配置路徑是一個意思,可以更好的防止文件被通過網址下載 root /opt/video; }
在PHP中在認證通過後,寫:
header('X-Accel-Redirect:/20220822/06.mp4')
將帶認證的php文件作爲video標籤的src,就能播放服務器上:/opt/video/20220822/06. mp4 文件。
存在的問題及解決方法:
nginx這種寫法可能導致所有的mp4請求都走/opt/video,如果之前有已經存放在web目錄下直接訪問的mp4文件,需要兼容已有程序,這麼做:
location /28dfs238deswh9HJGAS38/ { internal; alias /opt/video; }
php裏這麼寫:
header('X-Accel-Redirect:/28dfs238deswh9HJGAS38/20220822/06.mp4')
4、轉hls後的加密播放(未完待續)