# JavaScript-webRTC

# 预备知识点

建议前往MDN详细了解


# 视频录制-可下载

<!DOCTYPE html>
<html lang="ZH-CN">
<head>
    <meta charset="UTF-8">
    <title>webRTC-视频录制</title>
    <style>
        body {text-align: center;}
        #wlk {width: 400px;height: 300px;border: 1px solid red;}
        #downbtn {display: none;}
    </style>
</head>

<body>
<video src="" id="wlk"></video>
<p>
    <button id="start">开始录制</button>
    <button id="stop">停止录制</button>
</p>
<p>
    <span>提示信息:</span>
    <span id="info">暂未开始录制</span>
</p>
<a href="" download id="downbtn">下载视频</a>

<script>
    const video = document.getElementById("wlk"),
          start = document.getElementById("start"),
          stop = document.getElementById("stop"),
          downBtn = document.getElementById('downbtn'),
          info = document.getElementById('info');
    let recorder, mediaStream;

    start.addEventListener('click', function () {
        info.innerHTML = '即将进行录制';
        navigator.mediaDevices.getUserMedia({
            video: true,
            audio: true
        }).then(stream => {
            info.innerHTML = '视频录制中...';
            mediaStream = stream;
            video.srcObject = stream;
            video.play();
            recorder = new MediaRecorder(stream);
            recorder.ondataavailable = e => {
                downBtn.href = URL.createObjectURL(e.data);
            };
            recorder.start();
        })
    });

    stop.addEventListener('click', function () {
        info.innerHTML = '视频录制结束';
        video.pause();
        recorder.stop();
        mediaStream.getTracks().forEach(track => {
            track.stop();
        });
        downBtn.style.display = 'block';
    })
</script>
</body>
</html>


# 图片拍摄-可上传下载

<!DOCTYPE html>
<html lang="ZH-CN">
<head>
    <meta charset="utf-8">
    <title>webRTC-拍照</title>
    <style>
        body {text-align: center;}
        #pic {width: 400px;border: 1px solid red;margin: 0 auto;}
        #downBtn, #upload {display: none;margin: 0 auto;}
    </style>
</head>
<body>
<div id="pic">
    <video id="video" width="400" height="300"></video>
    <canvas id='canvas' width='400' height='300'></canvas>
</div>
<button id='tack' disabled>拍摄照片</button>
<button id="upload">上传文件</button>
<a href="" download="webRTC" id="downBtn">下载图片</a>

<script>
    const video = document.getElementById('video'),
          canvas = document.getElementById('canvas'),
          snap = document.getElementById('tack'),
          downBtn = document.getElementById('downBtn'),
          upload = document.getElementById('upload');

    tack.innerHTML = '准备ing';
    // 打开摄像头
    navigator.mediaDevices.getUserMedia({
        video: true,
        audio: false
    }).then(stream => {
        tack.innerHTML = '拍摄照片';
        tack.disabled = false;
        video.srcObject = stream;
        video.play();
    });

    //拍摄照片
    snap.addEventListener('click', function () {
        //绘制canvas图形
        canvas.getContext('2d').drawImage(video, 0, 0, 400, 300);
        //把canvas图像转为img图片:base64
        downBtn.href = canvas.toDataURL("image/png");

        downBtn.style.display = 'block';
        upload.style.display = 'block';
    });

    //上传图片
    upload.addEventListener('click', function () {
        /*
        如果接口可接受base64编码的话,直接在这儿调用接口即可。
        如果接口只接受图片就得将base64转换成图片。转换方法网上有很多。
        */
        alert(downBtn.href);
    });
</script>
</body>
</html>
作者:王龙楷; 标签:原创; 提交时间: 5/21/2020, 5:15:19 PM