本篇雖未涉及 WebRTC API 的應用,但 WebRTC 實作上常會搭配影音錄製與下載功能,因此將此篇文章歸類為系列文之一
錄製影音串流
MediaStream Recording API MediaRecorder(stream)
可用於在瀏覽器中捕捉媒體串流並將其錄製為影音檔,通常會搭配 MediaDevices API getUserMedia()
Promise 函式取得媒體串流
|
呼叫 MediaRecorder.start()
時,如果沒有傳入參數,會在停止錄製時才回傳一個 Blob 檔,如果希望能拆分 chuck 檔案,可以在 start(timeslice)
代入時間參數:
|
MediaRecorder API 相關方法和事件:
MediaRecorder.start()
開始錄製媒體MediaRecorder.stop()
停止錄製媒體MediaRecorder.pause()
暫停錄製媒體MediaRecorder.resume()
重新開始錄製媒體MediaRecorder.ondataavailable
錄製期間產生新的媒體資料(Blob 檔)時觸發MediaRecorder.onstop
媒體錄製完成並停止時觸發
下載影音串流
搭配 ondataavailable
以及 onstop
進行監聽
前面提到的
MediaRecorder.start(timeslice)
方法傳入的時間參數,會影響ondataavailable
觸發時機,假設 timeslice = 1000,每秒鐘會觸發一次ondataavailable
,並回傳這段時間(每秒)錄製的內容,若沒有傳入參數,會在停止錄製時才觸發,並回傳期間錄製的所有內容
步驟拆解:
- 透過
ondataavailable
取得錄製的 Blob chuck,並儲存變數內 - 透過
onstop
監聽錄製停止 - 執行檔案下載
|
URL.createObjectURL()
用來將 File 或是 Blob 物件轉成一個 url,利用這個 url 來處理檔案下載,下載完畢後再使用 URL.revokeObjectURL()
釋放 url
錄製與下載完整範例
參考資源:
https://developer.mozilla.org/en-US/docs/Web/API/MediaStream_Recording_API
https://medium.com/@kf99916/html5-神奇的-object-url-不用後端-前端便能產生獲取指定物件的網址-6df283d58505
評論