我使用 ReactJS 来显示一个使用 HTML5 视频元素的实时流(来自我的网络摄像头)。OpenVidu 媒体服务器处理后端。我想使用该canvas
元素使用 drawImage() 方法将视频直播流绘制到画布上。
我见过其他例子,但在它们中,视频元素总是有一个来源。我的没有来源 - 当我检查视频元素时,我看到的是:
<video autoplay id="remote-video-zfrstyztfhbojsoc_CAMERA_ZCBRG"/>
这是我尝试过的,但是画布不起作用。
export default function Video({ streamManager }) {
const videoRef = createRef()
const canvasRef = createRef()
useEffect(() => {
if (streamManager && !!videoRef) {
//OpenVidu media server attaches the live stream to the video element
streamManager.addVideoElement(videoRef.current)
if (canvasRef.current) {
let ctx = canvasRef.current.getContext('2d')
ctx.drawImage(videoRef.current, 0, 0)
}
}
})
return (
<>
//video element displays the live stream
<video autoPlay={true} ref={videoRef} />
// canvas element NOT working, nothing can be seen on screen
<canvas autoplay={true} ref={canvasRef} width="250" height="250" />
</>
)
}
更新:经过进一步调查,我意识到我需要使用 setInterval() 函数,因此提供了以下解决方案。