2014-11-27 7 views
38

Sto provando a utilizzare WebRTC per visualizzare un input video sullo schermo come feed live. Non sto cercando di fare alcuna comunicazione peer-to-peer o qualcosa del genere, basta visualizzare un feed video.WebRTC non può ricevere un feed video da un dispositivo di input USB (readyState va a finire)

Il codice che ho funziona correttamente per la mia webcam integrata per portatili, ma quando collego un dispositivo di ingresso video esterno (in questo caso una vecchia videocamera collegata tramite S-Video a un ingresso USB utilizzando un convertitore StarTech - numero di modello SVID2USB2NS) Non ho niente. Ho provato questo in Chrome e FireFox.

Entrambi i browser trovano il dispositivo video e mi offrono la scelta della mia webcam integrata o del dispositivo USB (elencato come "USB 2820" in questo caso), quindi sono a conoscenza del dispositivo in questo caso.

In Chrome, quando provo a connettermi, la richiamata "successo" della chiamata getUserMedia è chiamato, se mi .getVideoTracks() trovo il MediaStreamTrack, e il momento della richiamata, i rendimenti MediaStreamTrackenabled = true e readyState = live. Tuttavia non c'è alcun input video (solo un pannello video nero, e la piccola icona rossa "registrazione" nella scheda del browser Chrome non appare). Se controllo il MediaStreamTrack un secondo dopo, trovo che readyState ora = "ended" (sebbene abilitato sia ancora vero).

In FireFox, di nuovo, il dispositivo viene rilevato, ma qualsiasi tentativo di connettersi ad esso utilizzando getUserMedia attiva semplicemente la richiamata di errore, con un errore HARDWARE_UNAVAILABLE.

mio getUserMedia chiamata è semplice:

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

e il mio successo callback è (tra cui alcuni codice di prova per verificare la MediaStreamTrack immediatamente e un secondo dopo):

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); 
    } 
} 

(dove _video è la html5 oggetto nella pagina)

versione di Firefox 31.0

Chrome versione 39.0.2171.71 m

versione del sistema operativo: Windows 7 Ultimate (6.1.7601) SP1

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

fotocamera Fonte: Panasonic NV- DS35B (Videocamera digitale)

Qualcuno ha qualche idea che cosa sta causando questo, e perché WebRTC non giocherà con questo dispositivo?

(in termini più generali, so che il dispositivo sta inviando un segnale video al PC, come in IE ho sviluppato un controllo ActiveX che utilizza DirectShow per ottenere il feed video, e raccoglie il feed bene - diverso la tecnologia apprezzo, ma mi dà la prova che il dispositivo è lì e l'invio di video!)

+1

Che fotocamera e quale sistema operativo? Potrebbe essere necessario pubblicare un bug nei corrispondenti bug trackers del browser. –

+0

@BenjaminTrent grazie - ha modificato la mia domanda per aggiungere il sistema operativo e le informazioni sulla fotocamera. Ho temuto che potesse finire con i browser tracker, ma siccome né Chrome né Firefox sembrano voler sapere, mi sono chiesto se forse fosse qualcosa che stava facendo piuttosto che un problema simile in entrambi i browser, chiunque fosse più versante in WebRTC di me potrebbe offrire qualsiasi cosa mi sia sfuggita! Per esempio. webRTC in quei browser non assomiglia a certi tipi di input, ad es. Forse PAL? – PulseLab

+1

@PulseLab: Può confermare per favore se sono installati i driver più recenti sia per ** StarTech SVID2USB2NS ** che ** Panasonic NV-DS35B **? –

risposta

2

Le specifiche su Media Capture Stream affermano che durante il ciclo di vita di un MediaStreamTrack lo stato live può essere sostituito da zero-information -contenuto se l'MST è stato "disattivato" o "disattivato". Ciò comporterà il rendering dei fotogrammi neri.

In altre parole, i supporti possono scorrere solo dalla sorgente se l'MST è entrambi, non modificato e attivato.

Lo stato disattivato/disattivato riflette se la fonte fornisce qualsiasi supporto.

Lo stato abilitato/disabilitato determina se la traccia emette il supporto.

Assicurarsi che nessun'altra applicazione stia utilizzando il dispositivo sorgente. Nel tuo caso il convertitore StarTrack. Chiudi tutte le altre applicazioni che potrebbero accedere al tuo dispositivo di acquisizione mentre provi a getUserMedia nel browser.

Per ulteriori informazioni sul ciclo di vita e sul flusso MST, visitare questo Working Draft.

Un altro problema potrebbe essere che il dispositivo non fornisce supporti che soddisfano i vincoli presenti sulla traccia multimediale. Il tuo dispositivo è in grado di fornire segnali video NTSC e PAL. Quindi prova ad aggiustare i vincoli per getUserMedia, ad es. per il segnale PAL in questo modo:

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

La speranza che aiuta in qualche modo.

Problemi correlati