2014-11-14 15 views
7

Przeszukałem sposób na zmianę kodeka w implementacji WebRTC przez Chrome, ale nie wydaje mi się, żeby był jakiś sposób.Jak zmienić domyślny kodek używany w WebRTC?

Jak zmienić domyślny kodek (audio lub wideo) w połączeniu WebRTCpeer w przeglądarce Chrome?

+0

Możliwy duplikat [Czy istnieje sposób wyboru kodeków w WebRTC PeerConnection?] (Http://stackoverflow.com/questions/21402990/is-there-a-way-to-choose-codecs-in- webrtc-peerconnection) – user

Odpowiedz

10

Tak, możesz zmienić kodek na dowolny, pod warunkiem, że Chrome go obsługuje. W tej chwili audio, jedynymi obsługiwanymi kodekami są PCMA, PCMU, ISAC i OPUS (domyślnie). Dla wideo masz VP8 (także H264 na niektórych systemach z FireFox).

Aby użyć dowolnego z tych kodeków jako domyślnego, należy zmodyfikować swoje SDP przed ustawieniem go lokalnie w swoim peerconnection i wysłaniu oferty/odpowiedzi. Testowałem pomyślnie, zmuszając Chrome domyślnie do wysyłania PCMA zamiast OPUS.

Jako przykład:

że masz swój punkt SDP domyślne audio, który wygląda następująco (noty są w nawiasach nie są częścią SDP)

m=audio<media> 49353<port> RTP/SAVPF<proto> 111 103 104 0 8 106 105 13 126 <rtpformats> 

c=IN<nettype> IP4<addrtype> 192.168.0.13<address> 

a=rtcp:49353<port> IN<nettype> IP4<addresstype> privateIP<connection address> 

a=candidate:1204296370 1 udp 2122260223 privateIP 49353 typ host generation 0 <audioIceCandidate> 
a=candidate:1204296370 2 udp 2122260223 privateIP 49353 typ host generation 0 
a=candidate:155969090 1 tcp 1518280447 privateIP 0 typ host generation 0 
a=candidate:155969090 2 tcp 1518280447 privateIP 0 typ host generation 0 
a=ice-ufrag:E7VFzFythTIOaQ6X <ice username> 
a=ice-pwd:ZMHFqqXEA8JLjItZcRN4FZDJ <ice-password> 
a=ice-options:google-ice <iceoptions> 
a=fingerprint:sha-256<encryptType> 66:2D:43:3A:31:7B:46:56:50:D7:CC:75:80:79:5D:88:7D:5D:1B:0E:C7:E6:F9:C4:68:6D:51:7F:4B:32:97:A1<print> 
a=setup:actpass <dtls setup mode> 
a=mid:audio 
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level <extention map> 
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time 
a=sendrecv <mediamode> 
a=rtcp-mux <says rtcp mux> 
a=rtpmap:111 opus/48000/2 
a=fmtp:111 minptime=10 
a=rtpmap:103 ISAC/16000 
a=rtpmap:104 ISAC/32000 
a=rtpmap:0 PCMU/8000 
a=rtpmap:8 PCMA/8000 
a=rtpmap:106 CN/32000 
a=rtpmap:105 CN/16000 
a=rtpmap:13 CN/8000 
a=rtpmap:126 telephone-event/8000 
a=maxptime:60 

Jeśli chciał TYLKO użyj PCMA, zmieniłbyś linię m=audio na następującą: m=audio 49353 RTP/SAVPF 8 w ten sposób bierze się pod uwagę tylko ładunek PCMA. Następnie musisz usunąć wszystkie linie rtpmap, które nie odpowiadają temu ładunkowi, czyli dowolne a=rtpmap:, gdzie następny znak NIE jest numerem 8. Jeśli ustawisz zmodyfikowany sdp lokalnie i wyślesz go do swojego peera (i jeśli POMAGAJĄ PCMA .. . nie muszą być dla nich domyślne, ponieważ negocjacje wymuszą na PCMA, jeśli tylko to zaoferujesz), wtedy PCMA będzie twoim kodekiem audio, a nie OPUS.

Para asides:

  • SDP mówię to jeden generowane i przekazywane za pośrednictwem zwrotnego sukces createOffer i createAnswer funkcji peerconnection
  • Tego rodzaju pomysł zadziała za dodanie kodeki, które znasz, są obsługiwane przez systemy underlaying (H264, SPEEX, itp.). Po prostu pamiętaj o dodaniu ładunku, a odpowiednie odwzorowania i opcje (fmtp są potrzebne dla h264, ponieważ profile są ważne i prawdopodobnie sprop-parameter-sets).
  • Będzie to działać z każdym odpowiednio zakodowanym systemem WebRTC, np. Firefox, Opera itp. Nie tylko chrom.
+0

Witam, Benjamin Dzięki waszej rady udało mi się zmienić kodek audio (Opus na PCMA). Jednak gdy próbowałem zmienić kodek wideo (na h.264), wideo nic nie pokazuje. Czy Chrome obsługuje zmianę kodeka wideo? – Tony

+2

Chrome w ogóle nie obsługuje H.264, Firefox nie wierzy, jeśli system działa (widziałem, że Firefox oferuje go jako opcję w swoich najnowszych wydaniach). –

+2

@BenjaminTrent: Czy możesz podzielić się główną dokumentacją, jak poprawić jakość Opus lub iSac? Gdzie można znaleźć instrukcję SDP związaną z kodem audio? – YumYumYum

Powiązane problemy