首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向MediaStream添加水印图像

向MediaStream添加水印图像
EN

Stack Overflow用户
提问于 2021-03-22 03:00:54
回答 1查看 96关注 0票数 1

是否有可能将图像添加到MediaStream对象,该对象将通过摄像头的视频流?但不是作为另一个层,而是像嵌入到流一样,所以如果我将流对象传递给某个对等点,它也会有那个嵌入的图像。

代码语言:javascript
复制
var constraints = { audio: true, video: true };

navigator.mediaDevices.getUserMedia(constraints)
  .then(function(mediaStream) {
    var video = document.querySelector('video');
    video.srcObject = mediaStream;
    video.onloadedmetadata = function(e) {
      video.play();
    };
}).catch(function(err) { console.log(err.name + ": " + err.message); });

如上所述,我只是将mediaStream直接传递给视频元素,但我是否可以操作流来添加一些文本或图像?

EN

回答 1

Stack Overflow用户

发布于 2021-07-02 16:42:46

您必须使用画布操作视频流。

如果你的浏览器支持requestVideoFrameCallback,它应该是这样的:

代码语言:javascript
复制
navigator.mediaDevices.getUserMedia(constraints)
  .then(function(mediaStream) {
    let hiddenVideo = document.querySelector('video.hidden') // A video that is not displayed to the user 
    hiddenVideo.srcObject = mediaStream // Play the stream on the hidden video
    
    let canvas = document.querySelector('canvas'); // Get a canvas element, by creating or querying it (it may be hidden using 'display:none')
    let ctx = canvas.getContext('2d');
    let rVFC = () => {
        ctx.drawImage(hiddenVideo, 0, 0, hiddenVideo.videoWidth, hiddenVideo.videoHeight); // Draw the video image on your canvas
        // ... Manipulate your canvas here ...
        hiddenVideo.requestVideoFrameCallback(rVFC)
    }
    hiddenVideo.requestVideoFrameCallback(rVFC)
    
    var video = document.querySelector('video.shown');
    video.srcObject = canvas.captureStream(); // Display the canvas edit on the video
}).catch(function(err) { console.log(err.name + ": " + err.message); });

使用像这样的html

代码语言:javascript
复制
<video class="hidden" style="display:none" controls autoplay></video>
<video class="shown" controls autoplay></video>
<canvas style="display:none"></canvas>

备注

  • 如果您不需要视频控件,则video元素无用,并且您只能使用经过处理的canvas来显示流。
  • 如果您的浏览器不支持requestVideoFrameCallback,请使用requestAnimationFrame。有关requestVideoFrameCallback

的更多信息,请参见https://web.dev/requestvideoframecallback-rvfc/

要将编辑后的流发送给对等体,只需使用canvas.captureStream()创建的MediaStream

代码语言:javascript
复制
pc.addTrack(capturedStream.getVideoTracks()[0])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66736375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档