前端使用blob进行视频路径的加密

转子于:https://www.jianshu.com/p/04727924273dhttps://blog.csdn.net/ffffffff8/article/details/87359640

前言:

现在许多视频在线观看网站,你如果打开chrome查看其video标签,会发现它的src是一个以blob:开头的地址。比如下面这里是B站的截图,可以看到他这里引入的并不是一个在线的视频存放地址,这样你通过爬虫脚本也无法下载该视频文件,通过一个new tab打开也于事无补,会提示你地址错误。

createObjectURL与BLOB
  • 我们再回到那个以blob:开头的神秘字符串,它其实是通过URL.createObjectURL这个API生成的,该函数接收一个BLOB对象,返回该对象对应的DOMString,这个字符串其实也可以看做是一个url地址,但它是与当前窗口的document对象绑定的,也可以说是会话(session)级的,所以你在新的tab打开也就无效了
  • 再来了解下BLOB,他的全称为big binary large object,二进制大对象。如果把一个视频文件转换成二进制对象,其大小肯定很大,这样理解就清楚多了。在浏览器端也提供了BLOB相关的API,通过new Blog(...)生成blog对象。
  • 拿到blog对象后,再通过URL.createObjectURL生成临时地址,赋值给video标签的src属性,这样就可以了。但其实可以直接从服务端接收二进制对象,就是服务端把视频文件转换成二进制对象,通过接口给到前端,前端再生成dom string

Video 使用 blob 二进制流需要前后端同时支持。

Java 生成 Blob 二进制流

/*
 * 在这里可以进行权限验证等操作
 */

//创建文件对象
File f = new File("E:\\test.mp4");
//获取文件名称
String fileName = f.getName();
//导出文件
String agent = getRequest().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);
    getResponse().reset();
    //由于火狐和其他浏览器显示名称的方式不相同,需要进行不同的编码处理
    if(agent.indexOf("FIREFOX") != -1){//火狐浏览器
        getResponse().addHeader("Content-Disposition", "attachment;filename="+ new String(fileName.getBytes("GB2312"),"ISO-8859-1"));
    }else{//其他浏览器
        getResponse().addHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName, "UTF-8"));
    }
    //设置response编码
    getResponse().setCharacterEncoding("UTF-8");
    getResponse().addHeader("Content-Length", "" + f.length());
    //设置输出文件类型
    getResponse().setContentType("video/mpeg4");
    //获取response输出流
    os = getResponse().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());
            }
        }
    }
}

  

HTML5 Video 使用 Blob

//创建XMLHttpRequest对象
var xhr = new XMLHttpRequest();
//配置请求方式、请求地址以及是否同步
xhr.open(‘POST‘, ‘./play‘, true);
//设置请求结果类型为blob
xhr.responseType = ‘blob‘;
//请求成功回调函数
xhr.onload = function(e) {
    if (this.status == 200) {//请求成功
        //获取blob对象
        var blob = this.response;
        //获取blob对象地址,并把值赋给容器
        $("#sound").attr("src", URL.createObjectURL(blob));
    }
};
xhr.send();

  

<video id="sound" width="200" controls="controls"></video>

  

原文地址:https://www.cnblogs.com/deng-jie/p/11549821.html

时间: 2024-10-15 23:49:31

前端使用blob进行视频路径的加密的相关文章

使用ffmpeg视频切片并加密

想达到的目的:将一个mp4视频文件切割为多个ts片段,并在切割过程中对每一个片段使用 AES-128 加密,最后生成一个m3u8的视频索引文件: 电脑环境 Fedora,已经安装了最新的ffmpeg: 如果要加密,首先准备好一下两个东西: 加密用的 key openssl rand 16 > enc.key ( 生成一个enc.key文件 ) 另一个是 iv openssl rand -hex 16 ( 生成一段字符串,记下来) 新建一个文件 enc.keyinfo 内容格式如下: Key UR

点滴积累【C#】---对上传文件的路径进行加密,以免将路径暴露在浏览器上,避免一些安全隐患!

效果: 描述: 本事例是为解决在上传或下载文件时避免将路径暴露在外.在上传时将路径进行加密保存到DataTable或数据库中,在下载是再读取DataTable中加密数据进行解密下载. 代码: [前台代码] 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FileUpload.aspx.cs" Inherits="FilePathEncrypt.FileUplo

xadmin集成DjangoUeditor,以及编辑器的视频路径配置

稍微讲一下DjangoUeditor的配置,因为之前去找配置的时候东拼西凑的,所以自己写一下自己一步步配置的过程.首先我是再github上去下载下来,因为是当作第三方插件集成到xadmin中,所以不用pip安装,直接和xadmin放一个目录就ok了. 然后是在项目的设置里面进行配置,在INSTALLED_APPS中申明DjangoUeditor的存在, 这两步做完之后就找到xadmin的plugins目录,在目录下新建一个ueditor.py的文件,其中的代码如下: #!/usr/bin/env

Struts2框架里面action与前端jsp页面进行交互路径问题---》一个对话框里面有很多超链接,进行相应的跳转

一个对话框里面有很多超链接,右边是点击超链接跳转到的相应页面(在一个页面上就相当于点击该超链接时候,就把该简短页面置顶):这个问题困扰我两天:还请大神给我解决,也没有解决,我仔细对比了相关路径,后面添加就成功了!! jsp相应路径不正确代码:1.因为这个是jsp页面,所以在访问时候就可以自动添加上相应的路径,如下图,结果不能访问,直接跳转到登录页面 浏览器上显示路径是: 2.在相应超链接前面添加获取该路径,也失败:其中${ctx}是自定义的获取浏览器地址 3.正确路径:

前端 使用 crypto-js 对数据进行对称加密

传送门: # crypto-js github https://github.com/brix/crypto-js demo1: // 加载核心加密库 var CryptoJS = require("crypto-js"); // 加载des算法 var tripledes = require("crypto-js/tripledes"); // 开始加密,并且返回密文 var ciphertext = tripledes.encrypt("fuckyou

m3u8的blob格式视频在线下载

有时候我们希望在在线观看视频的同时将对应的视频下载下来,研究了很多方式,最终发现使用ffmpeg这个工具可以很好完成m3u8格式. 具体方法就是执行: ffmpeg -i https://cdn-host.media.xx.tv/recordM3u8/test_152d6fc8238f46e8be4924b7ff416b48/f756984cacb146adb9b0e9eb3cd705e8.m3u8?aliyun_uuid=4d19ab14e4c748adb2b4e0b88b6fe8f5 one

关于m3u8格式的视频文件ts转mp4下载和key加密问题

一,利用网站浏览器F12键,利用谷歌浏览器插件找到视频的.m3u8文件,并打开. 二,打开m3u8文件后,里面有很多.ts的链接,和key的链接. 三,保存为html文件,下载ts文件,代码如下:可加多线程,可能需要用代理. 1 # 爬虫 123.html就是打开m3u8文件右键保存为html格式. 2 htmlf=open('./123.html','r',encoding="utf-8") 3 htmlcont=htmlf.read() 4 # print(htmlcont) 5

web前端入门到实战:HTML中img标签的src属性绝对路径问题解决办法,完全解决!

HTML中img标签的src属性绝对路径问题解决办法,完全解决 需求:有时候自己的项目img的src路径需要用到本地某文件夹下的图片,而不是直接使用项目根目录下的图片. 场景:eclipse,tomcat,html,img,src,java 注意:不需要寻找tomcat真实路径下的server.xml去修改,这个地方不需要修改. 解决办法:1.在eclipse中找到你的项目发布的tomcat服务器,然后找到左侧Servers下对应的你的Tomcat服务器中的server.xml文件,如下图所示:

base64随机字符混淆加密、解密-美拍视频地址解密,反推加密算法

用火车头测试采集美拍的数据时无意中发现美拍的视频地址是一段加了混淆字符串的base64代码.如下图 于是好奇之下研究了下解密算法.具体过程省略800字.发现美拍的视频解密是通过js完成,于是找到了具体的解密代码,如下: 1 ;(function(a) { 2 var b = "substring", 3 c = "split", 4 d = "replace", 5 e = "substr", 6 f = { 7 getHex