Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从chrome扩展流式播放音频_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript 如何从chrome扩展流式播放音频

Javascript 如何从chrome扩展流式播放音频,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我曾尝试使用WebRTC为流媒体音频点对点扩展chrome,但问题是,由于该扩展将在一段时间内处于活动状态,我尝试将对等连接数据和描述作为本地发送以获取本地音频,我对远程音频也做了同样的操作 async function addStreamtoPeerConnection(pc) { await chrome.extension.sendMessage({ type: "local", pc: pc }); } // Remote audio which is c

我曾尝试使用WebRTC为流媒体音频点对点扩展chrome,但问题是,由于该扩展将在一段时间内处于活动状态,我尝试将对等连接数据和描述作为本地发送以获取本地音频,我对远程音频也做了同样的操作

async function addStreamtoPeerConnection(pc) {
    await chrome.extension.sendMessage({ type: "local", pc: pc });
}

// Remote  audio which is created after the above function and the connection was initialized
friends[pub].pc.ontrack = (event) => {
        console.log("ontrack", event);
        if (remoteAudio.src !== event.streams) {
            //createResonanceScence(event.streams[0]);

            chrome.extension.sendMessage({ type: "remote", event: event });
            console.log("received remote stream", event);
        }
    };
在收到请求后,后台脚本应该创建音频元素并从后台播放它们

document.write(
    "<div class='audioComponent'><audio class='localAudio'></audio><audio class='remoteAudio'></audio></div>"
);
var localAudio = document.getElementsByClassName(".localAudio");
var remoteAudio = document.getElementsByClassName(".remoteAudio");
chrome.runtime.onMessage.addListener((request, sender, response) => {
    console.log("Req:", request);
    if (request.type == "local") {
        var constraints = { audio: true, video: false };
        navigator.mediaDevices
            .getUserMedia(constraints)
            .then((userMediaStream) => {
                userMediaStream.getTracks().forEach((track) => {
                    request.pc.addTrack(track, userMediaStream);
                });
                localAudio.src = userMediaStream;
                localAudio.onloadedmetadata = function () {
                    localAudio.play();
                    console.log(">>>>LOCAL AUDIO HERE<<<<<");
                    localAudio.muted = true;
                };
                localAudio.attr("disabled", true);
            });

        console.log(document.getElementsByClassName(".audioComponent"));
    }
    if (request.type == "remote") {
        remoteAudio.muted = true;
        createResonanceScence(request.event.streams);
        remoteAudio.src = request.event.streams;
        remoteAudio.onloadedmetadata = function () {
            remoteAudio.play();
            console.log("metadata loaded");
        };
        document.getElementsByClassName(".audioComponent").append(remoteAudio);
    }
});

document.write(
""
);
var localAudio=document.getElementsByClassName(“.localAudio”);
var remoteAudio=document.getElementsByClassName(“.remoteAudio”);
chrome.runtime.onMessage.addListener((请求、发送方、响应)=>{
日志(“请求:”,请求);
if(request.type==“本地”){
var约束={audio:true,video:false};
navigator.mediaDevices
.getUserMedia(限制条件)
。然后((userMediaStream)=>{
userMediaStream.getTracks().forEach((曲目)=>{
request.pc.addTrack(track,userMediaStream);
});
localAudio.src=userMediaStream;
localAudio.onloadedmetadata=函数(){
localAudio.play();

console.log(“>>>>>本地音频在此localAudio以文档的形式返回数组。getElementsByClassName始终返回数组。尝试用localAudio[0]替换localAudio。它修复了localAudio.play不是函数的一个错误,但仍然会产生DomeException错误,这可能是因为navigator.mediaDevices中的承诺