Descripción
Usa la API de chrome.tabCapture
para interactuar con las transmisiones de medios de pestañas.
Permisos
tabCapture
Conceptos y uso
La API de chrome.tabCapture te permite acceder a un objeto MediaStream
que contiene el video y el audio de la pestaña actual. Solo se puede llamar después de que el usuario invoca una extensión, por ejemplo, haciendo clic en el botón de acción de la extensión. Esto es similar al comportamiento del permiso "activeTab"
.
Cómo conservar el audio del sistema
Cuando se obtiene un MediaStream
para una pestaña, ya no se reproducirá audio en esa pestaña para el usuario. Esto es similar al comportamiento de la función getDisplayMedia()
cuando la marca suppressLocalAudioPlayback
se establece en verdadero.
Para seguir reproduciendo audio para el usuario, usa lo siguiente:
const output = new AudioContext(); const source = output.createMediaStreamSource(stream); source.connect(output.destination);
Esto crea un nuevo AudioContext
y conecta el audio del MediaStream
de la pestaña al destino predeterminado.
IDs de transmisión
Si llamas a chrome.tabCapture.getMediaStreamId()
, se mostrará un ID de transmisión. Para acceder más tarde a un MediaStream
desde el ID, usa lo siguiente:
navigator.mediaDevices.getUserMedia({ audio: { mandatory: { chromeMediaSource: "tab", chromeMediaSourceId: id, }, }, video: { mandatory: { chromeMediaSource: "tab", chromeMediaSourceId: id, }, }, });
Restricciones de uso
Después de llamar a getMediaStreamId()
, existen restricciones sobre dónde se puede usar el ID de transmisión devuelto:
- Si se especifica
consumerTabId
, una llamada agetUserMedia()
puede usar el ID en cualquier frame de la pestaña determinada que tenga el mismo origen de seguridad. - Cuando no se especifica, a partir de Chrome 116, el ID se puede usar en cualquier frame con el mismo origen de seguridad en el mismo proceso de renderización que el llamador. Esto significa que un ID de transmisión obtenido en un trabajador de servicio se puede usar en un documento fuera de pantalla.
Antes de Chrome 116, cuando no se especificaba un consumerTabId
, el ID de transmisión se restringía al origen de seguridad, al proceso de renderización y al marco de renderización del llamador.
Más información
Para obtener más información sobre cómo usar la API de chrome.tabCapture
, consulta Grabación de audio y captura de pantalla. En este ejemplo, se muestra cómo usar tabCapture
y las APIs relacionadas para resolver varios casos de uso comunes.
Tipos
CaptureInfo
Propiedades
- pantalla completa
booleano
Indica si un elemento de la pestaña que se captura está en modo de pantalla completa.
- estado
Es el nuevo estado de captura de la pestaña.
- tabId
número
Es el ID de la pestaña cuyo estado cambió.
CaptureOptions
Propiedades
- audio
booleano opcional
- audioConstraints
MediaStreamConstraint opcional
- video
booleano opcional
- videoConstraints
MediaStreamConstraint opcional
GetMediaStreamOptions
Propiedades
- consumerTabId
número opcional
Es el ID opcional de la pestaña que invocará
getUserMedia()
más adelante para consumir la transmisión. Si no se especifica, la extensión que llama puede usar la transmisión resultante. El flujo solo puede usarse en los marcos de la pestaña determinada cuya fuente de seguridad coincida con la fuente de la pestaña del consumidor. El origen de la pestaña debe ser seguro, p.ej., HTTPS. - targetTabId
número opcional
Es el ID opcional de la pestaña que se capturará. Si no se especifica, se seleccionará la pestaña activa actual. Solo se pueden usar como pestaña de destino las pestañas para las que se otorgó el permiso
activeTab
a la extensión.
MediaStreamConstraint
Propiedades
- obligatorio
objeto
- opcional
objeto opcional
TabCaptureState
Enum
"pending"
"active"
"stopped"
"error"
Métodos
capture()
chrome.tabCapture.capture(
options: CaptureOptions,
callback: function,
): void
Captura el área visible de la pestaña activa actualmente. La captura solo se puede iniciar en la pestaña activa actual después de que se invoca la extensión, de manera similar a como funciona activeTab. La captura se mantiene en las navegaciones de página dentro de la pestaña y se detiene cuando se cierra la pestaña o la extensión cierra la transmisión de medios.
Parámetros
- opciones
Configura el flujo de medios que se devuelve.
- callback
función
El parámetro
callback
se ve de la siguiente manera:(stream: LocalMediaStream) => void
- transmisión
LocalMediaStream
-
getCapturedTabs()
chrome.tabCapture.getCapturedTabs(): Promise<CaptureInfo[]>
Devuelve una lista de las pestañas que solicitaron la captura o que se están capturando, es decir, status != stopped y status != error. Esto permite que las extensiones informen al usuario que hay una captura de pestaña existente que impediría que se realice una nueva (o para evitar solicitudes redundantes de la misma pestaña).
Muestra
-
Promise<CaptureInfo[]>
Chrome 116 y versiones posteriores
getMediaStreamId()
chrome.tabCapture.getMediaStreamId(
options?: GetMediaStreamOptions,
): Promise<string>
Crea un ID de transmisión para capturar la pestaña de destino. Es similar al método chrome.tabCapture.capture(), pero devuelve un ID de transmisión de medios, en lugar de una transmisión de medios, a la pestaña del consumidor.
Parámetros
- opciones
GetMediaStreamOptions opcional
Muestra
-
Promise<string>
Chrome 116 y versiones posteriores
Eventos
onStatusChanged
chrome.tabCapture.onStatusChanged.addListener(
callback: function,
)
Evento que se activa cuando cambia el estado de captura de una pestaña. Esto permite que los autores de extensiones realicen un seguimiento del estado de captura de las pestañas para mantener sincronizados los elementos de la IU, como las acciones de página.
Parámetros
- callback
función
El parámetro
callback
se ve de la siguiente manera:(info: CaptureInfo) => void
- información
-