javascript - React native (Android) - 创建 URL.createObjectURL(blob)
问题描述
我试图创建一个 blob url 以使用字符串作为 JwPlayer 字幕的文件。
字幕是这样加载的:
const playlistItem = {
...
tracks: [
{
file: 'https://myfakesite.org/subtitles.vtt',
label: 'en'
}
]
}
因此,因为 jwplayer 不接受我的源(subtitles.ass),所以我将 .ass 转换为 .vtt,结果为字符串。
像这样:
var vttRaw = `WEBVTT
00:00:25.520 --> 00:00:29.250
Naquele dia,
a humanidade foi lembrada...
00:00:35.110 --> 00:00:38.180
do terror de estar à mercê deles`;
由于 jwplayer 需要一个 url,我将此字符串转换为 blob url:
//Generate blob
var blob = new Blob([vttRaw], {
type: "text/vtt; charset=utf-8"
});
//Generate url
var vtt_url = URL.createObjectURL(blob) + "#.vtt";
在可以工作的网络浏览器中,但在 react-native-android 中会导致错误。
Possible Unhandled Promise Rejection (id: 0):
Error: Cannot create URL for blob!
我认为问题是生成一个blob url,有人知道我能做什么吗?
解决方案
我在 React Native for Android 中遇到了这个问题。以下适用于iOS但不适用于Android
URL.createObjectURL(blob)
尝试传递 base64 数据而不是 url,就像在这篇文章中一样。
也许是这样的:
//Generate blob
var blob = new Blob([vttRaw], {
type: "text/vtt; charset=utf-8"
});
const fileReaderInstance = new FileReader();
fileReaderInstance.readAsDataURL(blob);
fileReaderInstance.onload = () => {
base64 = fileReaderInstance.result;
vtt_data = base64;
}
推荐阅读
- docker - 为什么我无法连接到 localhost 端口 5000,为什么会被拒绝?
- excel - 如何从 Outlook 邮件正文中复制带有超链接的文本并以正确的格式保存到 Word 文档中
- java - ResourceBundleMessageSource 属性不起作用
- permissions - 如何在 ModelViewSet 中设置 POST 请求的权限
- c++ - 理解运算符重载的问题
- android - 使用 Gradle 安装时强制 Android 版本降级
- c# - 如何使用 .Net Framework 通过 C# 获取 Windows 注册表项的真正价值?
- javascript - 聚合物 3 中未定义的工厂全局变量
- javascript - Javascript 模块包含在量角器配置 js 文件中
- javascript - 传单层上的多个即时过滤