尝试运行 ffmpeg.wasm 时,我不断收到“未定义 SharedArrayBuffer”错误。看来这是在 Webassembly 方面。无论如何,我知道这是一个可以通过跨源隔离解决的问题。但是,我试图在本地主机上运行它,据我所知,跨源隔离无济于事。我尝试按照本指南底部的说明进行操作,但无济于事。我也尝试过更改 Chrome//flags 的方法,但这也不起作用。我只需要能够在浏览器中运行 ffmpeg/wasm 但有点麻烦。有什么想法吗?
问问题
209 次
2 回答
1
本地主机服务器应提供所需的响应标头:
$ curl -I http://localhost/
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
此服务器脚本提供了SharedArrayBuffer
可用性的基线测试:
// $ node server.mjs
import { createServer } from 'http'
createServer((request, response) => {
response.writeHead(200, {
'Content-Type': 'text/html; charset=utf8',
'Cross-Origin-Opener-Policy': 'same-origin',
'Cross-Origin-Embedder-Policy': 'require-corp',
})
response.write(`<script>
document.write(window.SharedArrayBuffer
? '✅ SAB available'
: '❌ SAB unavailable'
)
</script>`)
response.end()
}).listen(80)
于 2021-12-30T19:55:17.467 回答
-1
您可以通过使用以下响应标头为页面提供服务来使页面跨域隔离:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
如果使用 NGINX 作为代理,只需将以下代码添加到要添加标头的位置块:
location some-location {
add_header "Cross-Origin-Opener-Policy" "same-origin";
add_header "Cross-Origin-Embedder-Policy" "require-corp";
}
或者更简单,您可以使用此页面中的令牌来启用 SharedArrayBuffer,而无需对页面进行跨域隔离。但是,它有一个有效期。
在您的网页中,您只需将以下标签添加到标签中
<head>
<meta http-equiv="origin-trial" content="{token}">
</head>
如果您使用 NGINX,请添加标题
add_header Origin-Trial {token};
于 2021-12-31T14:16:35.943 回答