2015-06-09 28 views
13

Sto provando a trasmettere in streaming a 640x480 da Chrome su Android utilizzando WebRTC, e il video si avvia a questo, ma poi la risoluzione scende a 320x240.Perché la risoluzione video cambia durante lo streaming da Android tramite WebRTC

Qui ci sono i parametri che vengono inviati getUserMedia:

"getUserMedia": [ 
    { 
    "origin": "http://webrtc.example.com:3001", 
    "pid": 30062, 
    "rid": 15, 
    "video": "mandatory: {minWidth:640, maxWidth:640, minHeight:480, maxHeight:480}" 
    } 

mia domanda è perché fa cadere la risoluzione? Quando provo da Chrome sul mio Mac, ciò non accade. Vorrei fare delle regolazioni in modo che la risoluzione del video non cambi.

video frames dumped using ffmpeg

chrome://webrtc-internals text dump

sto usando il server di streaming Licode WebRTC, ma hanno anche visto lo stesso comportamento con Kurento.

+0

So che Vp8 modifica dinamicamente le dimensioni dei fotogrammi a causa della latenza (rete o elaborazione). –

risposta

10

getUserMedia i vincoli interessano solo il supporto richiesto dal browser all'hardware e restituito come flusso. I vincoli getUserMedia non hanno alcun effetto su ciò che viene fatto a quel flusso in seguito (cioè, quando è trasmesso in streaming su una connessione). Il degrado che stai vedendo è nel livello PeerConnection, non nel livello getUserMedia. La degradazione è innescata dall'implementazione di webrtc quando le statistiche dell'hardware e della larghezza di banda sono indicative di basse prestazioni e vengono negoziate da entrambe le parti.

[Hardware] <- getUserMedia -> [javascript client] <- PeerConnection -> [another client] 
      <- 640x480 captured ->      <- 320x240 sent -> 

Dovrete scavare nel codice sorgente per la documentazione e le prove di come si fa in ogni implementazione, ma i riferimenti a comportamenti:

Dal OReilly Chapter on WebRTC:

La buona notizia è che i motori audio e video WebRTC interagiscono con il trasporto di rete sottostante per sondare la larghezza di banda disponibile e ottimizzare l'erogazione dei flussi multimediali. Tuttavia, i trasferimenti DataChannel richiedono una logica applicativa aggiuntiva: l'applicazione deve monitorare la quantità di dati memorizzati nel buffer ed essere pronta a regolare secondo necessità.

...

motori WebRTC audio e video consentono di regolare dinamicamente il bitrate dei flussi multimediali in base alle condizioni del collegamento di rete tra i coetanei. L'applicazione può impostare e aggiornare i vincoli multimediali (ad es. Risoluzione video, framerate e così via) ei motori fanno il resto: questa parte è semplice.

+0

Sembra che non sia possibile forzare la risoluzione come mi aspettavo. Abbiamo fatto ricorso alla post-elaborazione del video usando ffmpeg per normalizzare la risoluzione. – j4y