分享

就是这家伙URL.createObjectURL()导致了视频无法下载

 广平人 2020-06-29

引言

当你看到一些视频,是不是心里 发痒,想把他下载下来?于是你开始了下面的操作:在浏览器上,右键,选择“检查”,鼠标点到视频上,很快的,在源代码里看到了视频引用的mp4文件。

就是这家伙URL.createObjectURL()导致了视频无法下载

然后,你选择视频代码,右键选项在Tab里打开,浏览器就打开了视频,再一次选择“另存为...”,就把视频保存到自己的电脑上了。

就是这家伙URL.createObjectURL()导致了视频无法下载

video标签

在新版的HTML5里,W3C提出了video标签,video标签成为了浏览器行业标准(现在很少有视频再用flv了),video有一个src属性,他设定的是视频/音频地址,因此,上面的视频,代码其实是:

<video src='music.mp4' controls></video>

没错,就是这么简单,video告诉浏览器这是一个视频,src告诉浏览器这个视频的地址是 music.mp4,然后浏览器就开始播放了。

URL.createObjectURL()加密

video出来后,那些视频大厂不愿意了,自己的视频,瞬间可以被别人下载,不行,我要加密,怎么加密呢?既然视频是通过src看到视频实际地址的,那我就对src加密,给用户一个假地址。

因此,全球视频大厂联合技术大厂推出了一个函数:URL.createObjectURL() 并让所有浏览器都支持它。看看这个函数的介绍,内容很晦涩,总之其实就是几句话:生成一个虚假的URL。

URL.createObjectURL() 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象。
就是这家伙URL.createObjectURL()导致了视频无法下载

如何生成虚拟URL

为了说明如何生成虚拟URL,下面模拟的是一个小的视频代码段:用户选择一个视频文件,然后利用URL.createObjectURL生成一个虚拟URL,再把这个虚拟URL给视频。

<input type='file' id='theFile' onchange='selVideo()' /> <video id='theVideo' controls > </video> <script> function selVideo() { file = theFile.files[0]; objectURL = URL.createObjectURL(file); theVideo.src = objectURL; } </script>

现在,你再查看源代码,你看到了视频源代码,然后看到了视频使用的src地址

就是这家伙URL.createObjectURL()导致了视频无法下载

可以当你兴致勃勃的吧上面网址在浏览器打开时,浏览器却返回了一个错误:文件不存在。

就是这家伙URL.createObjectURL()导致了视频无法下载

这样,就把大部分小白挡在了下载视频的大门之外。如果再配合*.m3u8对视频分割(以后会介绍),就能更进一步加大用户下载视频的困难。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多