视频地址加密的方法,利用blob加密视频地址

怎样做视频播放地址加密,其实非常简单,我们观看视频网站的时候,发现video标签中的src属性值为blob:http,并不是真实的视频链接地址。使用Blob对象隐藏真实的资源路径,音频,视频,图片,都可以使用其Blob二进制数据流传输,在一定程度上可以起数据的加密作用,废话不多说,直接上代码吧。

教程开始

①、在网站根目录,新建一个 index.php 文件,代码如下;

Source Code
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Blob Url</title>
  6. </head>
  7. <body>
  8. <video id="video" width="400" controls="controls"></video>
  9. <script type="text/javascript">
  10.     //创建XMLHttpRequest对象
  11.     var xhr = new XMLHttpRequest();
  12.     //配置请求方式、请求地址以及是否同步
  13.     xhr.open('POST', 'blob.php', true);
  14.     //设置请求结果类型为blob
  15.     xhr.responseType = 'blob';
  16.     //请求成功回调函数
  17.     xhr.onload = function(e) {
  18.         if (this.status == 200) {//请求成功
  19.             //获取blob对象
  20.             var blob = this.response;
  21.             //获取blob对象地址,并把值赋给容器
  22.             document.getElementById("video").src = URL.createObjectURL(blob);
  23.         }
  24.     };
  25.     xhr.send();
  26. </script>
  27. </body>
  28. </html>

②、在网站根目录,新建一个 blob.php 文件,代码如下;

Source Code
  1. <?php
  2. // 返回二进制流数据
  3. $file_path = 'video.mp4';// 文件地址
  4. //$file_path = 'G:/phpstudy_pro/aaaaaaa49.com/video.mp4';// 文件地址
  5. $file_size = filesize($file_path);// 文件大小
  6.  
  7. /*建议使用 file_get_contents() 读取文件内容,性能比 fread() 好*/
  8. //$oct_data = fread(fopen($file_path, "r"), $file_size);// 读取文件内容
  9. $oct_data = file_get_contents($file_path);// 读取文件内容
  10.  
  11. // 输出
  12. header("Content-type: video/mpeg4;charset=UTF-8");
  13. header("Content-Length: " . $file_size);
  14. echo $oct_data;

③、在网站根目录,将视频命名为 video.mp4 文件名。

完成,对的,没错,两个文件就行了,代码就是这么简单,就这样就可以使用blob:http隐藏视频链接了。

想用框架

想用框架,想用解析,想给视频加载前,来个页面预加载,这个都不是什么难事,直接修改index.php的代码如下。

Source Code
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Blob Url</title>
  6. </head>
  7. <body>
  8. <style type="text/css">
  9. #preloader{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#fff;z-index:9999;display:flex;justify-content:center;align-items:center}
  10. #loader{width:20px;height:20px;border:3px solid #f7a7a7;border-top-color:#1068ec;border-radius:50%;animation:spin 1s infinite linear;display:flex;justify-content:center;align-items:center}#loader span{font-size:16px;font-weight:bold}
  11. @keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}
  12. </style>
  13. <div id="preloader">
  14.   <div id="loader"></div>
  15. </div>
  16. <iframe id="video" scrolling="no" allowtransparency="true" frameborder="0" style="width:100%;height:100%;frameborder:0;position:absolute;top:0;left:0;"></iframe>
  17. <script type="text/javascript">
  18. //创建XMLHttpRequest对象
  19. var xhr = new XMLHttpRequest();
  20. //配置请求方式、请求地址以及是否同步
  21. xhr.open('POST', 'blob.php', true);
  22. //设置请求结果类型为blob
  23. xhr.responseType = 'blob';
  24. //请求成功回调函数
  25. xhr.onload = function(e) {
  26.     if (this.status == 200) {//请求成功
  27.         //获取blob对象
  28.         var blob = this.response;
  29.         // 加载iframe框架
  30. setTimeout(function() {
  31. //获取blob对象地址,并把值赋给容器
  32.         document.getElementById("video").src = '/bili/?url='+URL.createObjectURL(blob)+'';
  33. //隐藏加载页面
  34. var preloader = document.getElementById('preloader').style.display = 'none';
  35. }, 5000); // 延迟5秒加载iframe框架
  36.     }
  37. };
  38. xhr.send();
  39. </script>
  40. </body>
  41. </html>

这样就完成了,使用iframe全屏播放,使用视频解析播放,还给播放前加了个预加载特效,哎,试试看吧,我敢肯定,你的服务器带不动的。

代码短板

大多数的视频网站,都是使用blob:http隐藏链接,但是,这个blob:http加密链接,非常的短板,换句话就是说,需要强大的服务器配置,以及服务器大宽带支持才能用。这也就是为什么小网站,都不使用Blob的原因,如果你,不撞南墙不回头,不到黄河心不死,非常的执着,你可以测试一下就会发现,这代码一般站长都是用不起的。

这段代码,小千亲测,自己的8H8G10M表示带不动,另一台16H16G50M的还算勉强,但是打开属实缓慢,这种是先下载后输出的,本地测试可以播放,但线上播放就加载不出来,不是代码错误,而是下载视频需要时间,把整个视频文件下载完成后再读取,从而导致读取播放缓慢,这个算是Blob加密的代码短板,不是物理机和百兆宽带表示用不起。

本文结束

评论专区

发表评论

评论列表(无评论)