用浏览器轻松录制音频、视频—— MediaRecorder API
原文链接
浏览器有个强大而且简单的API —— MediaRecorder,顾名思义,可以用来录制音频和视频。 闲话不说,先上demo ——
#demo1: 录制语音
< 微信(66)哈哈哈···
说话
按住说话
show in codepen
#demo2: 录制视频
< 微信(66)哈哈哈···
拍段视频吧
按住拍视频
show in codepen
看完demo,再来看看怎么实现吧 ——
#简介
API可以说是相当简单粗暴了
#一个构造函数 MediaRecorder()
创建一个新的MediaRecorder对象,用来进行录制操作。
上面的demo只用到了两个方法和两个事件 ——
#两个方法start、stop
#start()
开始录制媒体。
可以设置一个参数,录制的媒体会按照设置的值进行分割成一个个单独的区块, 而不是以默认的方式录制一个非常大的整块内容。
#stop()
停止录制,同时触发dataavailable事件,返回一个存储Blob内容的录制数据。
#三个事件start、stop、dataavailable
#onstart
录制开始时触发
#onstop
录制结束时触发
#ondataavailable
录制结束时同时触发,事件对象中返回录制的媒体数据
#代码片段
demo中用到的部分代码:
获取用户媒体权限,创建媒体录制对象:
requestMediaAccess () {//获取用户媒体权限,视频的话参数{audio: true, video: true}navigator.mediaDevices.getUserMedia({audio: true}).then(stream => {//创建媒体录制对象this.recorder = new window.MediaRecorder(stream);this.bindEvents();}, error => {alert('出错,请确保已允许浏览器获取录音权限');});
}
绑定事件,处理录制数据:
bindEvents () {this.recorder.ondataavailable = this.getRecordingData;this.recorder.onstop = this.saveRecordingData;
},getRecordingData (e) {//录制的数据this.chunks.push(e.data);
},//保存音频数据
saveRecordingData () {let blob = new Blob(this.chunks, { 'type' : 'audio/ogg; codecs=opus' }),audioStream = URL.createObjectURL(blob),//估算时长duration = parseInt(blob.size / 6600);if(duration <= 0) {alert('说话时间太短');return;}if(duration > 60) {duration = 60;}this.chunkList.push({duration: duration, stream: audioStream});this.chunks = [];
},//视频的话:保存视频数据
saveRecordingData () {let blob = new Blob(this.chunks, { 'type' : 'video/webm' }),videoStream = URL.createObjectURL(blob);this.chunkList.push({stream: videoStream});this.onCapture(this.index); this.chunks = [];
},//视频:获取视频截图
onCapture (index) {let item = this.chunkList[index];this.ctx.drawImage(this.video, 0, 0, this.canvas.width, this.canvas.height);this.canvas.toBlob((blob) => {let src = URL.createObjectURL(blob);this.$set(item, 'poster', src);});//索引后移this.index ++;//隐藏videothis.showVideo(false);this.video.srcObject = null;
}
注意
估算时长那块是我拍脑袋瞎弄的
用浏览器轻松录制音频、视频—— MediaRecorder API相关推荐
- 浏览器怎么录制网页视频?3种网页视频录制方法
我们每天都会在浏览器上观看大量的视频,尤其是在爱奇艺.腾讯.哔哩哔哩等网页上.有时候就会观看到一些精彩的视频画面,就想要将这些画面给下载. 那怎么把网页视频录制下来?今天本文就给大家分享3种有效的网页 ...
- Android音频处理知识(一)MediaRecorder录制音频
在Android中处理音频方面的知识一直是一块很重要的知识,正好最近公司做一个关于打卡的内容,所以正好总结一下相应的知识,其实这块的知识挺杂挺乱的,所以这个不打算一次讲解完,分开给大家讲解,如果有什么 ...
- Android录制音频方式AudioRecorder和MediaRecorder
AudioRecorder和MediaRecorder AudioRecord和MediaRecorder两种都可以录制音频,MediaRecorder已实现大量的封装,操作起来更加简单,而Audio ...
- html5视频常用API接口
一.虽然有的属性是boolean类型,但仍旧建议按照XHTML书写(属性名="属性值")格式,避免出现错误 (下面加粗的属性为常用属性) 属性 值 功能描述 controls co ...
- HTML5媒体(音频/视频)
摘要: 在HTML5出现之前,web媒体大部分通过Flash来实现.这种方式造成了文件大加载慢,影响网站性能,开发难度高,维护麻烦,不易扩展等.这就导致HTML5自己开始支持媒体功能.HTML5 DO ...
- HTML-参考手册: HTML 音频/视频
ylbtech-HTML-参考手册: HTML 音频/视频 1.返回顶部 1. HTML 音频/视频 DOM 参考手册 HTML5 DOM 为 <audio> 和 <video> ...
- video/audio 音频/视频 标签详解
video <video> 标签定义视频,比如电影片段或其他视频流. 可以在 <video> 和 </video> 标签之间放置文本内容,这样不支持 <vid ...
- 平凡前端之路_03.HTML5的音频视频多媒体
文章目录 HTML5音频视频 HTML5音频 HTML5视频 HTML5音频视频常用属性 HTML5音频视频常用方法 HTML5音频视频常用事件 HTML5音频视频特殊属性 浏览器不支持音频视频自动播 ...
- HTML 事件、音频/视频
HTML 事件属性 全局事件属性 HTML 4 的新特性之一是可以使 HTML 事件触发浏览器中的行为,比方说当用户点击某个 HTML 元素时启动一段 JavaScript. 如果你想学习更多关于事件 ...
最新文章
- datatable无法设置横向滚动条(设置无效)
- 建议你吃透这68个内置函数!
- mongodb权限管理02
- 是时候抛弃旧的摩尔定律了
- struts2对action的搜索规则
- 关于css选择器的问题 + * ~这三个有什么区别
- k8s核心技术-Service概述_Service如何实现负载均衡_提供虚拟IP_以及Po的IP注册和发现---K8S_Google工作笔记0031
- java scanner以回车结束_大佬看了直呼内行,你当初Java刚入门是否也是这样写代码?...
- 微信开发者工具之WXS和简单组件
- SD/TF卡驱动(一)--------SD卡相关简介
- SEO之关键词的选择
- id 查找apple,怎么查找我的apple id?
- ios android 图文混排,[分享]iOS开发-50行代码实现图文混排
- static变量有什么作用
- asp.net mvc Html.BeginForm()用法
- C#windows宿舍信息管理系统
- 拒绝java_java拒绝策略 - V丶zxw的个人空间 - OSCHINA - 中文开源技术交流社区
- 抖音短视频零基础能做到百万粉丝吗?国仁楠哥
- JSON之Jackson(一)
- 神秘电影质感开场预告pr视频模板 PR开场视频模板
热门文章
- win10 C盘满 清理终极大法
- html5 canvas 图片移动端,支持移动端的HTML5 Canvas逼真黑板特效
- 如何修改Win10窗口底色/背景颜色/护眼模式?
- 必须学会的几个网络测试命令
- java反编译工具gd gson,浅谈Android中static修饰符,及Gson转String实例
- fragment添加失败错误查找
- JAVA-多线程 三 {多线程状态}JAVA从基础开始 -- 3
- 【QT】翻金币小游戏·我的学习版
- pytorch网络知识点四_thop计算Parameter和FLOPs,__all__的作用, GFLOPs =? GMacs
- 信源编码技术作业(1)——使用Audacity软件绘制清浊音频谱图并进行分析