2015-04-29 15 views
13

Attualmente sto cercando di ottenere un canale audio il più pulito possibile tramite webrtc. Via i mediaconstraints getUserMedia oggetto, ho impostato le seguenti opzioni:WebRTC - disabilita tutta l'elaborazione audio

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 
    }, 

Questo migliora notevolmente la qualità audio, ma ci sembra ancora essere presenti elaborazione audio, che fa sì che la mutilazione del audio sotto forma di alta frequenza rumore con alcuni dei campioni di prova.

C'è una bandiera di Chrome --use-file-for-fake-audio-capture come descritto a http://peter.sh/experiments/chromium-command-line-switches/#use-file-for-fake-audio-capture che consente l'input tramite file per il test. Come menzionato nella descrizione del flag, tutta l'elaborazione audio deve essere disabilitata o l'audio risulterà distorto - quindi sembra che ci siano opzioni aggiuntive per questo scopo.

Ho anche provato i flag di Chrome --disable-audio-track-processing --audio-buffer-size=16 --enable-exclusive-audio, ma ancora sembra esserci qualche elaborazione audio.

C'è un modo per disabilitare l'elaborazione audio ancora presente (preferibilmente tramite API JS)?

+0

Ciò avviene localmente o in una connessione peer? Potrebbe accadere che Chrome stia cambiando il bitrate in modo dinamico per Opus (questo sarà solo il caso se lo stai notando in una connessione). –

+0

Su una connessione peer. Penso che sia una sorta di ottimizzazione dell'audio della voce. Gioca sempre con dopo x quantità di tempo durante la riproduzione di un campione. – wowpatrick

+0

L'ho letto in modo da poter dire con certezza che il bitrate è regolato in base alla larghezza di banda disponibile. – Robert

risposta

1

Scommetto che il comportamento del bitrate variabile (predefinito) del codec opus sta causando una certa compressione o regolazione. È possibile manipolare manualmente l'offerta SDP per utilizzare CBR (bitrate costante) anziché VBR (bit rate variabile). Quando si ottiene l'offerta SDP dal browser, modificare la riga:

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

a:

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

Nota che sono entrambi aggiungendocbr=1 e rimozioneuseinbandfec=1. Non sono sicuro che la riduzione di useinbandfec sia necessaria, ma sembra che la FEC in-band (correzione degli errori di inoltro) causi una regolazione della compressione che vorresti evitare.