很久没有更新文章了,最近一段时间在调整生活节奏。今天记录下最近公司业务的一个关于前端录屏的调研,写下其中 关于 MediaRecorder API 的学习记录。
mediaDevices
首先简单的了解一下 mediaDevices
mediaDevices 接口提供访问连接媒体输入的设备,如照相机和麦克风,以及屏幕共享等。它可以使你取得任何硬件资源的媒体数据。
enumerateDevices()
enumerateDevices() 请求一个可用的媒体输入和输出设备的列表,例如麦克风,摄像机,耳机设备等
1 | navigator.mediaDevices.enumerateDevices().then(deviceList => { |
getUserMedia()
该方法会提示用户给予使用媒体输入的许可,点击允许后会 resolve 回调一个 MediaStream 对象,若用户拒绝了使用权限,或者需要的媒体源不可用。
返回的 promise 对象可能既不会 resolve 也不会 reject,因为用户不是必须选择允许或拒绝。
点击允许后:
getDisplayMedia
这个方法会提示用户去选择和授权捕获展示的内容或部分内容(如一个窗口),录制电脑屏幕时其中的一个方法,调用方法成功后可以将这个流赋给 video 元素实现边录边看。
1 | navigator.mediaDevices.getDisplayMedia({ video: true }).then( |
基于用户隐私安全考虑,会弹出一个选择框让你授权,然后根据自己选择需要共享哪一部分的内容。如可以共享当前屏幕,也可以共享其他的应用窗口和浏览器的其他标签页。
MediaRecord API
MediaRecorder 是 MediaStream Recording API 提供的用来进行媒体轻松录制的接口, 他需要通过调用 MediaRecorder() 构造方法进行实例化,它赋予了 web 页面独立录制音视频的能力。
- 摄像:getUserMedia(获取流) + MediaRecorder(存储)
- 录屏:getDisplayMedia(获取流) + MediaRecorder(存储)
这个 API 本身不复杂,看个例子就能理解了:
1 | <video id="video" width="500px" height="400px" autoplay controls></video> |
1 | const video = document.getElementById('video') |
此时你就可以录制你电脑的屏幕并把它下载下来
关于录屏一些调研
首先录制的视频流生成的格式,webm 支持度比较多。Chrome 浏览器使用 MediaRecord API 在最新版本也仍都不支持 mp4 格式,即是录屏生成的格式不支持 mp4,即使你改成 .mp4
,播放器可以播放,但还是有问题,比如用火狐浏览器就无法播放那个 mp4 视频。