Описание
Используйте 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 не был указан, идентификатор потока ограничивался источником безопасности, процессом рендеринга и кадром рендеринга вызывающей стороны.
Узнать больше
Чтобы узнать больше об использовании API chrome.tabCapture , см. раздел «Запись звука и захват экрана ». В нем показано, как использовать tabCapture и связанные с ним API для решения ряда распространенных задач.
Типы
CaptureInfo
Характеристики
- полноэкранный
логический
Указывает, находится ли элемент во вкладке, данные с которой захватываются, в полноэкранном режиме.
- статус
Новый статус захвата вкладки.
- tabId
число
Идентификатор вкладки, статус которой изменился.
CaptureOptions
Характеристики
- аудио
логический необязательный
- аудиоограничения
MediaStreamConstraint необязательный
- видео
логический необязательный
- видеоограничения
MediaStreamConstraint необязательный
GetMediaStreamOptions
Характеристики
- consumerTabId
число необязательно
Необязательный идентификатор вкладки, которая впоследствии вызовет
getUserMedia()для обработки потока. Если не указан, результирующий поток может использоваться только вызывающим расширением. Поток может использоваться только фреймами в данной вкладке, чей источник безопасности совпадает с источником вкладки-потребителя. Источник вкладки должен быть защищенным, например, HTTPS. - targetTabId
число необязательно
Необязательный идентификатор вкладки, которая будет захвачена. Если не указан, будет выбрана текущая активная вкладка. В качестве целевой вкладки могут использоваться только те вкладки, для которых расширению предоставлено разрешение
activeTab.
MediaStreamConstraint
Характеристики
- обязательный
объект
- необязательный
объект необязательный
TabCaptureState
Перечисление
"в ожидании" "активный" "остановился" "ошибка"
Методы
capture()
chrome.tabCapture.capture(
options: CaptureOptions,
callback: function,
): void
Захватывает видимую область текущей активной вкладки. Захват может быть начат только на текущей активной вкладке после вызова расширения, аналогично тому, как работает activeTab . Захват сохраняется при переходе между страницами внутри вкладки и прекращается при закрытии вкладки или при закрытии медиапотока расширением.
Параметры
- параметры
Настраивает возвращаемый медиапоток.
- перезвонить
функция
Параметр
callbackвыглядит следующим образом:(stream: LocalMediaStream) => void
- транслировать
LocalMediaStream
getCapturedTabs()
chrome.tabCapture.getCapturedTabs(): Promise<CaptureInfo[]>
Возвращает список вкладок, для которых был запрошен захват или которые находятся в процессе захвата, то есть статус != "остановлено" и статус != "ошибка". Это позволяет расширениям информировать пользователя о том, что уже существует захват вкладки, который помешает успешному захвату новой вкладки (или предотвратить повторные запросы для одной и той же вкладки).
Возвраты
Promise< CaptureInfo []>
Chrome 116+Возвращает Promise, который разрешается с массивом CaptureInfo[] для захваченных вкладок.
getMediaStreamId()
chrome.tabCapture.getMediaStreamId(
options?: GetMediaStreamOptions,
): Promise<string>
Создает идентификатор потока для захвата целевой вкладки. Аналогичен методу chrome.tabCapture.capture(), но возвращает идентификатор медиапотока, а не сам медиапоток, для вкладки-потребителя.
Параметры
- параметры
GetMediaStreamOptions ( необязательный параметр)
Возвраты
Promise<string>
Chrome 116+Возвращает Promise, который разрешается с результатом. В случае успеха результатом является непрозрачная строка, которую можно передать в API
getUserMedia()для генерации медиапотока, соответствующего целевой вкладке. СозданныйstreamIdможно использовать только один раз, и он истекает через несколько секунд, если не используется.
События
onStatusChanged
chrome.tabCapture.onStatusChanged.addListener(
callback: function,
)
Событие срабатывает при изменении статуса захвата вкладки. Это позволяет разработчикам расширений отслеживать статус захвата вкладок для синхронизации элементов пользовательского интерфейса, таких как действия на страницах.
Параметры
- перезвонить
функция
Параметр
callbackвыглядит следующим образом:(info: CaptureInfo) => void
- информация