説明
chrome.tabCapture
API を使用してタブのメディア ストリームを操作します。
権限
tabCapture
コンセプトと使用方法
chrome.tabCapture API を使用すると、現在のタブの動画と音声を含む MediaStream
にアクセスできます。この関数は、ユーザーが拡張機能のアクション ボタンをクリックするなどして拡張機能を呼び出した後にのみ呼び出すことができます。これは "activeTab"
権限の動作と似ています。
システムの音声を保持する
タブの MediaStream
が取得されると、そのタブの音声はユーザーに再生されなくなります。これは、suppressLocalAudioPlayback
フラグが true に設定されている場合の getDisplayMedia()
関数の動作に似ています。
ユーザーに音声を再生し続けるには、次のものを使用します。
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
が指定されている場合、ID は、同じセキュリティ オリジンを持つ指定されたタブの任意のフレームのgetUserMedia()
呼び出しで使用できます。- これが指定されていない場合、Chrome 116 以降では、呼び出し元と同じレンダリング プロセスで同じセキュリティ オリジンを持つ任意のフレームで ID を使用できます。つまり、サービス ワーカーで取得したストリーム ID をオフスクリーン ドキュメントで使用できます。
Chrome 116 より前では、consumerTabId
が指定されていない場合、ストリーム ID は呼び出し元のセキュリティ オリジン、レンダリング プロセス、レンダリング フレームの両方に制限されていました。
その他の情報
chrome.tabCapture
API の使用方法について詳しくは、音声録音と画面キャプチャをご覧ください。ここでは、tabCapture
と関連する API を使用して、一般的なユースケースを解決する方法を示します。
型
CaptureInfo
プロパティ
- 全画面表示
ブール値
キャプチャされるタブ内の要素が全画面モードであるかどうか。
- ステータス
タブの新しいキャプチャ ステータス。
- tabId
数値
ステータスが変更されたタブの ID。
CaptureOptions
プロパティ
- オーディオ
ブール値(省略可)
- audioConstraints
- 動画
ブール値(省略可)
- videoConstraints
GetMediaStreamOptions
プロパティ
- consumerTabId
number 省略可
後で
getUserMedia()
を呼び出してストリームを消費するタブの省略可能なタブ ID。指定しない場合、結果のストリームは呼び出し元の拡張機能でのみ使用できます。このストリームは、指定されたタブのフレームのうち、セキュリティ オリジンがコンシューマー タブのオリジンと一致するもののみが使用できます。タブのオリジンは安全なオリジン(HTTPS など)である必要があります。 - targetTabId
number 省略可
キャプチャするタブのタブ ID(省略可)。指定しない場合、現在アクティブなタブが選択されます。拡張機能に
activeTab
権限が付与されているタブのみをターゲット タブとして使用できます。
MediaStreamConstraint
プロパティ
- 必須
オブジェクト
- オプション
オブジェクト 省略可
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[]>
キャプチャをリクエストしたタブまたはキャプチャ中のタブのリストを返します。つまり、ステータスが stopped でもなく 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
- 情報
-