MediaRecorder: start() 方法

Baseline 已廣泛支援

此特性已得到良好支援,可在多種裝置和瀏覽器版本上使用。自 2021 年 4 月起,所有瀏覽器均已支援此特性。

MediaRecorder 介面的 start() 方法開始將媒體錄製到一個或多個 Blob 物件中。

您可以將媒體的整個持續時間錄製到一個單獨的 Blob 中(或者直到呼叫 requestData()),也可以指定每次錄製的毫秒數。然後,每當錄製完指定時長的媒體後,都會觸發一個事件,讓您對已錄製的媒體進行操作,同時會建立一個新的 Blob 來錄製下一段媒體。

假設 MediaRecorderstateinactivestart() 會將 state 設定為 recording,然後開始從輸入流捕獲媒體。此時會建立一個 Blob,並將資料收集到其中,直到時間切片週期結束或源媒體結束。每次 Blob 填滿到該點(timeslice 持續時間或在未提供 slice duration 時到媒體結束),一個 dataavailable 事件會攜帶錄製的資料傳送到 MediaRecorder。如果源仍在播放,則會建立一個新的 Blob 並繼續錄製到其中,依此類推。

當源流結束時,state 被設定為 inactive,資料收集停止。一個最終的 dataavailable 事件會被髮送到 MediaRecorder,之後會發送一個 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

瀏覽器相容性

另見