MediaRecorder:start() 方法
start()
方法是 MediaRecorder
接口的方法,用于开始将媒体录制到一个或多个 Blob
对象中。
您可以将媒体的整个时长录制到单个 Blob
中(或直到您调用 requestData()
),或者您可以指定每次录制的时间(毫秒)。然后,每次录制完指定时间量的媒体后,就会触发一个事件,让您对录制的媒体进行操作,同时创建一个新的 Blob
来录制媒体的下一部分。
假设 MediaRecorder
的 state
为 inactive
,start()
会将 state
设置为 recording
,然后开始从输入流捕获媒体。创建一个 Blob
,并将数据收集到其中,直到时间切片周期结束或源媒体结束。每次 Blob
填充到该点(时间切片持续时间或媒体结束,如果未提供切片持续时间),都会向 MediaRecorder
发送一个 dataavailable
事件,其中包含录制的数据。如果源仍在播放,则会创建一个新的 Blob
,并继续录制到其中,依此类推。
当源流结束时,state
将设置为 inactive
,并且数据收集停止。向 MediaRecorder
发送最终的 dataavailable
事件,然后发送 stop
事件。
注意:如果浏览器无法开始或继续录制,则会触发 error
事件,然后触发包含已收集 Blob
的 dataavailable
事件,最后触发 stop
事件。
语法
start()
start(timeslice)
参数
timeslice
可选-
录制到每个
Blob
中的毫秒数。如果未包含此参数,则整个媒体时长将录制到单个Blob
中,除非调用requestData()
方法来获取Blob
并触发创建新的Blob
,媒体将继续录制到其中。注意:与 Web API 中的其他时间值一样,
timeslice
不是精确的,由于其他挂起的任务,实际间隔可能会略长,这些任务在创建下一个 Blob 之前。
返回值
无 (undefined
)。
异常
可以立即检测到的错误将作为 DOM 异常抛出。所有其他错误都将通过发送到 MediaRecorder
对象的 error
事件报告。您可以实现 onerror
事件处理程序以响应这些错误。
InvalidStateError
DOMException
-
如果
MediaRecorder
不处于inactive
状态,则抛出此异常;如果媒体正在录制,则无法开始录制。请参阅state
属性。 NotSupportedError
DOMException
-
如果以下情况发生,则抛出此异常:
- 您尝试录制的媒体流处于非活动状态。
- 流的一个或多个轨道格式无法使用当前配置录制。
- 在创建
MediaRecorder
时同时指定了videoKeyFrameIntervalDuration
和videoKeyFrameIntervalCount
参数。
SecurityError
DOMException
-
如果
MediaStream
配置为不允许录制,则抛出此异常。例如,当使用getUserMedia()
获取源时,如果用户拒绝使用输入设备的权限,则可能会出现这种情况。如果源媒体的安全选项在录制开始后发生更改,则此异常也可能作为error
事件传递。
示例
record.onclick = () => {
mediaRecorder.start();
console.log("recorder started");
};
规范
规范 |
---|
MediaStream Recording # dom-mediarecorder-start |
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。
另请参阅
- 使用 MediaStream Recording API
- Web 录音机:MediaRecorder + getUserMedia + Web Audio API 可视化演示,由 Chris Mills 提供(GitHub 上的源代码)。
- simpl.info MediaStream Recording 演示,由 Sam Dutton 提供。
getUserMedia()