說明
使用 chrome.tabCapture
API 與分頁媒體串流互動。
權限
tabCapture
概念與用途
您可以使用 chrome.tabCapture API 存取包含目前分頁影片和音訊的 MediaStream
。只有在使用者叫用擴充功能後 (例如點選擴充功能的動作按鈕),才能呼叫這個函式。這與 "activeTab"
權限的行為類似。
保留系統音訊
取得分頁的 MediaStream
後,系統就不會再向使用者播放該分頁的音訊。這與 getDisplayMedia()
函式在 suppressLocalAudioPlayback
標記設為 true 時的行為類似。
如要繼續向使用者播放音訊,請使用下列項目:
const output = new AudioContext(); const source = output.createMediaStreamSource(stream); source.connect(output.destination);
這項操作會建立新的 AudioContext
,並將分頁的 MediaStream
音訊連線至預設目的地。
串流 ID
呼叫 chrome.tabCapture.getMediaStreamId()
會傳回串流 ID。如要稍後從 ID 存取 MediaStream
,請使用下列項目:
navigator.mediaDevices.getUserMedia({ audio: { mandatory: { chromeMediaSource: "tab", chromeMediaSourceId: id, }, }, video: { mandatory: { chromeMediaSource: "tab", chromeMediaSourceId: id, }, }, });
使用限制
呼叫 getMediaStreamId()
後,傳回的串流 ID 使用地點會受到限制:
- 如果指定
consumerTabId
,則在具有相同安全來源的指定分頁中,任何影格的getUserMedia()
呼叫都可以使用該 ID。 - 如果未指定,從 Chrome 116 開始,ID 可用於與呼叫端位於相同算繪程序中,且具有相同安全來源的任何框架。也就是說,在 Service Worker 中取得的串流 ID 可用於螢幕外文件。
在 Chrome 116 之前,如果未指定 consumerTabId
,串流 ID 會同時受限於呼叫端的安全來源、轉譯程序和轉譯框架。
瞭解詳情
如要進一步瞭解如何使用 chrome.tabCapture
API,請參閱「錄製音訊和擷取螢幕畫面」。本文將示範如何使用 tabCapture
和相關 API 解決多個常見用途。
類型
CaptureInfo
屬性
- 全螢幕
布林值
擷取分頁中的元素是否處於全螢幕模式。
-
分頁的新擷取狀態。
- tabId
數字
狀態變更的分頁 ID。
CaptureOptions
屬性
- 音訊
布林值 選填
- audioConstraints
MediaStreamConstraint optional
- 影片
布林值 選填
- videoConstraints
MediaStreamConstraint optional
GetMediaStreamOptions
屬性
- consumerTabId
號碼 選填
選用分頁 ID,該分頁稍後會叫用
getUserMedia()
來消耗串流。如未指定,則只有呼叫擴充功能可以使用產生的串流。只有在指定分頁中的影格,且安全來源與取用者分頁的來源相符時,才能使用串流。分頁的來源必須是安全來源,例如 HTTPS。 - targetTabId
號碼 選填
要擷取內容的分頁 ID (選用)。如未指定,系統會選取目前啟用的分頁。只有擴充功能已取得
activeTab
權限的分頁,才能做為目標分頁。
MediaStreamConstraint
屬性
- 必填
物件
- 選用
object 選填
TabCaptureState
列舉
「pending」
「active」
「stopped」
「error」
方法
capture()
chrome.tabCapture.capture(
options: CaptureOptions,
callback: function,
): void
擷取目前使用中分頁的顯示區域。擴充功能叫用後,只能在目前有效的分頁上啟動擷取作業,與 activeTab 的運作方式類似。在分頁中瀏覽網頁時,系統會持續擷取畫面,直到分頁關閉或擴充功能關閉媒體串流為止。
參數
-
設定傳回的媒體串流。
- callback
函式
callback
參數如下:(stream: LocalMediaStream) => void
- 串流
LocalMediaStream
-
getCapturedTabs()
chrome.tabCapture.getCapturedTabs(): Promise<CaptureInfo[]>
傳回已要求擷取或正在擷取的索引標籤清單,也就是 status != stopped 和 status != error。擴充功能可藉此通知使用者,現有索引標籤擷取作業會導致新的索引標籤擷取作業失敗 (或避免對相同索引標籤提出多餘要求)。
傳回
-
Promise<CaptureInfo[]>
Chrome 116 以上版本
getMediaStreamId()
chrome.tabCapture.getMediaStreamId(
options?: GetMediaStreamOptions,
): Promise<string>
建立串流 ID,擷取目標分頁。與 chrome.tabCapture.capture() 方法類似,但會向取用者分頁傳回媒體串流 ID,而非媒體串流。
參數
- 選項
傳回
-
Promise<string>
Chrome 116 以上版本
事件
onStatusChanged
chrome.tabCapture.onStatusChanged.addListener(
callback: function,
)
當分頁的擷取狀態變更時,就會觸發這個事件。擴充功能作者可藉此追蹤分頁的擷取狀態,確保網頁動作等 UI 元素保持同步。
參數
- callback
函式
callback
參數如下:(info: CaptureInfo) => void
- 資訊
-