在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) => {
                        sourceBuffer.appendBuffer(event.data);
                    }

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

</html>

运行之后会报如下错误:
image.png
一运行到sourceBuffer.appendBuffer(event.data)就会报错

阅读 1.9k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题