js视频加密防下载解决方案
如今视频越来越多,好不容易录制的视频,人家一键就下载了,那么怎么保护自己制作的视频让人家没那么容易破解并下载呢
我的思路是这样的:
视频播放器需要获取是地址才能完成播放,如果采用分片播放的形式,将视频文件切片保存在服务端,客户端分片播放视频,加快了播放的速度
第一步将视频上传只视频服务器,通过ffmpeg对视频进行切片存储,hls
ffmpeg -i output.mp4 -c:v libx264 -c:a aac -strict -2 -f hls -hls_list_size 0 -hls_time 5 output1.m3u8
ffmpeg转化成HLS时附带的指令 ,以H264和AAC的形式对视频进行输出
-hls_time n: 设置每片的长度,默认值为2。单位为秒
-hls_list_size n:设置播放列表保存的最多条目,设置为0会保存有所片信息,默认值为5
-hls_wrap n:设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0.这个选项能够避免在磁盘上存储过多的片,而且能够限制写入磁盘的最多的片的数量
-hls_start_number n:设置播放列表中sequence number的值为number,默认值为0
第二步,对视频切片文件进行二进制文件加密
<?php /* * AES 算法 */ class Aes { private $hex_iv = '00000000000000000000000000000000'; private $key = '397e2eb61307109f6e68006ebcb62f98'; function __construct($key) { $this->key = $key; $this->key = hash('sha256', $this->key, true); } /* * 字符串加密 不写入文件 */ public function encrypt($input) { $data = openssl_encrypt($input, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $this->hexToStr($this->hex_iv)); $data = base64_encode($data); return $data; } /* * aes 给PHP文件加密 * 写入设置文件 */ public function filecrypt($filename) { $type=strtolower(substr(strrchr($filename,'.'),1)); if ('php' == $type && is_file($filename) && is_writable($filename)) { $contents = file_get_contents($filename); // echo $contents;exit; $contents = php_strip_whitespace($filename); // echo $contents;exit; // $headerPos = strpos($contents,'<?php'); // echo $headerPos;exit; ...
点击查看剩余70%
网友评论0