HTML5 视频源作为本地存储的 blob 不再工作

2023-11-26

从 Chrome 80 开始,Blob 或 IndexedDB 的工作方式似乎发生了变化。

将视频文件作为 blob 加载并通过 createObjectURL 将其分配给 HTML5 Video 元素仍然有效:

// load the blob through XMLHttprequest
RequestAsBlob("https://devserver/some-video.mp4",
function(blob)
{
  video.src = URL.createObjectURL(blob); 

  // same above, video.src is now "blob:https://devserver/36e15718-e597-4859-95d3-6bc39daaa999"
}

video.play();

Output: 承诺 {}而且视频播放得很好。

检查 blob,它看起来像这样:

Blob {size: 6752122, type: "video/mp4"}
size: 6752122
type: "video/mp4"
__proto__: Blob
arrayBuffer: ƒ arrayBuffer()
size: (...)
slice: ƒ slice()
stream: ƒ stream()
text: ƒ text()
type: (...)
constructor: ƒ Blob()
Symbol(Symbol.toStringTag): "Blob"
get size: ƒ size()
get type: ƒ type()
__proto__: Object

我曾经将 blob 存储到 IndexedDB(通过 LocalForage),然后检索它并回放,如下所示。这个,不再

// blob is a blob fetched from indexedDB
video.src = URL.createObjectURL(blob);  

// video.src is now something like this:
// "blob:https://devserver/ec5e1dfe-0884-40e2-ae8c-c6062734d297"

video.play();

检查检索到的 blob,它看起来与 XMLHttpRequest 返回的一模一样

但是,它不起作用:

Output: 未捕获(承诺中)DOMException:该元素没有受支持的源。

我不明白是什么变化破坏了迄今为止一直有效的功能。 事情变得更奇怪了:

如果我得到存储的 blob,显然不能再直接将其分配给视频 src,我会这样做......

var url = URL.createObjectURL(cachedblob);

RequestAsBlob(url,
function(blob)
{
 var url = URL.createObjectURL(blob);

 video.src = url;
 video.play();
}

这有效!我正在引用存储在indexedDB中的一个blob,为其创建一个url,通过XMLHttpRequest再次加载它,就像它实际上位于某个远程位置一样,再次将其作为blob接收......并再次为其创建一个URL ...并且它有效。

这个不成立。 我希望有人能对此有所启发。


可以重现,即使在金丝雀构建(82)中,你也做了很好的开场这个问题.

现在,有比通过 XHR 获取更简单的解决方法,例如在稳定 (80) 中,您只需将检索到的 Blob 包装在一个新的 Blob 中:

video.src = URL.createObjectURL(new Blob( [ blob ] ) ); 

As a fiddle因为 StackSnippet™ 不允许访问 IndexedDB。

然而,这种解决方法似乎只适用于稳定版本 (80),在 Canary (82) 上,我们需要实际将整个 Blob 读取到 ArrayBuffer 并从该 ArrayBuffer 构建一个新的 Blob:

const buf = await blob.arrayBuffer();
vid.src = URL.createObjectURL( new Blob( [ buf ] ) );

fiddle.
由于后者也适用于稳定版本,并且我们不知道他们何时能够修复该错误,因此您可能需要使用第二种解决方法。

1: or let me know if you want me to do it.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTML5 视频源作为本地存储的 blob 不再工作 的相关文章

  • 继续使用 sketch.js 编辑草图图像 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在使用 sketch js 中的示例 http intridea github io sketch js http intridea g
  • 为什么电子邮件正文给出不同的输出?

    我正在尝试触发来自 Google 应用程序脚本的电子邮件 const body HtmlService createHtmlOutput A b new task b have been added to the Task Manager
  • 如何通过单击链接并确认弹出窗口来检查两个条件?

    我是 JavaScript 新手 有 2 个 html 链接 li a class dropdown item confirm href wtdata a li li a class dropdown item confirm href f
  • 将字符串转换为整数数组

    我想转换以下字符串 14 2 到一个由两个整数组成的数组中 我该怎么做 现代浏览器的快速浏览器 14 2 split map Number 14 2
  • 创建链接到 csv 文件的表

    我正在尝试创建一个链接到的表 csv使用 d3 文件 但我得到的只是一个空白网页 即使以克里米亚为例 我也得到一张空白页 我将很高兴得到指导或展示一个可行的例子或关于我做错了什么的建议 如果您询问如何从 CSV 数据创建 HTML 表 这就
  • Angular 2延迟加载模块-服务不是单例

    我已经在我的应用程序中实现了延迟加载模块 app module ts 配置正确 NgModule declarations AppComponent HeaderComponent HomeComponent imports Browser
  • 替换字符以制作国际字母(变音符号)

    我正在尝试模仿国际键盘的工作方式 如果您使用其中之一死钥匙 http en wikipedia org wiki Dead key后面跟着一个字母 它将它们组合成相应的字符 例如 输入 a会导致 and o结果是 etc 我似乎无法让我的正
  • 从请求响应创建 PDF 不适用于 axios,但适用于本机 xhr

    为了强制从服务器下载 PDF 我尝试使用 axios 和本机 xhr 对象 原因是我必须发送post请求 因为我向服务器传递了太多数据 所以带有简单链接的选项 例如site ru download pdf对我不起作用 尽管我最终设法用 Xh
  • 使用 javascript 在 IFrame 中打印 PDF 文件仅获取一页

    这是我打印 pdf 文件的代码 在这里 在打印时我只得到一页 我需要一个解决方案 function printPdf var ifr document getElementById frame1 PDF is completely load
  • MongoDB:如何在更新之前对查询进行排序

    我正在编写一个 Meteor Node js 应用程序 它在后端使用 MongoDB 在我的代码中的某个时刻 我需要更新specific集合中的文档 我需要使用 Mongo 的 update 方法 但我在传递正确的 复杂的 查询以缩小到该特
  • 如何在多行中使用 JavaScript 正则表达式?

    var ss pre aaaa nbbb nccc pre ddd var arr ss match
  • Facebook Instant Game - 上传捆绑的 zip 文件会导致 Web 托管出现 SDK 参考错误

    当我尝试上传简单的游戏 应用程序时 我收到一条错误消息 游戏必须通过我们的 CDN 引用我们支持的 SDK 之一 不过我已经给出了 SDK 参考 难道不是这个吗 我也浏览了 facebook 文档的 SDK 参考 但它对我不起作用 有人以前
  • 在 MongoDB 中对 Null 值进行最后排序

    我使用以下查询根据名为 sortIndex 的字段按升序填充 MongoDB 中的项目 有时 数据库中的项目没有 sortIndex 字段 通过以下查询 具有 null sortIndex 的项目显示在顶部 我想知道如何让它们显示在底部 我
  • 如何在 Yii 框架中使用 jQuery?

    如何在 yii 中使用 jquery javascript 如何在 yii 中使用我的脚本 为什么这与以其他方式使用 jQuery 有什么不同 如何在yii中使用jquery 如上所述 您可以注册新的脚本块 也可以注册新的外部脚本文件 您还
  • 将 SVG 下载为 PNG 图像

    我想将 HTML 页面中的 SVG 元素下载为 PNG 格式 我尝试了此操作 但下载了一个空白的 PNG 图像 如何将我的 HTML SVG 下载为 PNG 我用过这个https bl ocks org biovisualize 81878
  • Angular 中的动态子组件

    我正在构建一个具有一致的元素列表设计模式的应用程序 如果我有一个 A 类型的对象 我会创建AComponent它接受a作为输入 然后创建另一个组件来迭代 A 列表 AListComponent 那么如果我有一个对象 B 我需要做同样的事情
  • 如何检查令牌过期和注销用户?

    当用户单击注销按钮时 他 她可以自己注销 但是如果令牌过期 他 她就无法注销 因为在我的应用程序中 令牌在服务器端和前端都使用 当用户单击注销按钮时 如果令牌有效 则服务器和浏览器中的令牌都会被清除 当用户未注销并且他 她的令牌过期但未在浏
  • 使用 JavaScript 和 HTML 打印表情符号

    为什么这有效 p x1f604 p 而这并没有 document getElementById emoji innerHTML String fromCharCode parseInt 1f604 16 JS 术语中的 char 实际上是一
  • React 不适用于 Android 4.4.2 Web 视图浏览器

    React 在我的 Android 手机上不起作用 我不认为这是我的代码错误 因为即使我写的唯一内容是 p hello world p 它仍然没有显示 在 chrome 远程吊顶上查看后 这显示了 Map is not defined 以前
  • AngularJS 中的全局模拟对象用于 jasmine/karma 测试

    我有一个正在模拟进行单元测试的对象 基本上在我的测试文件中 我将其模拟如下 var mockObject mockMethod1 function return true mockMethod2 function return true b

随机推荐

  • 三.js透明地图问题

    我正在创建大量粒子 准确地说是 80 000 个 并且设置了透明贴图 但并非所有粒子都是透明的 I m using a transparent PNG image it s barely visible but it s there alr
  • 带参数的 Excel VBA CommandBar.OnAction 很困难/未按预期执行

    所以 我用谷歌搜索了一下 似乎在制作自定义弹出菜单时 如果想传递参数 那么这是possible但对我来说有两个主要问题 1 您调用的函数将会执行 但您将无法在其上激活断点 甚至无法使用 Stop 2 奇怪的是 它似乎被调用了两次 这也不是很
  • 如何在我自己的应用程序中创建一个“打开方式”列表,如“探索”中所示

    在我的应用程序中 用户可以选择对文件的引用 例如图像文件 我想制作带有箭头的按钮 打开一个列表 其中包含系统上安装的可以打开此文件类型的程序 我知道我可以从注册表 HKEY CURRENT USER Software Microsoft W
  • 使用AssemblyInfo自动更新多个AssemblyInfo.cs文件

    我有多个 AssemblyInfo cs 文件 作为单个解决方案中许多项目的一部分 我将这些文件作为 TeamCity 的一部分自动构建 为了使 msbuild 脚本更易于维护 我希望能够将 AssemblyInfo 社区任务与 ItemG
  • Android IABv3 getSkuDetails 不返回 Sku 详​​细信息

    我目前正在与 Android Iab v3 作斗争 我之前一直使用 Google 的 IabHelper 类来成功显示可用产品 然而 今天它不再返回给我任何东西 传递给IabHelper类中IInAppBillingService的getS
  • Azure IoT 中心、EventHub 和函数

    我有一个 IoTHubroute指向触发函数的 EventHub 我在获取时遇到问题DeviceId以及事件对象中的其他 IoT 中心属性 而无需将这些属性显式添加到负载中 如果我将输入类型设置为string 或自定义类型 public s
  • 在 xslt 中何时使用 for-each 以及何时使用 apply-templates?

    我听说大多数时候在编写 XSLT 时通常可以 而且更好 使用 apply templates 而不是 for each 这是真的 如果是这样 使用 apply template 有什么好处 Using
  • cx_freeze:如何将包文件添加到library.zip中?

    我注意到 当我尝试为 Windows 滚动 zip 时 pytz 会丢失 zoneinfo 文件夹 现在我有一个解决方法 我会在之后使用python setup py build namely 7z a xr py build exe wi
  • iOS 和 Android 算法或库,用于羽化图像边缘,类似于 Photoshop

    我正在寻找 最好 iOS 和 Android 库或算法 以帮助我以与 Photoshop 中处理图像类似的方式羽化图像边缘 下图展示了该算法的预期效果 我对图像的羽化边界不感兴趣 只对 alpha 边缘感兴趣 我几天来一直在寻找可以完成它的
  • 如何为 DataFrame 中的每一列绘制箱线图? [复制]

    这个问题在这里已经有答案了 我有一个数据框df多列 我想创建一个boxplot 对于每一列 using matplotlib df info 下面我的 DataFrame 的输出供参考
  • 位移操作未返回预期结果

    为什么Java会返回 2147483648当我移位时1 预期结果是9 223 372 036 854 775 808 使用 Wolfram Alpha 和我的计算器进行了测试 我测试过 System out print long 1 lt
  • 迭代二维 STL 向量 c++

    我目前正在尝试打印我正在开发的游戏中玩家的动作历史记录 在每轮结束时 每个玩家都在正向或负向移动了一定的量 这会被记录为移动向量中的 int 最终我想绘制每个玩家的移动方向与时间的关系 但我在从二维向量中提取数据时遇到了困难 所以我尝试的第
  • Xcode 中是否可以将动态框架转换为静态库?

    是否可以将动态框架转换为静态库 问题是我没有框架的源代码 但只有SomeFramework framework文件是少数架构的动态库 创建一个 可可触摸框架 并将您的 framework 添加到 链接的框架和库 然后你可以 Go to 构建
  • 使用 sed 合并两个模式之间的行

    我有一个如下所示的输出文件 HEADER 1 server1 server2 server3 server4 server5 server6 server7 server8 server9 HEADER 2 HEADER 1 server1
  • 有没有办法在html中插入QPixmap对象?

    简单的情况 我有一个对象 它有一个QPixmap成员 首先创建对象 现在像素图为空 然后从数据库读取像素图并将其插入对象中 我需要在 html 代码 中插入该像素图并在 a 中显示该 html 代码QLabel但我不知道如何制作它 因为像素
  • Angular 2 Router、href 链接和不需要的页面刷新

    我目前正在尝试 angular2 beta1 我对新路由器有点困惑 通过 router navigate 进行导航就像一个魅力 而尝试通过注册路线的普通链接来刷新页面 当然 PathLocationStrategy 会发生这种情况 因为 H
  • Javascript 正则表达式 - 如何获取大括号之间的文本

    我需要获取大括号之间的文本 如果有 我确实找到了另一篇文章 但从技术上讲 它没有正确回答 用于提取方括号或大括号之间的文本的正则表达式 它实际上并没有说明如何实际提取文本 所以我已经做到了这一点 var cleanStr Some rand
  • 如何使用 jQuery 隐藏 div?

    当我想隐藏 HTML 时 div 我使用以下 JavaScript 代码 var div document getElementById myDiv div style visibility hidden div style display
  • 为什么这个 Javascript 方法不会继续调用自身?

    我有一个带有特权方法的 JavaScript 对象 当此方法完成后 我希望它调用自身 在短暂的超时后 并继续无限期地运行 不幸的是 该方法只运行两次 然后就停止了 没有任何错误 在 Chrome 和 IE 中测试 结果相同 代码如下 fun
  • HTML5 视频源作为本地存储的 blob 不再工作

    从 Chrome 80 开始 Blob 或 IndexedDB 的工作方式似乎发生了变化 将视频文件作为 blob 加载并通过 createObjectURL 将其分配给 HTML5 Video 元素仍然有效 load the blob t