相关阅读
最近看到很多视频网站的视频src都是以blob:xxxxx的格式,探究一下这个blob是什么,以及为什么要这么做
what is Blob
在MDN的介绍中,Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作。
File 接口基于 Blob,继承了 blob 的功能并将其扩展以支持用户系统上的文件。
Blob URL
Blob URL就是blob协议的URL, 将文件资源生成一个指向Blob的地址,就可以用在video、audio、img等这些标签的src属性上。通过URL.createObjectURL()
const blobUrl = URL.createObjectURL(object)
生成的链接就是以blob开头的一段地址,表示指向的是一个二进制数据。每调用一次URL.createObjectURL方法,就会得到一个不一样的Blob URL。这个URL存在的时间,等同于网页的存在时间。一旦网页刷新或卸载,这个Blob URL就失效。
通过URL.revokeObjectURL(objectURL)可以释放URL对象。
应用
- 图片预览
- 加载网络视频。需要请求完全部视频数据才能播放。如果要边播边放,则需要流媒体。
流媒体协议相关
- HLS和DASH, 苹果公司实现的,m3u8的格式
- MediaSource. 用Blob URL指向一个视频二进制数据,然后不断将下一段视频的二进制数据添加拼接进去。通过MediaSource.appendBuffer方法往容器里添加数据。但是不能直接用MP4视频,需要用Fragmented MP4