Web前端技术 2020-04-23 14:26 采纳率: 0%
浏览 643

在html下如何实现摄像头录制的视频实时显示在当前页面中的另一个video中?

现在有个项目,在同html中有两个video,一个video打开摄像头录制视频,另一个video实时显示录制的视频,利用MediaRecoder、MediaSouce,求大神指导,代码如下:

test.html

<!doctype html>
<html>

<head>
    <meta charset="UTF-8">
    <title>摄像头调用</title>
    <style>
        #test {
            width: 200px;
            height: 200px;
        }
    </style>
</head>

<body>
    <video id="v"></video>
    <video id="test"></video>
    <button onclick="openCamera()">启用摄像头</button>
    <script>
        var video = document.querySelector('#v');
        var testVideo = document.querySelector('#test');
        var mimeCodec = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';
        var sourceBuffer;
        var mediaRecorder;
        var mediaStream;

        // 接收视频并展示
        var mediaSource = new MediaSource();
        testVideo.src = URL.createObjectURL(mediaSource);

        mediaSource.addEventListener('sourceopen', (event) => {
            console.log('mediaSource打开:', event);
            sourceBuffer = mediaSource.addSourceBuffer(mimeCodec);

            sourceBuffer.addEventListener('updateend', (event) => {
                console.log('sourceBuffer更新结束:', event);
                mediaSource.endOfStream();
                testVideo.play();
            });
        });

        function openCamera() {
            var constraints = { audio: true, video: { width: 100, height: 100 } };

            navigator.mediaDevices.getUserMedia(constraints)
                .then(stream => {
                    mediaStream = stream;
                    console.log('mediaStream-', mediaStream);

                    video.srcObject = mediaStream;
                    video.onloadedmetadata = function (e) {
                        console.log('视频可以使用', e);
                        console.dir(video);
                        video.play();
                    };


                    mediaRecorder = new MediaRecorder(mediaStream);

                    mediaRecorder.ondataavailable = (event) => {
                        event.data.arrayBuffer()
                            .then(data => {
                                sourceBuffer.appendBuffer(data);
                                console.log('正确正确');
                            }
                        );
                    }

                    mediaRecorder.start(1000);
                })
                .catch(err => { console.log(err.name + ": " + err.message); });
        }
    </script>
</body>

</html>

然后打开摄像头之后就会报如下的错误:
图片说明

  • 写回答

1条回答 默认 最新

  • wem520 2020-04-23 15:50
    关注

    看你的代码应该是没有给testvideo赋值播放源吧

    评论

报告相同问题?

悬赏问题

  • ¥15 51寻迹小车定点寻迹
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含
  • ¥15 麒麟V10桌面版SP1如何配置bonding
  • ¥15 Marscode IDE 如何预览新建的 HTML 文件