繁体   English   中英

ReactJS canvas drawImage 不显示 html5 视频元素

[英]ReactJS canvas drawImage without showing html5 video element

我需要使用drawImage从canvas顶部的摄像头绘制stream,但是当我在react组件中添加视频元素时,它也会在页面中显示元素的stream。 如果我使用 display:'none' drawImage 无法绘制用户的网络摄像头,它会绘制空白屏幕。 我是否必须在页面中显示 html5 视频元素,或者有没有办法在不显示的情况下播放它?

我正在使用 getUserMedia 从相机获取视频 stream:

async function getCameraStream() {
      try {
        const constraint = { video: true }
        const stream = await navigator.mediaDevices.getUserMedia(constraint)
        if (videoRef.current) {
          videoRef.current.srcObject = stream
          return
        }
      } catch (error) {
        console.error('Error opening video camera.', error)
      }
      setLoading(false)
      setCameraError(true)
    }

视频参考是:

  return(  <video 
              style={{display: 'none' }}
              ref={videoRef}
              className={classes.sourcePlayback}
              src={sourceUrl}
              hidden={isLoading}
              autoPlay
              playsInline
              controls={false}
              muted
              loop
              onLoadedData={handleVideoLoad}
            />)

我在 canvas 中使用这个 videoRef 像:

ctx.drawImage(sourcePlayback.htmlElement, 0, 0)

在这里,如果 htmlElement 与 display:'none' 一起给出,则它不会绘制。 我想绘制 htmlElement 但不在页面中显示它。有没有办法实现这一点? 我希望 html5VideoElement 基本上不可见地播放。display:none 不起作用。

编辑:

添加 css 作为可见性:“隐藏”适用于此。

sourcePlayback: {
      visibility: 'hidden',
      display: 'flex',
      width: 0,
      height: 0,
    },

我能够使用https://record.a.video在 chrome 中复制您的问题。

当我在视频属性上使用display: none时,canvas 上的视频覆盖是黑色的,而不是我的相机。

解决方法:

当我将视频上的 CSS 设置为width:1px时,视频会显示在 canvas 上。 我想它在技术上是在屏幕上,但它可能会为你的目的工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM