3

我正在尝试在反应应用程序中加载 ffmpeg.wasm 来做一个小型视频转换器项目。该代码在 chrome 上运行良好,但在 Firefox 开发版(83.0b)中我发现以下错误:

ReferenceError:未定义 SharedArrayBuffer

这是捕获错误的组件部分(变量 ready 永远不会变为 true):

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()
  }, [])

在此先感谢,让我知道是否应该提供更多详细信息。

4

2 回答 2

3

尝试在服务器响应中添加这些标头:

Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp

您可以在此处找到一些详细信息:https ://web.dev/coop-coep/

于 2020-12-14T12:28:44.437 回答
1

添加标题只是我解决方案的一部分。

首先在 Apache 我需要启用 mod_header

sudo a2enmod headers

mysite.conf然后我可以在文件中设置标题

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

设置阿帕奇

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/

于 2020-12-28T19:07:30.183 回答