• xiao豪
    2019-07-23
    示例代码

    var buffer;
    // 创建录制对象
    var mediaRecorder;

    // 当该函数被触发后,将数据压入到 blob 中
    function handleDataAvailable(e){
        if(e && e.data && e.data.size > 0){
                buffer.push(e.data);
        }
    }

    function startRecord(){
        // 防止多次启动报错
        if(mediaRecorder && mediaRecorder.state === "recording"){
            return;
        }

        buffer = [];

        // 设置录制下来的多媒体格式
        var options = {
                mimeType: 'video/webm;codecs=vp8'
        }

        // 判断浏览器是否支持录制
        if(!MediaRecorder.isTypeSupported(options.mimeType)){
            console.error(`${options.mimeType} is not supported!`);
            return;
        }

        try{
            mediaRecorder = new MediaRecorder(videoplay.srcObject, options);
        }catch(e){
            console.error('Failed to create MediaRecorder:', e);
            return;
        }

        // 当有音视频数据来了之后触发该事件
        mediaRecorder.ondataavailable = handleDataAvailable;
        // 开始录制
        mediaRecorder.start(10);
    }

    function startRecplay(){
        console.log(mediaRecorder)
        var blob = new Blob(buffer, {type: 'video/webm'});
        recvideo.src = window.URL.createObjectURL(blob);
        recvideo.srcObject = null;
        recvideo.controls = true;
        recvideo.play();
    }

    function download(){
        var blob = new Blob(buffer, {type: 'video/webm'});
        var url = window.URL.createObjectURL(blob);
        var a = document.createElement('a');

        a.href = url;
        a.style.display = 'none';
        a.download = 'aaa.webm';
        a.click();
        a.remove();
    }

    function stop(){
        if(mediaRecorder && (mediaRecorder.state === "recording" || mediaRecorder.state === "paused")){
            mediaRecorder.stop();
        }
    }
    展开

    作者回复: 非常棒!

    
     5
  • 耳东
    2019-07-23
    React版示例代码:
    https://github.com/baayso/react-tic-tac-toe/commits/master/src/components/Video/Video.js

    作者回复: 给你个大大的赞!

    
     1
  • lvxus
    2019-07-23
    老师,想请问一下录制桌面具体是什么操作

    作者回复: 后面的课程有讲,别着急!

    
     1
  • ZeroIce
    2019-08-03
    作业: https://codepen.io/vicksiyi/pen/pMWybg

    作者回复: 赞!

    
    
  • hao11111205
    2019-08-01
    老师,在谷歌浏览器点击下载,不出现保存窗口,直接下载。这是为什么?

    作者回复: 如果你之前在浏览器中有设置保存文件的默认路径就会这样子

    
    
  • K
    2019-07-24
    视屏可以下载播放,但是无法回放。
    rePlayVideo.src = window.URL.createObjectURL(blob); 提示不能赋值src为null t.js:75 Uncaught TypeError: Cannot set property 'src' of null
    控制台输出window.URL.createObjectURL(blob); 是blob:http://localhost:63342/15434d88-60de-44fc-bd2e-b1ecd453cc5a

    但是同样的代码 我把生成的url赋值给a标签 然后是可以下载的 而且视屏是有内容的啊


    这是什么情况啊
    展开

    作者回复: 明天例子就更新了,你对照着例子看一下

    
    
  • 恋着歌
    2019-07-24
    交作业 https://codepen.io/htkar/pen/OKMbzV

    作者回复: 不错! 不错!

    
    
  • K
    2019-07-24
    为啥我回放的时候提示我recvideo 是null blob的size是0

    作者回复: 明天demo会被放到 git 上,到时候你对照一下 demo看是不是哪里写错了

     1
    
  • CHY
    2019-07-23
    在安卓端也有这种现成的录制视频的类吗?如果没有的话是不是需要自己来合流并控制时间戳呢。

    作者回复: 一般都不使用移动端进行录制。如果真的要录制的话,需要使用 Native 的方法。

    
    
  • 李跃爱学习
    2019-07-23
    从产品的角度来讲, 应该是设置保存路径,开始录制,结束录制这么操作。
    但是看老师介绍的是要点击保存,就将当前blob的内容保存下来, 真实场景中,要录制很长时间,内存肯定是放不下吧,所以有点困惑,录制开始后是写到磁盘了,还是保存在内存中呢?

    作者回复: 我看一下 handleDataAvailable 这个函数,在这个函数中我是直接将它保存到内存中了。如果你想保存成文,可以直接在这里修改代码!

    
    
  • 剑衣清风
    2019-07-23
    github 里的代码可以运行么?

    关于这讲,推荐看看这个 https://cloud.tencent.com/developer/article/1366886 里的MediaRecorder使用示例 - 摄像头版,或者直接打开 https://wendychengc.github.io/media-recorder-video-canvas/cameracanvas.html,看看源文件的相关代码即可。

    作者回复: 可以运行,你再试一下

    
    
我们在线,来聊聊吧