如何在没有获取 SharedArrayBuffer 的情况下在 Firefox 中使用 ffmpeg.wasm?
How to use ffmpeg.wasm in Firefox without getting the SharedArrayBuffer?
我正在尝试在 React 应用程序中加载 ffmpeg.wasm 以执行小型视频转换器项目。该代码在 chrome 上运行良好,但在 firefox 开发版 (83.0b) 中我发现了以下错误:
ReferenceError: SharedArrayBuffer is not defined
这是捕获错误的组件部分(变量 ready 永远不会变为真):
import React, { useState, useEffect } from 'react'
import styles from './App.module.css'
import { createFFmpeg, fetchFile } from '@ffmpeg/ffmpeg'
const ffmpeg = createFFmpeg({ log: true })
function App() {
// load state
const [ready, setReady] = useState(false)
// files state
const [video, setVideo] = useState('')
const [gif, setGif] = useState()
// UI state
const [dragOver, setDragOver ] = useState(false)
const [nOfEnters, setNOfEnters] = useState(0)
const load = async () => {
try {
await ffmpeg.load()
setReady(true)
} catch(error) {
console.log(error)
}
}
useEffect(() => {
load()
}, [])
提前致谢,如果我应该提供更多详细信息,请告诉我。
尝试在服务器响应中添加这些 headers:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
您可以在这里找到一些详细信息:https://web.dev/coop-coep/
添加 headers 对我来说只是解决方案的一部分。
首先在 Apache 中我需要启用 mod_header
sudo a2enmod headers
然后我可以在 mysite.conf
文件中设置 headers
Header set Cross-Origin-Opener-Policy: same-origin
Header set Cross-Origin-Embedder-Policy: require-corp
尽管如此之后我仍然遇到错误,需要创建 SSL 证书并为 HTTPS 设置 Apache。
生成 SSL 证书
sudo mkdir /etc/apache2/ssl
sudo openssl req -x509 -nodes -days 1095 -newkey rsa:2048 -out /etc/apache2/ssl/server.crt -keyout /etc/apache2/ssl/server.key
设置 Apachce
sudo a2enmod ssl
sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/000-default-ssl.conf
然后编辑 000-default-ssl.conf
文件
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
https://hallard.me/enable-ssl-for-apache-server-in-5-minutes/
我正在尝试在 React 应用程序中加载 ffmpeg.wasm 以执行小型视频转换器项目。该代码在 chrome 上运行良好,但在 firefox 开发版 (83.0b) 中我发现了以下错误:
ReferenceError: SharedArrayBuffer is not defined
这是捕获错误的组件部分(变量 ready 永远不会变为真):
import React, { useState, useEffect } from 'react'
import styles from './App.module.css'
import { createFFmpeg, fetchFile } from '@ffmpeg/ffmpeg'
const ffmpeg = createFFmpeg({ log: true })
function App() {
// load state
const [ready, setReady] = useState(false)
// files state
const [video, setVideo] = useState('')
const [gif, setGif] = useState()
// UI state
const [dragOver, setDragOver ] = useState(false)
const [nOfEnters, setNOfEnters] = useState(0)
const load = async () => {
try {
await ffmpeg.load()
setReady(true)
} catch(error) {
console.log(error)
}
}
useEffect(() => {
load()
}, [])
提前致谢,如果我应该提供更多详细信息,请告诉我。
尝试在服务器响应中添加这些 headers:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
您可以在这里找到一些详细信息:https://web.dev/coop-coep/
添加 headers 对我来说只是解决方案的一部分。
首先在 Apache 中我需要启用 mod_header
sudo a2enmod headers
然后我可以在 mysite.conf
文件中设置 headers
Header set Cross-Origin-Opener-Policy: same-origin
Header set Cross-Origin-Embedder-Policy: require-corp
尽管如此之后我仍然遇到错误,需要创建 SSL 证书并为 HTTPS 设置 Apache。
生成 SSL 证书
sudo mkdir /etc/apache2/ssl
sudo openssl req -x509 -nodes -days 1095 -newkey rsa:2048 -out /etc/apache2/ssl/server.crt -keyout /etc/apache2/ssl/server.key
设置 Apachce
sudo a2enmod ssl
sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/000-default-ssl.conf
然后编辑 000-default-ssl.conf
文件
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key
https://hallard.me/enable-ssl-for-apache-server-in-5-minutes/