Das Mikrofon senden
AddTrack nimmt eine Art und einen Codec und gibt eine TsgcRTCTrack zurück. Die Audio-Codecs sind cctAudioOpus, cctAudioPCMU und cctAudioPCMA, die Video-Codecs sind cctVideoVP8, cctVideoVP9, cctVideoH264 und cctVideoJPEG.
Die Aufnahme ist ein eigenes Objekt, weil du das Plattform-Mikrofon vielleicht gar nicht willst. sgcCreateAudioCapture baut die passende Implementierung für die Plattform, für die der Code kompiliert wurde, waveIn unter Windows, ALSA unter Linux, AudioRecord unter Android, eine VoiceProcessingIO Audio Unit unter iOS und macOS, in deinem Code steht also nirgends ein Plattformklassenname. Auf einem Ziel ohne Implementierung kommt nil zurück, prüfe also das Ergebnis.
SendPCM will 16-Bit-PCM mit Vorzeichen, interleaved, mit der Rate und Kanalzahl des Encoders, bei Opus also 48000 Hz und bei G.711 8000 Hz. Die Aufnahmequelle veröffentlicht über AudioSampleRate, AudioChannels und AudioFrameDurationMs, was sie tatsächlich liefert, du kannst also prüfen statt annehmen.
Eine Spur hinzuzufügen, wenn die Sitzung schon steht, setzt das Negotiation-Needed-Flag und löst OnNegotiationNeeded aus. Rufe CreateOffer erneut auf, um sie zu veröffentlichen, und das erneute Offer wird gebaut, ohne den Transport anzufassen.