2

zu erfassen Ich benutze GetUserMedia API, um Bildschirm zu erfassen und Audio (beide zusammen) von Chrome-Erweiterung aufzunehmen. Die API erfasst den Bildschirm, zeichnet das Video auf, erfasst jedoch nicht das Audio.getUserMedia api ist nicht in der Lage, Audio zusammen mit Video von Chrome-Erweiterung

Chrome-Version: 55

Gibt es Gründe, warum der Ton nicht erfasst wird. Gibt es irgendwelche Einschränkungen mit der API oder müssen wir irgendeine andere API verwenden, um Video + Audio zu erfassen? Hier finden Sie das Code-Snippet. (unter Code ist in background.js vorhanden)

(versucht, die Einschränkungen als Audio: True, Video: true, aber das hat nicht funktioniert. Es war ein Fehler. (Fehler - getUserMedia() fehlgeschlagen: [object NavigatorUserMediaError ]))

chrome.desktopCapture.chooseDesktopMedia(['screen','audio'], 
    function onAccessApproved(id) {  

    const constraints = { "video": { 
      mandatory: { 
       chromeMediaSource: 'desktop',  
       chromeMediaSourceId: id,   
       minWidth: 1280, 
       minHeight: 720,     
       maxWidth:1280, 
       maxHeight:720 
      } 
      }, "audio" : { 
      mandatory: { 
       chromeMediaSource: 'desktop',  
      chromeMediaSourceId: id}} };      

navigator.mediaDevices.getUserMedia(constraints).then(gotMedia).catch(e => { console.error('getUserMedia() failed: ' + e); 
}); 

function gotMedia(stream) { 

    theStream = stream; 
    var video = document.createElement('video'); 
    video.src = URL.createObjectURL(stream); 
    video.srcObject = stream; 

    try { 
    recorder = new MediaRecorder(stream, {mimeType : "video/webm"}); 
    } catch (e) { 
    console.error('Exception while creating MediaRecorder: ' + e); 
    return; 
    } 

    theRecorder = recorder; 
    recorder.ondataavailable = 
     (event) => { recordedChunks.push(event.data); }; 
    recorder.start(100); 


    stream.getVideoTracks()[0].onended = function() { 
     download(); 
    }; 
} 


function download() { 


    theRecorder.stop(); 
    theStream.getTracks().forEach(track => { track.stop(); }); 

    var blob = new Blob(recordedChunks, {type: "video/webm"}); 
    var url = URL.createObjectURL(blob); 
    var a = document.createElement("a"); 
    document.body.appendChild(a); 
    a.style = "display: none"; 
    a.href = url; 
    a.download = 'test.webm'; 
    a.click(); 
    // setTimeout() here is needed for Firefox. 
    setTimeout(function() { URL.revokeObjectURL(url); }, 100); 
} 
+0

_ "Es wurde ein Fehler ausgegeben." _ Was ist der Fehler? – guest271314

+0

Fehler: getUserMedia() fehlgeschlagen: [object NavigatorUserMediaError] – Anil

+0

Ist das Protokoll 'https:'? – guest271314

Antwort

0

nach diesem webRTC Experiment's page über die Bildschirmfreigabe,

Why Screen Sharing Fails?
[...]
2. On chrome, you requested audio-stream alongwith 'chromeMediaSource' – it is not permitted on chrome.

So ist es nicht erlaubt.

Sie könnten versuchen, eine parallele Anfrage nur für Audio zu machen, dann beide Ströme mit MediaStream.addTrack() zusammenführen, obwohl ich es nicht getestet habe.

videoStream.addTrack(audioStream.getAudioTracks()[0])

0

Da dies die Top-Google-Ergebnis für „NavigatorUserMediaError mediaRecorder“ ist möchte ich auch darauf, dass, wenn jemand anderes ist, dass Fehlermeldung bekommen, auf Android Chrome zum Beispiel, könnte es mit Sicherheitszertifikaten zu tun haben, . MediaRecorder kann nur dann auf das Mikrofon oder die Kamera eines Mobilgeräts zugreifen, wenn die Site über ein SSL-Zertifikat verfügt und die URL HTTPS ist.

können Sie verlangen, HTTPS die gleiche Art und Weise Google hat in seinem simple.info/mr Beispiel der code:

// window.isSecureContext could be used for Chrome 
var isSecureOrigin = location.protocol === 'https:' || 
location.hostname === 'localhost'; 
if (!isSecureOrigin) { 
    alert('getUserMedia() must be run from a secure origin: HTTPS or localhost.' + 
    '\n\nChanging protocol to HTTPS'); 
    location.protocol = 'HTTPS'; 
} 

Aber Sie müssen auch die Website, um sicherzustellen, hat ein SSL-Zertifikat zu verweisen. Auf HostGator kostet das ungefähr $ 30/Jahr, aber GitHub.io bietet es kostenlos an, wenn Sie nur etwas Code testen wollen. Sie können die Dateien auch lokal ausführen und es werden keine Sicherheitszertifikate benötigt, aber ich habe das noch nicht getestet.

Verwandte Themen