如何在没有获取 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/