当图像 src 值来自不同的来源时,具有虚拟背景的视频变黑

Video with virtual background goes black when image src value comes from an different origin

提问人:Toki1117 提问时间:11/14/2023 更新时间:11/16/2023 访问量:28

问:

我正在尝试从不同的来源加载图像以将其用作虚拟背景。首先,我获取图像,并且能够在页面中的另一个元素中显示它(看起来CORS不是问题??),但是不知何故,在virtualBackground中附加图像时,视频会变黑,如果我使用来自同一来源的图像,它会加载而不会出现问题。

控制台中也没有错误。

我正在使用 twilio/video-processors.js v 2.0.0 和 twilio-video v2.28.1。 请检查下面的代码段:

const loadImage = (imgSource: string): Promise<HTMLImageElement> =>
      new Promise((resolve, reject) => {
        const img = new Image();
        img.src = imgSource;
        // img.src = '/specificResources/my-bg.jpg'; // When I use this one it works
        img.onload = () => resolve(img);
        console.log('IMAGE', img); // Prints img element
        img.onerror = (e) => {
          console.log('onerror', e);
          reject(e);
        };
      });
    try {
      const imgUri =
        'https://my.domain.com/images/fdef355eb7a7';
      const data = await fetchResource(imgUri);
      const backgroundImage = await loadImage(data.location); // data.location is another url
      console.log('[backgroundImage]', backgroundImage); // Prints img element
      const virtualBackground = new VirtualBackgroundProcessor({
        assetsPath: '/twilioVideoProcessorAssets',
        backgroundImage,
        fitType: ImageFit.Contain,
        pipeline: Pipeline.Canvas2D,
      });
      await virtualBackground.loadModel();
      console.log('Adding processor');
      videoTrack.addProcessor(virtualBackground); 
    } catch (error) {
      console.error('Error loading model', error);
    }
图像 视频 背景 Twilio 视频处理

评论


答:

1赞 Toki1117 11/16/2023 #1

事实证明,这毕竟是一个 CORS 问题,服务器需要在资源的响应标头中包含一些属性。

Access-Control-Allow-Origin=<origin> 
Vary: Origin 

不知何故很难弄清楚,因为它没有在控制台中抛出任何 CORS 错误或任何其他类型的错误,并且视频突然变黑,因此可能会误解其他事情正在发生,除非您添加图像对象,否则您会注意到。crossOrigin="anonymous"

因此,也许在控制台中抛出一些错误或异常消息还有改进的余地。

以下是一些有用的文档: