首页 > 其他分享 >vue视频会议录屏并保存mp4格式到本地

vue视频会议录屏并保存mp4格式到本地

时间:2022-12-12 13:48:40浏览次数:66  
标签:vue 录制 录屏 webm mp4 MediaRecorder video recorder

项目中,在视频会议中需要添加一个录屏功能
image

主要是利用new MediaRecorder()来实现屏幕录制功能。

// 录制屏幕
    async screenRecording () {
      // 提示用户去选择和授权捕获展示的内容或部分内容(如一个窗口)
      this._stream = await navigator.mediaDevices.getDisplayMedia({ video: true, audio: true })
      // vue自带类,将获得的媒体流传入,mimeType录制的格式
      this._recorder = new MediaRecorder(this._stream, { mimeType: 'video/webm;codecs=h264' })
      this._recorder.ondataavailable = this.recorder_dataAvailablHandler.bind(this)
      // 开始录制
      this._recorder.start()
    },
    // 保存视频数据
    recorder_dataAvailablHandler (e) {
      // 将视频数据保存到currentWebmData
      this.currentWebmData.push(e.data)
    },
    // 停止录屏
    async recordingStop () {
      this._recorder.stop()
    },
    // 将blob数据转化为mp4格式,并保存到本地
    async recordingSave () {
      const blob = new Blob(this.currentWebmData, { type: 'video/mp4' })
      const url = URL.createObjectURL(blob)
      const a = document.createElement('a')
      document.body.appendChild(a)
      a.style.display = 'none'
      a.href = url
      // 设置下载文件名
      if (this.fileName) {
        a.download = this.fileName + '.mp4'
      } else {
        a.download = new Date() + '.mp4'
      }
      // 下载文件
      a.click()
      // 释放内存
      window.URL.revokeObjectURL(url)  
    },

展示效果
image

image

知识点总结

MediaRecorder 基本格式

let mediaRecorder = New MediaRecorder(stream, [options])

参数 说明
stream 媒体流,可以从getUserMedia video,audio,canvas 等获取
options 限制选项

options 限制选项

选项 说明
mimeType (指定录制的音频还是视频以及录制的格式) 1.vide/webm (或者video/mp4)等 2.audio/webm 3.video/webm;codecs=vp8 4.vide/webm;codecs=h264 5.audio/webm; codecs=opus
audioBitsPerSecond 音频码率
videoBitsPerSecond 视频码率(码率越高,清晰度越高)
bitsPerSecond 整体码率

MediaRecorder API

  • MediaRecorder.start(timeslice)
    开始录制媒体,timeslice是可选的。
    如果设置了会按时间切片存储数据,若不设置,所有录制数据都会存储到一个大的Buffer中
  • MediaRecorder.stop()
    停止录制,会触发包括最终Bolb数据的 detaavailable事件
  • MediaRecorder.pause()
    暂停录制
  • diaRecorder.resume()
    恢复录制
  • diaRecorder.isTypeSupported()
    检查支持录制的文件格式

diaRecorder.start(timeslice),对于ondataavailable事件:如果指定了timeslice,则会每隔一段时间触发这个事件,然后对数据进行处理。如果没有指定timeslice,则会在视频录制完成,调用stop结束录制时去出发这个事件

MediaRecorder 事件

  • diaRecorder.ondataavailable
    当数据有效时触发,可监听此事件,当数据有效,存储到缓冲区中,会传event和data,data为真正数据
    每次记录一定事件的数据时,会定期触发。没有指定时间片,则记录整个数据时触发
  • diaRecorder.onerror
    当有错误发生时,录制会自动被停止

JavaScript 几种存储数据方式

  • ob
    十分高效的和存储区域,Buffer 可放到Blob,可将整个缓存区写入文件中
  • rayBuffer
    可通过 Blob对 Buffer做各种操作
  • rayBufferView
    各种各样的 Buffer,都可以做 Blob的参数

生成文件用 Blob,底层数据一般用 ArrayBuffer或 ArrayBufferView

标签:vue,录制,录屏,webm,mp4,MediaRecorder,video,recorder
From: https://www.cnblogs.com/wang--chao/p/16975656.html

相关文章

  • Vue3.0文档学习心得--响应式核心
    1.ref():接受一个内部值,返回一个响应式的、可更改的ref对象.此对象只有一个指向其内部值的属性 .value。使用实例:constcount=ref(0) console.log(count.value)//......
  • Vue响应式系统原理并实现一个双向绑定
    这一章就着重讲两个点:响应式系统如何收集依赖响应式系统如何更新视图我们知道通过Object.defineProperty做了数据劫持,当数据改变的时候,get方法收集依赖,进而set方法调用......
  • Vue实战必会的几个技巧
    键盘事件在js中我们通常通过绑定一个事件,去获取按键的编码,再通过event中的keyCode属性去获得编码如果我们需要实现固定的键才能触发事件时就需要不断的判断,其实很......
  • Vue响应式依赖收集原理分析-vue高级必备
    背景在Vue的初始化阶段,_init方法执行的时候,会执行initState(vm),它的定义在src/core/instance/state.js中。在初始化data和propsoption时我们注意initProps......
  • vue源码分析-v-model的本质
    双向数据绑定这个概念或者大家并不陌生,视图影响数据,数据同样影响视图,两者间有双向依赖的关系。在响应式系统构建的上,中,下篇我已经对数据影响视图的原理详细阐述清楚了。而......
  • vue源码分析-事件机制
    这个系列讲到这里,Vue基本核心的东西已经分析完,但是Vue之所以强大,离不开它提供给用户的一些实用功能,开发者可以更偏向于业务逻辑而非基本功能的实现。例如,在日常开发中,我们......
  • vue源码分析-diff算法核心原理
    这一节,依然是深入剖析Vue源码系列,上几节内容介绍了VirtualDOM是Vue在渲染机制上做的优化,而渲染的核心在于数据变化时,如何高效的更新节点,这就是diff算法。由于源码中关于d......
  • SpringBoot+Vue+kkFielView实现文件预览时提示:Illegal base64 character 3a以及Vue中
    场景kkFileViewhttps://kkfileview.keking.cn/zh-cn/index.htmlkkFileView为文件文档在线预览解决方案,该项目使用流行的springboot搭建,易上手和部署,基本支持主流办公......
  • SpringBoot+Vue+kkFileView实现文档管理(文档上传、下载、在线预览)
    场景SpringBoot+Vue+OpenOffice实现文档管理(文档上传、下载、在线预览):https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/121363504上面在使用OpenOffice实......
  • vue面试考察知识点全梳理
    一、简介vue几个核心思想:数据驱动组件化虚拟dom、diff局部最优更新源码目录介绍Vue.js的源码在src目录下,其目录结构如下。src├──compiler#编译......