2015-04-29 21 views
13

Obecnie próbuję uzyskać czysty kanał audio, jak to możliwe za pośrednictwem Webrtc. Poprzez mediaconstraints getUserMedia obiekt, mam ustawić następujące opcje:WebRTC - wyłącz wszystkie przetwarzanie dźwięku

constraints: { 
     audio: { 
      mandatory: { 
       echoCancellation: false, 
       googEchoCancellation: false, 
       googAutoGainControl: false, 
       googAutoGainControl2: false, 
       googNoiseSuppression: false, 
       googHighpassFilter: false, 
       googTypingNoiseDetection: false, 
       //googAudioMirroring: false // For some reason setting googAudioMirroring causes a navigator.getUserMedia error: NavigatorUserMediaError 
      } 
     }, 
     video: false 
    }, 

To znacznie poprawia jakość dźwięku, ale nie wydaje się być nadal obecne przetwarzanie dźwięku, co powoduje okaleczenia audio w postaci wysokiej częstotliwości hałas z niektórymi badanymi próbkami.

Istnieje flaga Chrome --use-file-for-fake-audio-capture zgodnie z opisem pod numerem http://peter.sh/experiments/chromium-command-line-switches/#use-file-for-fake-audio-capture, która umożliwia wprowadzanie za pośrednictwem pliku do testowania. Jak wspomniano w opisie flagi, wszystkie przetwarzanie dźwięku musi być wyłączone lub dźwięk zostanie zniekształcony - wydaje się, że istnieją dodatkowe opcje do tego celu.

Próbowałem także flag Chrome z --disable-audio-track-processing --audio-buffer-size=16 --enable-exclusive-audio, ale nadal wydaje się, że przetwarzanie dźwięku.

Czy istnieje sposób na wyłączenie wciąż aktualnego przetwarzania dźwięku (najlepiej za pomocą interfejsu JS API)?

+0

Czy dzieje się to lokalnie lub w połączeniu równorzędnym? Może się tak zdarzyć, że Chrome zmienia dynamicznie szybkość transmisji dla Opus (tak będzie tylko w przypadku, gdy zauważysz to w połączeniu). –

+0

Przez połączenie równorzędne. Myślę, że to jakaś optymalizacja dźwięku głosu. Zawsze włącza się po x czasie odtwarzania próbki. – wowpatrick

+0

Przeczytałem to, aby móc powiedzieć, że przepływność jest dostosowywana zgodnie z dostępnym pasmem. – Robert

Odpowiedz

1

Założę się, że zachowanie zmiennej szybkości transmisji (domyślne) kodeka Opus powoduje pewną kompresję lub dopasowanie. Można ręcznie zestawić ofertę SDP, aby użyć CBR (stała przepływność) zamiast VBR (zmienna przepływność). Gdy pojawi się oferta SDP z przeglądarki, zmienić linię:

a=fmtp:111 minptime=10; useinbandfec=1 

do:

a=fmtp:111 minptime=10; cbr=1 

Zauważ, że jestem zarówno dodaniecbr=1 i usuwaniauseinbandfec=1. Nie jestem pewien, że konieczne jest upuszczenie useinbandfec, ale wydaje się, że wewnątrzpasmowa FEC (korekcja błędów przesyłania) powoduje korektę kompresji, której równie dobrze chciałbyś uniknąć.