2014-11-27 6 views
38

Ich versuche WebRTC zu verwenden, um eine Video-Eingabe auf dem Bildschirm als Live-Feed anzuzeigen. Ich versuche keine Peer-to-Peer-Kommunikation oder ähnliches, sondern zeige einfach einen Video-Feed an.WebRTC kann keinen Video-Feed von einem USB-Eingabegerät bekommen (readyState geht zu Ende)

Der Code Ich habe funktioniert gut für meine Laptops integrierte Webcam, aber wenn ich ein externes Video-Eingabegerät anschließen (in diesem Fall ein alter Camcorder über S-Video an einen USB-Eingang mit einem StarTech-Konverter verbunden - Modellnummer SVID2USB2NS) Ich bekomme nichts. Ich habe das sowohl in Chrome als auch in Firefox versucht.

Beide Browser finden das Videogerät und bieten mir die Wahl zwischen meiner integrierten Webcam oder dem USB-Gerät (in diesem Fall als "USB 2820" bezeichnet), so dass sie in diesem Fall das Gerät kennen.

In Chrome, wenn ich versuche, der „Erfolg“ Rückruf des getUserMedia Anrufs zu verbinden, wird aufgerufen, wenn ich .getVideoTracks() Ich finde den MediaStreamTrack, und den Moment des Rückrufs, die MediaStreamTrack kehrt enabled = true und readyState = live. Es gibt jedoch keinen Video-Eingang (nur ein schwarzes Video-Panel und das kleine rote "Aufnahme" -Symbol in der Chrome-Browser-Registerkarte erscheint nicht). Wenn ich den MediaStreamTrack eine Sekunde später überprüfe, finde ich readyState now = "ended" (obwohl aktiviert ist immer noch wahr).

In FireFox wird das Gerät erneut gefunden, aber jeder Versuch, eine Verbindung mit getUserMedia herzustellen, löst nur den Fehlerrückruf mit einem HARDWARE_UNAVAILABLE-Fehler aus.

Mein getUserMedia Aufruf ist einfach:

navigator.getUserMedia({ audio: false, video: true }, _webRTCsuccessCallback, _webRTCerrorCallback); 

und mein Erfolg Rückruf ist (darunter auch einige Code-Test der MediaStreamTrack sofort und eine Sekunde später zu überprüfen):

function _webRTCsuccessCallback(stream) { 
    window.stream = stream; // stream available to console 
    if (window.URL) { 
     _video.src = window.URL.createObjectURL(stream); 
    } else { 
     _video.src = stream; 
    } 
    var tracks = stream.getVideoTracks(); 
    if (tracks[0]) { 
     console.log(tracks[0]); 
     setTimeout(function() { console.log(tracks[0]); }, 1000); 
    } 
} 

(wo _video ist die html5 Objekt auf der Seite)

Firefox Version 31.0

Chrome-Version 39.0.2171.71 m

OS-Version: Windows 7 Ultimate (6.1.7601) SP1

S-Video-auf-USB-Konverter: StarTech SVID2USB2NS (http://www.startech.com/AV/Converters/Video/USB-S-Video-Capture-Cable~SVID2USB2NS)

Quelle Kamera: Panasonic NV- DS35B (Digitale Videokamera)

Hat jemand irgendwelche Ideen, was das verursacht, und warum WebRTC Ball mit diesem Gerät nicht spielen wird?

(allgemein gesagt, ich weiß, das Gerät sendet ein Videosignal an den PC, wie in IE habe ich ein ActiveX-Steuerelement entwickelt, das DirectShow verwendet, um den Video-Feed zu erhalten, und es sammelt den Feed ganz gut - anders Technologie Ich schätze, aber es gibt mir Beweise, dass das Gerät da ist und Video senden!)

+1

Welche Kamera und welches Betriebssystem? Möglicherweise müssen Sie einen Bug in den entsprechenden Bug-Tracker des Browsers veröffentlichen. –

+0

@BenjaminTrent thanks - habe meine Frage bearbeitet, um das Betriebssystem und die Kamera-Informationen hinzuzufügen. Ich befürchtete, dass es am Ende zu den Browser-Trackern kommen würde, aber weder Chrome noch Firefox scheinen es zu wissen. Ich fragte mich, ob es vielleicht etwas war In beiden Browsern war es eher ein ähnliches Problem als bei anderen. Jeder, der mehr mit WebRTC zu tun hatte als ich, konnte alles anbieten, was ich vermisste! Z.B. WebRTC in diesen Browsern nicht wie bestimmte Arten von Eingabe, z. PAL vielleicht? – PulseLab

+1

@PulseLab: Können Sie bitte bestätigen, ob Sie die neuesten Treiber für ** StarTech SVID2USB2NS ** und ** Panasonic NV-DS35B ** installiert haben? –

Antwort

2

Die Spezifikationen auf Media Capture Streams besagt, dass während des Lebenszyklus eines MediaStreamTrack der Live-Status durch Null-Informationen ersetzt werden kann -Inhalt, wenn die MST entweder "stummgeschaltet" oder "deaktiviert" wurde. Dies führt zum Rendern von schwarzen Rahmen.

Mit anderen Worten Medien können nur von der Quelle fließen, wenn die MST beide, nicht aktiviert und aktiviert ist.

Der stummgeschaltete/nicht verbundene Zustand gibt an, ob die Quelle Medien bereitstellt.

Der Status aktiviert/deaktiviert bestimmt, ob die Spur Medien ausgibt.

Stellen Sie sicher, dass keine andere Anwendung das Quellgerät verwendet. In Ihrem Fall der StarTrack-Konverter. Schließen Sie alle anderen Anwendungen, die möglicherweise Zugriff auf Ihr Aufnahmegerät erhalten, während Sie versuchen, UserMedia im Browser aufzurufen.

Besuchen Sie diese Working Draft für weitere Informationen über MST Lebenszyklus und Durchfluss.

Ein weiteres Problem kann sein, dass Ihr Gerät keine Medien zur Verfügung stellt, die den Einschränkungen Ihrer Medienspur entsprechen. Ihr Gerät kann NTSC- und PAL-Videosignale liefern. Versuchen Sie also, die Einschränkungen für getUserMedia anzupassen, z. für PAL-Signal wie folgt:

{ 
    audio: false, 
    video: { 
    mandatory: { 
     maxWidth: 768, 
     maxHeight: 576, 
     maxAspectRatio: 1.333, 
     maxFrameRate: 25 
    } 
} 

Hoffe, dass irgendwie hilft.

Verwandte Themen