MediaRecorder:start() 方法

start() 方法是 MediaRecorder 接口的方法,用于开始将媒体录制到一个或多个 Blob 对象中。

您可以将媒体的整个时长录制到单个 Blob 中(或直到您调用 requestData()),或者您可以指定每次录制的时间(毫秒)。然后,每次录制完指定时间量的媒体后,就会触发一个事件,让您对录制的媒体进行操作,同时创建一个新的 Blob 来录制媒体的下一部分。

假设 MediaRecorderstateinactivestart() 会将 state 设置为 recording,然后开始从输入流捕获媒体。创建一个 Blob,并将数据收集到其中,直到时间切片周期结束或源媒体结束。每次 Blob 填充到该点(时间切片持续时间或媒体结束,如果未提供切片持续时间),都会向 MediaRecorder 发送一个 dataavailable 事件,其中包含录制的数据。如果源仍在播放,则会创建一个新的 Blob,并继续录制到其中,依此类推。

当源流结束时,state 将设置为 inactive,并且数据收集停止。向 MediaRecorder 发送最终的 dataavailable 事件,然后发送 stop 事件。

注意:如果浏览器无法开始或继续录制,则会触发 error 事件,然后触发包含已收集 Blobdataavailable 事件,最后触发 stop 事件。

语法

js
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 时同时指定了 videoKeyFrameIntervalDurationvideoKeyFrameIntervalCount 参数。
SecurityError DOMException

如果 MediaStream 配置为不允许录制,则抛出此异常。例如,当使用 getUserMedia() 获取源时,如果用户拒绝使用输入设备的权限,则可能会出现这种情况。如果源媒体的安全选项在录制开始后发生更改,则此异常也可能作为 error 事件传递。

示例

js
record.onclick = () => {
  mediaRecorder.start();
  console.log("recorder started");
};

规范

规范
MediaStream Recording
# dom-mediarecorder-start

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。

另请参阅