説明
chrome.tabCapture API を使用して、タブのメディア ストリームを操作します。
権限
tabCaptureコンセプトと使用方法
browser.tabCapture API を使用すると、現在のタブの動画と音声を含む MediaStream にアクセスできます。これは、ユーザーが拡張機能の操作ボタンをクリックするなどして拡張機能を呼び出した後にのみ呼び出すことができます。これは、"activeTab" 権限の動作に似ています。
システム音声を保持する
タブの MediaStream が取得されると、そのタブの音声はユーザーに再生されなくなります。これは、suppressLocalAudioPlayback フラグが true に設定されている場合の getDisplayMedia() 関数の動作に似ています。
ユーザーに音声を再生し続けるには、以下を使用します。
const output = new AudioContext();
const source = output.createMediaStreamSource(stream);
source.connect(output.destination);
これにより、新しい AudioContext が作成され、タブの MediaStream の音声がデフォルトの宛先に接続されます。
ストリーム ID
browser.tabCapture.getMediaStreamId() を呼び出すと、ストリーム ID が返されます。後で ID から MediaStream にアクセスするには、次のようにします。
navigator.mediaDevices.getUserMedia({
audio: {
mandatory: {
chromeMediaSource: "tab",
chromeMediaSourceId: id,
},
},
video: {
mandatory: {
chromeMediaSource: "tab",
chromeMediaSourceId: id,
},
},
});
使用制限
getMediaStreamId() を呼び出した後、返されたストリーム ID を使用できる場所には制限があります。
consumerTabIdが指定されている場合、この ID は、同じセキュリティ オリジンを持つ指定されたタブの任意のフレームでgetUserMedia()呼び出しによって使用できます。- このパラメータが指定されていない場合、Chrome 116 以降では、呼び出し元と同じレンダリング プロセスで同じセキュリティ オリジンを持つ任意のフレームで ID を使用できます。つまり、サービス ワーカーで取得したストリーム ID をオフスクリーン ドキュメントで使用できます。
Chrome 116 より前では、consumerTabId が指定されていない場合、ストリーム ID は呼び出し元のセキュリティ オリジン、レンダリング プロセス、レンダリング フレームの両方に制限されていました。
詳細
browser.tabCapture API の使用方法について詳しくは、音声録音と画面キャプチャをご覧ください。このドキュメントでは、tabCapture と関連 API を使用して、一般的なユースケースを解決する方法について説明します。
型
CaptureInfo
プロパティ
-
全画面表示
ブール値
キャプチャされているタブ内の要素が全画面表示モードかどうか。
-
ステータス
タブの新しいキャプチャ ステータス。
-
tabId
数値
ステータスが変更されたタブの ID。
CaptureOptions
プロパティ
-
オーディオ
boolean 省略可
-
audioConstraints
-
動画
boolean 省略可
-
videoConstraints
GetMediaStreamOptions
プロパティ
-
consumerTabId
number 省略可
後で
getUserMedia()を呼び出してストリームを使用するタブのタブ ID(省略可)。指定しない場合、結果のストリームは呼び出し元の拡張機能でのみ使用できます。このストリームは、セキュリティ オリジンがコンシューマー タブのオリジンと一致する、指定されたタブ内のフレームでのみ使用できます。タブのオリジンは、HTTPS などの安全なオリジンである必要があります。 -
targetTabId
number 省略可
キャプチャされるタブのタブ ID(省略可)。指定しない場合、現在アクティブなタブが選択されます。ターゲット タブとして使用できるのは、拡張機能に
activeTab権限が付与されているタブのみです。
MediaStreamConstraint
プロパティ
-
必須
オブジェクト
-
省略可
オブジェクト(省略可)
TabCaptureState
列挙型
"pending"
「有効」
"stopped"
"error"
メソッド
capture()
browser.tabCapture.capture(
options: CaptureOptions,
callback: function,
): void
現在アクティブなタブの表示領域をキャプチャします。キャプチャは、拡張機能が呼び出された後に、現在アクティブなタブでのみ開始できます。これは、activeTab の動作と同様です。キャプチャは、タブ内のページ ナビゲーション全体で維持され、タブが閉じられるか、拡張機能によってメディア ストリームが閉じられると停止します。
パラメータ
-
オプション
返されるメディア ストリームを構成します。
-
callback
関数
callbackパラメータは次のようになります。(stream: LocalMediaStream) => void
-
ストリーム
LocalMediaStream
-
getCapturedTabs()
browser.tabCapture.getCapturedTabs(): Promise<CaptureInfo[]>
キャプチャをリクエストしたタブ、またはキャプチャ中のタブ(status != stopped かつ status != error)のリストを返します。これにより、拡張機能は、既存のタブ キャプチャがあるために新しいタブ キャプチャが成功しないことをユーザーに通知できます(または、同じタブに対する重複したリクエストを防止できます)。
戻り値
-
<CaptureInfo[]> を約束
Chrome 116 以降 Chrome 148 以降の browser.*キャプチャされたタブの CaptureInfo[] で解決される Promise を返します。
getMediaStreamId()
browser.tabCapture.getMediaStreamId(
options?: GetMediaStreamOptions,
): Promise<string>
ターゲット タブをキャプチャするストリーム ID を作成します。chrome.tabCapture.capture() メソッドに似ていますが、メディア ストリームではなく、メディア ストリーム ID をコンシューマ タブに返します。
パラメータ
-
オプション
戻り値
-
Promise<string>
Chrome 116 以降 Chrome 148 以降の browser.*結果で解決される Promise を返します。成功すると、結果は不透明な文字列になります。この文字列を
getUserMedia()API に渡すと、ターゲット タブに対応するメディア ストリームを生成できます。作成されたstreamIdは 1 回しか使用できず、使用しない場合は数秒後に期限切れになります。
イベント
onStatusChanged
browser.tabCapture.onStatusChanged.addListener(
callback: function,
)
タブのキャプチャ ステータスが変更されたときに発生するイベント。これにより、拡張機能の作成者はタブのキャプチャ ステータスを追跡して、ページ アクションなどの UI 要素を同期できます。
パラメータ
-
callback
関数
callbackパラメータは次のようになります。(info: CaptureInfo) => void
-
情報
-