使用媒体api实现网页录屏
使用MediaDevices
中提供的接口实现前端进行网页的录屏,并实时转化为二进制数据(视频)
使用MediaDevices.getDisplayMedia
获取屏幕
通过MediaDevices.getDisplayMedia
,可以在征得用户允许的情况下,获得窗口或者整个屏幕的录制权限(取决于用户的选择),其使用promise风格的方式进行用户权限获取
1 | async () => { |
该函数接收一个称作constraints
的参数,即可以利用此参数配置一些类似采样率之类的专业的音视频参数,但是支持度可能存在一定的问题
使用获取到的视频流
使用MediaRecorder
来进行流的处理,可以进行实时的包装,停止录屏后将记录到的流打包成为二进制大对象(blob)并置入页面的视频源中,也可以利用页面媒体元素中的srcObject
进行更简单的操作
1 | // 通过MediaRecorder进行录制重放 |
更简易的方式
使用实验性的srcObject
,可以直接将视频流绑定到页面的多媒体元素上
1 | video.srcObject = stream |
实例
总结
在Chrome Dev Submit 2021的线上宣讲会中,邀请到了kapwing来分享他们如何利用最新的web多媒体api搭建在线多媒体编辑器
正在使用的Api
Api | 实现的功能 |
---|---|
IndexedDB | 尽可能将数据存储在本地以支持高性能的编辑 |
Web Sockets Api | 允许用户进行实时协作 |
Web Audio Api | 加载音轨,实现对声音的编辑操作 |
Media Recorder Api | 记录网络摄像头和屏幕,实现表情记录等功能 |
Web Workers | 将复杂的运算分流到workers中,避免影响主线程性能 |
PWA | 渐进式webapp,第一次加载完成后,使应用可以安装到桌面 |
未来计划使用的功能
Api | 实现的功能 |
---|---|
Web Codecs | 加速帧绘制 |
WebGL | 更复杂的动画效果 |
Media Source Extensions | 加速片段间的切换 |
除此之外,大会上还介绍了基于容器的媒体查询功能,探讨了Google内置隐私沙盒的功能并逐渐限制第三方cookie。谷歌对浏览器的垄断,导致了chrome大步走在浏览器的最前沿,未来还会有哪些各种各样的新奇技术,或许让前端工程师包罗一切的话,头发都不够掉的🤣