14

Sto creando un'estensione chrome che cattura l'audio da una scheda utilizzando il chrome tabCapture API. Mi piacerebbe riprodurre questo flusso audio in un'altra pagina HTML nella speranza di creare eventualmente un visualizzatore per questo.Chrome Extension tabCapture API Stream audio da riprodurre in HTML Pagina

ho catturare l'audio in uno script di fondo in questo modo

chrome.browserAction.onClicked.addListener(function(activeTab) { 
    var constraints = { 
    audio: true, 
    video: false, 
    }; 

    var visualizerPage = chrome.extension.getURL("/views/visualizer.html"); 

    chrome.tabCapture.capture(constraints, function(stream) { 
    console.log("\ngot stream"); 
    console.log(stream); 

    chrome.tabs.create({ 
     url: visualizerPage 
    }, function(tab) { 

     chrome.tabs.sendMessage(tabID, { 
     "message": "stream", 
     "stream": stream 
     }); 
    }); 
    }); 

il flusso audio viene catturato da qualsiasi pagina dell'estensione è stato cliccato. Un'altra scheda viene aperta e il flusso audio viene inviato come messaggio.

Il javascript per la pagina visualizer.html è

function loadStream(stream) { 
    // what do I have to put here to play the stream? 
} 

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { 
    if (request.message === "stream") { 
    var stream = request.stream; 

    if (!stream) { 
     console.log("stream is null"); 
     return; 
    } 

    console.log(stream); 
    loadStream(stream); 
    } 
    else if (request.message === "statusChanged") { 
    console.log("statusChanged"); 
    } 
}); 

Quello che ho finora è quello di caricare il flusso audio nel Web API audio utilizzando un contesto audio

var context = new AudioContext(); 
var source = context.createMediaStreamSource(stream); 

ma lo script si blocca solo quando si tenta di creare la fonte.

Il problema è che non sono veramente sicuro di quale tipo sia lo stream (tabCapture api dice che è un LocalMediaStream).

Come posso ottenere la pagina per riprodurre il flusso audio?

+0

Hai controllato prima di creare la nuova istanza del tipo: "' if (typeof AudioContext ==! "Undefined") { contesto = new AudioContext();} else if (typeof webkitAudioContext! == "undefined") { context = new webkitAudioContext();} '" oppure hai provato un'altra versione del browser chrome? – gui47

+0

Ho definito l'AudioContext con window.AudioContext = window.AudioContext || window.webkitAudioContext; Non ho provato un'altra versione del browser Chrome ma sono sull'ultima build stabile. –

+0

Se funziona con altre versioni di Chrome, mi sembra un problema. Quindi penso che dovresti scriverne uno su [crbug] (http://crbug.com). – gui47

risposta

0

Provare questa funzione loadStream:

var audio = new Audio(); 
audio.src = URL.createObjectURL(stream); 
audio.play();