美文网首页
Canvas截取视频流上传图片

Canvas截取视频流上传图片

作者: 空腹无才 | 来源:发表于2021-05-23 18:32 被阅读0次

    video 视频流转换为图片并上传至服务器

    一、客户端

    video 对象可以获取摄像头视频流

    // index.html
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <div>
            <video id = "video" width="300" height="300"></video>
            <canvas id="canvas" width="300" height="300"></canvas>
        </div>
    </body>
    </html>
    
        let voideo = document.querySelector("#video");
        let canvas = document.getElementById("canvas");
        
        // 生成2d canvas 容器
        let context = canvas.getContext("2d");
        
        // navigator 存储了浏览器相关基本信息
        // navigator.mediaDevices 判断是否可以有媒体设备
        // navigator.mediaDevices.getUserMedia 是否可以使用媒体设备
        if(navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
            let options = {
                audio: false,       // 是否开启音频设备
                video: {           // 视频输入设备 
                    width: 300,
                    height: 300, 
                }
            }
            navigator.mediaDevices.getUserMedia(options).then(
                function(stream) {
                    // 获取视频流,并添加到video对象中
                    video.srcObject = stream;
                    video.play();
                    createImage();
                }
            )
        }
        
        function createImage() {
            //绘图
            setInterval(() => {
                // 向画布上绘制图片
                let data = context.drawImage(voideo, 0, 0, 300, 300);
                // 设置图片格式 获取base64图片内容
                var image = canvas.toDataURL('image/png');
                upDataImage(image);
            }, 3000)
        }
        
        // 将图片上传至服务器处理
        function upDataImage(data) {
            fetch(
                '你的url地址',
                {
                    method: "post",
                    body: JSON.stringify({img: data}),
                    headers: {
                        'Content-Type': 'application/json'
                    },
                }
            ).then(res => {
                res.json().then(val => {
                    console.log(val)
                })
            })
        }
    

    二、知识点

    1. video 获取视频流并播放
    2. canvas 将图片转换为base64格式
    3. navigator 判断是否可以调用摄像头

    相关文章

      网友评论

          本文标题:Canvas截取视频流上传图片

          本文链接:https://www.haomeiwen.com/subject/epuzjltx.html