2015-06-09 26 views
13

Próbuję przesyłać strumieniowo 640 x 480 z Chrome na Androida przy użyciu WebRTC, a wideo zaczyna się od tego, ale wtedy rozdzielczość spada do 320 x 240.Dlaczego rozdzielczość wideo zmienia się podczas strumieniowania z Androida przez WebRTC

Oto parametry getUserMedia które są wysyłane:

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

Moje pytanie jest dlaczego rozdzielczość spadnie? Kiedy próbuję tego z Chrome na moim Macu, to się nie dzieje. Chciałbym wprowadzić poprawki, aby rozdzielczość wideo się nie zmieniła.

video frames dumped using ffmpeg

chrome://webrtc-internals text dump

Używam Streaming Server Licode WebRTC, ale widziałem też takie samo zachowanie przy użyciu Kurento.

+0

Wiem, że Vp8 dynamicznie zmienia rozmiary klatek ze względu na opóźnienie (sieć lub przetwarzanie). –

Odpowiedz

10

getUserMedia ograniczenia dotyczą tylko nośnika żądanego z przeglądarki do sprzętu i zwróconego jako strumień. getUserMedia więzy nie mają żadnego wpływu na to, co zostało zrobione temu strumieniowi (tj. Kiedy jest przesyłane strumieniowo przez połączenie). Degradacja, którą widzisz, znajduje się w warstwie PeerConnection, a nie w warstwie getUserMedia. Degradacja jest wyzwalana przez implementację webrtc, gdy statystyki sprzętu i przepustowości wskazują na niską wydajność i są negocjowane przez obie strony.

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

Musisz kopać w kodzie źródłowym do dokumentacji i dowodów, jak to zrobić w każdej implementacji, ale odniesienia do zachowań:

Z OReilly Chapter on WebRTC:

Dobrą wiadomością jest to, że silniki audio i wideo WebRTC współpracują z bazowym transportem sieciowym, aby zbadać dostępną przepustowość i zoptymalizować dostarczanie strumieni mediów. Jednak transfery DataChannel wymagają dodatkowej logiki aplikacji: aplikacja musi monitorować ilość buforowanych danych i być gotowa do dostosowania w razie potrzeby.

...

silniki WebRTC audio i wideo będzie dynamicznie zmieniać bitrate strumieni multimedialnych, aby dopasować warunki łącza sieciowego między rówieśnikami. Aplikacja może ustawiać i aktualizować ograniczenia nośników (np. Rozdzielczość wideo, szybkość klatek itp.), A silniki wykonują resztę - ta część jest łatwa.

+0

Wygląda na to, że nie można wymusić rozwiązania, jak się spodziewałem. Ubiegliśmy się o przetwarzanie wideo za pomocą ffmpeg w celu znormalizowania rozdzielczości. – j4y