2015-06-09 6 views
13

Ich versuche 640x480 von Chrome auf Android mit WebRTC zu streamen, und das Video beginnt damit, aber dann fällt die Auflösung auf 320x240.Warum ändert sich die Videoauflösung beim Streamen von Android über WebRTC

Hier sind die getUserMedia Parameter, die gesendet werden:

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

Meine Frage ist, warum fällt die Auflösung? Wenn ich es von Chrome auf meinem Mac ausprobiere, passiert das nicht. Ich möchte Anpassungen vornehmen, damit sich die Videoauflösung nicht ändert.

video frames dumped using ffmpeg

chrome://webrtc-internals text dump

Ich bin mit dem Licode WebRTC Streaming-Server, sondern haben auch das gleiche Verhalten mit Kurento gesehen.

+0

Ich weiß, dass Vp8 dynamisch Frame-Größen aufgrund von Latenz ändert (Netzwerk oder Verarbeitung). –

Antwort

10

getUserMedia Einschränkungen wirken sich nur auf die Medien aus, die vom Browser zur Hardware angefordert und als Stream zurückgegeben werden. getUserMedia Constraints haben keine Auswirkungen darauf, was danach mit diesem Stream gemacht wird (d. H. Wenn es über eine Verbindung gestreamt wird). Die Verschlechterung, die Sie sehen, ist in der PeerConnection Schicht, nicht in der getUserMedia Schicht. Der Abbau wird durch die Implementierung von webrtc ausgelöst, wenn Hardware- und Bandbreitenstatistiken auf eine geringe Leistung hindeuten und von beiden Seiten ausgehandelt werden.

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

Sie werden für die Dokumentation und Nachweis der in den Quellcode haben zu graben, wie es in jeder Implementierung getan, aber Verweise auf Verhalten:

Vom OReilly Chapter on WebRTC:

Die gute Nachricht ist, dass die WebRTC-Audio- und Video-Engines mit dem zugrunde liegenden Netzwerktransport zusammenarbeiten, um die verfügbare Bandbreite zu untersuchen und die Bereitstellung der Medienströme zu optimieren. DataChannel-Übertragungen erfordern jedoch zusätzliche Anwendungslogik: Die Anwendung muss die Menge der gepufferten Daten überwachen und bereit sein, sie bei Bedarf anzupassen.

...

WebRTC Audio- und Video-Motoren wird die Bitrate der Medienströme dynamisch anpassen zwischen den Peers, die Bedingungen der Netzwerkverbindung entsprechen. Die Anwendung kann Medienbeschränkungen festlegen und aktualisieren (z. B. Videoauflösung, Bildrate usw.), und die Maschinen erledigen den Rest - dieser Teil ist einfach.

+0

Es scheint, als ob es nicht möglich ist, die Auflösung zu erzwingen, wie ich es erwartet hatte. Wir haben das Video mit ffmpeg nachbearbeitet, um die Auflösung zu normalisieren. – j4y