Описание
Используйте API chrome.tabCapture для взаимодействия с медиапотоками вкладок.
Разрешения
tabCaptureОбзор
API chrome.tabCapture позволяет получить доступ к MediaStream, содержащему видео и аудио текущей вкладки. Вызов возможен только после того, как пользователь активирует расширение, например, нажав кнопку действия расширения. Это аналогично поведению разрешения activeTab .
Сохранение системного звука
Когда для вкладки получен MediaStream , воспроизведение звука в этой вкладке для пользователя прекращается. Это аналогично поведению функции getDisplayMedia() , когда флаг suppressLocalAudioPlayback установлен в значение true.
Для продолжения воспроизведения звука пользователю используйте следующее:
const output = new AudioContext();
const source = output.createMediaStreamSource(stream);
source.connect(output.destination);
Это создает новый AudioContext и подключает MediaStream вкладки к месту назначения по умолчанию.
Идентификаторы потоков
Вызов метода chrome.tabCapture.getMediaStreamId вернет идентификатор потока. Для последующего доступа к MediaStream по этому идентификатору используйте следующий код:
navigator.mediaDevices.getUserMedia({
audio: {
mandatory: {
chromeMediaSource: "tab",
chromeMediaSourceId: id,
},
},
video: {
mandatory: {
chromeMediaSource: "tab",
chromeMediaSourceId: id,
},
},
});
Ограничения на использование
После вызова функции getMediaStreamId() существуют ограничения на то, где можно использовать возвращаемый идентификатор потока:
- Если указан параметр
consumerTabId, этот идентификатор может быть использован в вызовеgetUserMedia()в любом фрейме на данной вкладке, имеющем тот же источник безопасности. - Если это не указано, начиная с Chrome 116, идентификатор может использоваться в любом фрейме с тем же источником безопасности в том же процессе рендеринга, что и вызывающий объект. Это означает, что идентификатор потока, полученный в сервис-воркере, может использоваться в документе, находящемся вне экрана .
До версии Chrome 116, если consumerTabId не был указан, идентификатор потока ограничивался источником безопасности, процессом рендеринга и кадром рендеринга вызывающей стороны.
Узнать больше
To learn more about how to use the chrome.tabCapture API, see Audio recording and screen capture . This demonstrates how to use tabCapture and related APIs to solve a number of common use cases.
Типы
CaptureInfo
Характеристики
- полноэкранный
логический
Указывает, находится ли элемент во вкладке, данные с которой захватываются, в полноэкранном режиме.
- статус
Новый статус захвата вкладки.
- tabId
число
Идентификатор вкладки, статус которой изменился.
CaptureOptions
Характеристики
- аудио
логический необязательный
- аудиоограничения
MediaStreamConstraint необязательный
- видео
логический необязательный
- видеоограничения
MediaStreamConstraint необязательный
GetMediaStreamOptions
Характеристики
- consumerTabId
число необязательно
Необязательный идентификатор вкладки, которая впоследствии вызовет
getUserMedia()для обработки потока. Если не указан, результирующий поток может использоваться только вызывающим расширением. Поток может использоваться только фреймами в данной вкладке, чей источник безопасности совпадает с источником вкладки-потребителя. Источник вкладки должен быть защищенным, например, HTTPS. - targetTabId
число необязательно
Optional tab id of the tab which will be captured. If not specified then the current active tab will be selected. Only tabs for which the extension has been granted the
activeTabpermission can be used as the target tab.
MediaStreamConstraint
Характеристики
- обязательный
объект
- необязательный
объект необязательный
TabCaptureState
Перечисление
"в ожидании" "активный" "остановился" "ошибка"
Методы
capture()
chrome.tabCapture.capture(
options: CaptureOptions,
callback: function,
): void
Захватывает видимую область текущей активной вкладки. Захват может быть начат только на текущей активной вкладке после вызова расширения, аналогично тому, как работает activeTab . Захват сохраняется при переходе между страницами внутри вкладки и прекращается при закрытии вкладки или при закрытии медиапотока расширением.
Параметры
- параметры
Настраивает возвращаемый медиапоток.
- перезвонить
функция
Параметр
callbackвыглядит следующим образом:(stream: LocalMediaStream) =& gt;void
- транслировать
LocalMediaStream
getCapturedTabs()
chrome.tabCapture.getCapturedTabs(
callback?: function,
): Promise<CaptureInfo[]>
Returns a list of tabs that have requested capture or are being captured, ie status != stopped and status != error. This allows extensions to inform the user that there is an existing tab capture that would prevent a new tab capture from succeeding (or to prevent redundant requests for the same tab).
Параметры
- перезвонить
функция необязательна
Параметр
callbackвыглядит следующим образом:(result: CaptureInfo[]) =& gt;void
- результат
CaptureInfo []
Возвраты
Promise< CaptureInfo []>
Chrome 116+Возвращает Promise, который разрешается с массивом CaptureInfo[] для захваченных вкладок.
Поддержка промисов доступна только для Manifest V3 и более поздних версий; для других платформ необходимо использовать колбэки.
getMediaStreamId()
chrome.tabCapture.getMediaStreamId(
options?: GetMediaStreamOptions,
callback?: function,
): Promise<string>
Создает идентификатор потока для захвата целевой вкладки. Аналогичен методу chrome.tabCapture.capture(), но возвращает идентификатор медиапотока, а не сам медиапоток, для вкладки-потребителя.
Параметры
- параметры
GetMediaStreamOptions ( необязательный параметр)
- перезвонить
функция необязательна
Параметр
callbackвыглядит следующим образом:(streamId: string) =& gt;void
- streamId
нить
Возвраты
Promise<string>
Chrome 116+Returns a Promise which resolves with the result. If successful, the result is an opaque string that can be passed to the
getUserMedia()API to generate a media stream that corresponds to the target tab. The createdstreamIdcan only be used once and expires after a few seconds if it is not used.Поддержка промисов доступна только для Manifest V3 и более поздних версий; для других платформ необходимо использовать колбэки.
События
onStatusChanged
chrome.tabCapture.onStatusChanged.addListener(
callback: function,
)
Событие срабатывает при изменении статуса захвата вкладки. Это позволяет разработчикам расширений отслеживать статус захвата вкладок для синхронизации элементов пользовательского интерфейса, таких как действия на страницах.
Параметры
- перезвонить
функция
Параметр
callbackвыглядит следующим образом:(info: CaptureInfo) =& gt;void
- информация