es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo reproducir un flujo de audio en una pestaña en la extensión de Chrome en el manifiesto v3?

Para capturar el flujo de audio de una pestaña en el manifiesto v2, se podía utilizar la API chrome.tabCapture.capture en el script de fondo para obtener el flujo. Sin embargo, en el manifiesto v3, tabCapture se ha movido al primer plano y no está disponible en el script de fondo, ni en los scripts de contenido.

Después de probar algunas cosas, finalmente logré que tabCapture funcionara en el script emergente. Sin embargo, en mi caso de uso, el script emergente no puede permanecer abierto mucho tiempo para capturar el flujo. En su lugar, encontré el método getMediaStreamId de tabCapture que me proporciona un ID de flujo. Así que se me ocurrió esto:

chrome.tabs.query({
active: true,
currentWindow: true
}, (tabs) => {
var tab = tabs[0];
chrome.tabCapture.getMediaStreamId({consumerTabId: tab.id}, (streamId) => {
chrome.tabs.sendMessage(tab.id, { action: 'streamId', streamId: streamId });
});
});

En el script anterior, que se encuentra en el archivo popup.js, después de obtener el ID de flujo, lo envío al script de contenido. Y estoy atascado aquí en cómo crear un flujo a partir de este ID de flujo para que se pueda capturar/grabar el flujo. La documentación menciona el uso de getUserMedia(), pero no he tenido suerte allí. Esto es lo que pude encontrar con un poco de ayuda de otras preguntas en SO (pero no funciona, obtengo este error DOMException: Error starting tab capture):

navigator.mediaDevices.getUserMedia({
audio: {
mandatory: {
chromeMediaSource: 'tab',
chromeMediaSourceId: streamId
}
}
})

¿Cómo puedo hacer que tabCapture funcione en el manifiesto v3? Eso es lo que estoy tratando de averiguar.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La API tabCapture se ha trasladado al primer plano en la versión 3 del manifiesto de la extensión de Chrome y ya no está disponible en los scripts de fondo ni en los scripts de contenido. Para capturar el flujo de audio de salida de una pestaña, puedes utilizar el método getMediaStreamId de tabCapture en un script emergente para obtener el streamId, el cual luego puede ser enviado al script de contenido para grabar o capturar. Sin embargo, crear un stream a partir del streamId utilizando getUserMedia() ha presentado problemas, lo que resulta en un DOMException: Error starting tab capture (Excepción del DOM: Error al iniciar la captura de pestañas). Se necesita más investigación para encontrar una solución que haga que tabCapture funcione en el manifiesto v3.

Comments are closed.