前言
对于一些视频/ 音频/ 图片 等资源文件 为了不被比别人私有利用我们一般会对这些 资源进行加密或者特殊处理 比如 防盗链 或者隐藏资源真实地址 这里其中有一种比较常用有效的加密方式利用BLOB加密。

一丶BOLB是什么?
BOLB(binary large object),二进制大对象,是一个可以存储二进制文件的容器。

原理:1.我们将获取到的视频资源 转换成BLOB类型的对象2.通过URL.createObjectURL()给对象创建一个临时的由BLOB开头的URL3.将创建的临时URL对象 放到引用资源的对象上

二丶案例
1.准备一个视频文件
2.后端写一个接口获取视频资源

    @GetMapping("getVideo")public void getVideo(HttpServletRequest request, HttpServletResponse response) throws  Exception {/** 在这里可以进行权限验证等操作*///ResourceLoader的getResource获取项目中的资源//Resource resource = resourceLoader.getResource("classpath:video/zhangpf.mp4");ClassPathResource classPathResource = new ClassPathResource("video/zhangpf.mp4");File f = classPathResource.getFile();//File f = resource.getFile();//获取文件名称String fileName = f.getName();//导出文件String agent = request.getHeader("User-Agent").toUpperCase();InputStream fis = null;OutputStream os = null;try {fis = new BufferedInputStream(new FileInputStream(f.getPath()));byte[] buffer;buffer = new byte[fis.available()];fis.read(buffer);response.reset();//由于火狐和其他浏览器显示名称的方式不相同,需要进行不同的编码处理if (agent.indexOf("FIREFOX") != -1) {//火狐浏览器response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("GB2312"), "ISO-8859-1"));} else {//其他浏览器response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));}//设置response编码response.setCharacterEncoding("UTF-8");response.addHeader("Content-Length", "" + f.length());//设置输出文件类型  视频为:video/mp4   这里给个图片格式为混淆视听response.setContentType("image/gif");//获取response输出流os = response.getOutputStream();// 输出文件os.write(buffer);} catch (Exception e) {System.out.println(e.getMessage());} finally {//关闭流try {if (fis != null) {fis.close();}} catch (IOException e) {System.out.println(e.getMessage());} finally {try {if (os != null) {os.flush();}} catch (IOException e) {System.out.println(e.getMessage());} finally {try {if (os != null) {os.close();}} catch (IOException e) {System.out.println(e.getMessage());}}}}}

3.准备一个前端页面用于获取视频资源。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<!--zhangpf.cn-->
<head><meta charset="UTF-8"><title>Title</title><link rel="shortcut icon" href="#" />
</head>
<body>
<video id="app"  controls="controls">your browser does not support the video tag
</video>
<script type="text/javascript">var elementById = document.getElementById("app");var xmlHttpRequest = new  XMLHttpRequest;xmlHttpRequest.open("GET","getVideo",true);xmlHttpRequest.responseType = 'blob';//xmlHttpRequest.onload:只有 4 状态会触发xmlHttpRequest.onreadystatechange = function() {if (xmlHttpRequest.readyState==4 && xmlHttpRequest.status == 200) {//请求成功//获取blob对象var blob = xmlHttpRequest.response;//获取blob对象地址,并把值赋给容器var urlObj = URL.createObjectURL(blob);elementById.setAttribute("src", urlObj);}};xmlHttpRequest.send();</script>
</body>
</html>

就此就初略简单完成 了。

实现思路

首先 如果需要加密,那肯定不能直接去链接服务器 上的视频地址,这样会暴露很多信息 先不说视频容易被窃取 就连一些服务器信息都会暴露,所以肯定要在后端 通过流的方式获取 ,获取到了流 那要 怎么转换就方便多了。

然后 获取到了流之后肯定要往前端传递信息,前端接收的时候设置接收类型为BLOB当然这个BLOB对象 也有对于的对象类型 比如我们是视频文件 那么在后端处理的时候我们就要设置ContentType为video/mp4,这样前端接收的 BLOB的默认类型就是视频 文件了 。

再然后 但如果这样的话 依然有可能通过点进去加密的链接中下载我们的视频,这样 的话我们的加密就 没有 很大的 意义了,原来的链接是加密的当时别人依然可以盗用我们的视频,所以这里耍一个小聪明,在后端传递给前端资源的时候我们可以将输出类型ContentType设置成image/gif图片资源类型 或者其它文本类型。

最后 当URL.CreateObjectURL()的时候因为传递过来的资源是完整的所以渲染到浏览器也是没有问题的 但是如果通过F12调试界面点到BLOB加密的 链接上就会以图片的形式展示,格式不对自然就没有展示我们的视频资源咯,就这样变相的保护了我们的视频资源。

小小技巧--BLOB视频加密相关推荐

  1. 视频加密播放 blob java

    1.安装openssl服务,生成加密使用的key openssl rand 16 > enc.key 2.生成加密串,将结果记录下来 openssl rand -hex 16 4.新建一个enc ...

  2. 教育教学类视频加密与安全(组图)

    阿酷TONY,原创,2021-8-16 教育教学类视频加密效果截图 想法: 1. [防下载]:实现视频文件的加密混淆.防下载: 2. [防录屏]:A.(ID跑马灯防录屏)实现不同学员观看视频,实时显示 ...

  3. 唐诗三百首加密软件如何使用_视频加密一机一码软件该如何选择?有哪些因素影响?...

    视频加密一机一码软件,是一种早期的视频加密软件.目前也是在用,用户在授权的条件下获取视频观看,例如教学视频加密后,老师对学员进行授权,一个账号绑定一台设备,学员的设备ID是唯一的,绑定一台硬件.这就是 ...

  4. python 录制web视频_Python django框架 web端视频加密的实例详解

    视频加密流程图: 后端获取保利威的视频播放授权token,提供接口api给前端 参考文档:http://dev.polyv.net/2019/videoproduct/v-api/v-api-play ...

  5. 鸿蒙密视视频加密软件,鸿蒙密视视频加密软件

    鸿蒙密视针对视频夸平台的离线观看.防拷贝.防刻录.防一号多人使用等问题,推出专门针对企业视频防护完整解决方案,鸿蒙密视视频加密软件,实现对视频数据安全的保护. 功能特点 1.支持所有视频音频格式 鸿蒙 ...

  6. 周源:视频加密和DRM实施实践

    在上周落幕的LiveVideoStackCon音视频技术大会,阿里云高级技术专家周源进行了<视频加密和DRM的实施实践>专题分享.周源,有十多年音视频研发经验,之前在淘宝视频负责开放平台, ...

  7. 基于HLS流媒体协议的视频加密方案

    本文只讨论应用于浏览器环境的流媒体协议的加密. 背景 付费观看视频的模式是很多平台的核心业务,如果视频被录制并非法传播,付费业务将受到严重威胁.因此对视频服务进行加密的技术变得尤为重要. 本文所指的视 ...

  8. Burpsuite技巧之MD5加密密码爆破、带验证码爆破

    一.Burpsuite技巧之MD5加密密码爆破 现在有很多后台都不再是明文传输,改成了各种各样的加密方式. 今天就拿MD5加密方式做一个演示,举一反三,希望对新手有用. 如图,MD5加密了密码,遇到这 ...

  9. 阿里云周源:一篇文章读懂四代视频加密技术演进

    在刚刚圆满落幕的LiveVideoStackCon峰会上,阿里云高级技术专家周源进行了<视频加密和DRM的实施实践>主题分享.周源,有十多年音视频研发经验,之前在淘宝视频负责开放平台,目前 ...

  10. getvod.php_php腾讯云点播视频加密

    php腾讯云点播视频加密,ProcessFile(案例为laravel) 路由: //视频详情 Route::get('video/info/{id}','Api\ProcessFileControl ...

最新文章

  1. 160个Crackme022之故布疑阵
  2. dedecms index_testenv.php,一招方面解决DedeCms后台反应慢
  3. PyQt标准框——QInputDialog(二)
  4. .net获取客户端信息(二)ashx部分
  5. 超详细图解!【MySQL进阶篇】MySQL事务和锁
  6. 论文致谢走红后,中科院博士回信了!
  7. 面试了一个 39 岁程序员,全程让我都感觉有点慌.....
  8. 微软公告:Visual Basic 6 完全兼容 Windows 8 的整个产品周期
  9. js实现DropDownList的数据筛选
  10. html视频播放快进按钮,【浏览器插件】Video Speed Controller – 网页视频倍速、快进、回放功能0.07~16 倍...
  11. 简单数据策略帮助LinkedIn提高企业服务收入
  12. Matlab返回多个值以及转化为C/C++工程
  13. 全网最全的AItium Designer 16下载资源与安装步骤
  14. pyqt5 点击开始按钮,执行事件,中途点击暂停按钮后,所执行的事件暂停
  15. ffmpeg隔几秒取一帧
  16. 深度学习系列2:框架tensorflow
  17. docker logs 查看日志
  18. java微信支付v3系列——4.创建订单的封装及使用
  19. 虾皮API接口—按关键字搜索商品
  20. linux查看服务器带宽

热门文章

  1. 怎样添加网络扫描到计算机名,为扫描仪添加局域网功能
  2. 电路城 电路方案 51单片机开发板(原理图+PCB+学习程序源文件)
  3. 高空瞭望视频监控+三维场景视频融合平台
  4. 可重用性,可维护性,可读性,可测试性,可用性,健壮性
  5. 现代信号处理 张贤达_信号处理领域著名科学家、清华大学张贤达教授逝世,享年 74岁...
  6. 聊天机器人-基于QQ聊天记录训练
  7. android 网络分析
  8. 零基础如何入门数学建模?
  9. SQL Server 搭建Northwind详细教程
  10. 英语音标音节与自然拼读总结