MediaRecorder: start() 方法
MediaRecorder 介面的 start() 方法開始將媒體錄製到一個或多個 Blob 物件中。
您可以將媒體的整個持續時間錄製到一個單獨的 Blob 中(或者直到呼叫 requestData()),也可以指定每次錄製的毫秒數。然後,每當錄製完指定時長的媒體後,都會觸發一個事件,讓您對已錄製的媒體進行操作,同時會建立一個新的 Blob 來錄製下一段媒體。
假設 MediaRecorder 的 state 是 inactive,start() 會將 state 設定為 recording,然後開始從輸入流捕獲媒體。此時會建立一個 Blob,並將資料收集到其中,直到時間切片週期結束或源媒體結束。每次 Blob 填滿到該點(timeslice 持續時間或在未提供 slice duration 時到媒體結束),一個 dataavailable 事件會攜帶錄製的資料傳送到 MediaRecorder。如果源仍在播放,則會建立一個新的 Blob 並繼續錄製到其中,依此類推。
當源流結束時,state 被設定為 inactive,資料收集停止。一個最終的 dataavailable 事件會被髮送到 MediaRecorder,之後會發送一個 stop 事件。
注意: 如果瀏覽器無法開始錄製或繼續錄製,它將丟擲一個 error 事件,隨後傳送一個包含已收集 Blob 的 dataavailable 事件,最後傳送 stop 事件。
語法
start()
start(timeslice)
引數
timeslice可選-
每次錄製到
Blob中的毫秒數。如果未包含此引數,則會將整個媒體時長錄製到單個Blob中,除非呼叫requestData()方法來獲取Blob並觸發建立新的Blob以繼續錄製媒體。注意: 與 Web API 中的其他時間值一樣,
timeslice並非精確值,由於建立下一個 blob 之前的其他待處理任務,實際間隔可能會稍長。
返回值
無(undefined)。
異常
可以立即檢測到的錯誤會作為 DOM 異常丟擲。所有其他錯誤都會透過傳送到 MediaRecorder 物件的 error 事件報告。您可以實現 onerror 事件處理程式來響應這些錯誤。
InvalidStateErrorDOMException-
如果
MediaRecorder不處於inactive狀態,則會丟擲此異常;如果媒體已在錄製中,則無法開始錄製。請參閱state屬性。 NotSupportedErrorDOMException-
在以下情況下丟擲
- 您嘗試錄製的媒體流不活躍。
- 流的一個或多個軌道格式無法使用當前配置進行錄製。
- 在建立
MediaRecorder時同時指定了videoKeyFrameIntervalDuration和videoKeyFrameIntervalCount引數。
SecurityErrorDOMException-
如果
MediaStream配置為不允許錄製,則會丟擲此異常。例如,使用getUserMedia()獲取的源,當用戶拒絕使用輸入裝置的許可權時,可能會出現這種情況。如果源媒體的安全選項在錄製開始後發生更改,此異常也可能作為error事件傳遞。
示例
record.onclick = () => {
mediaRecorder.start();
console.log("recorder started");
};
規範
| 規範 |
|---|
| MediaStream Recording # dom-mediarecorder-start |
瀏覽器相容性
載入中…
另見
- 使用 MediaStream Recording API
- Web Dictaphone:MediaRecorder + getUserMedia + Web Audio API 視覺化演示,由 Chris Mills 製作(GitHub 原始碼)。
- simpl.info MediaStream 錄製演示,由 Sam Dutton 製作。
getUserMedia()