Enviando o microfone
AddTrack recebe um tipo e um codec e devolve um TsgcRTCTrack. Os codecs de áudio são cctAudioOpus, cctAudioPCMU e cctAudioPCMA, os codecs de vídeo são cctVideoVP8, cctVideoVP9, cctVideoH264 e cctVideoJPEG.
A captura é um objeto separado, porque pode ser que você não queira o microfone da plataforma. sgcCreateAudioCapture monta a implementação certa para a plataforma em que o código foi compilado, waveIn no Windows, ALSA no Linux, AudioRecord no Android, uma Audio Unit VoiceProcessingIO no iOS e no macOS, de modo que nada no seu código cita uma classe de plataforma. Ela devolve nil em um alvo sem implementação, então teste o resultado.
SendPCM quer PCM intercalado com sinal de 16 bits na taxa e na contagem de canais do codificador, que para Opus é 48000 Hz e para G.711 é 8000 Hz. A fonte de captura publica o que realmente entrega através de AudioSampleRate, AudioChannels e AudioFrameDurationMs, então você pode conferir em vez de supor.
Adicionar uma faixa depois de a sessão já estar de pé liga a flag de negociação necessária e dispara OnNegotiationNeeded. Chame CreateOffer de novo para publicá-la, e o novo offer é montado sem tocar no transporte.