MCPcopy
hub / github.com/livekit/livekit / configureSenderAudio

Function configureSenderAudio

pkg/rtc/transport.go:3115–3153  ·  view source on GitHub ↗

configure subscriber transceiver for audio stereo and nack pion doesn't support per transciver codec configuration, so the nack of this session will be disabled forever once it is first disabled by a transceiver.

(tr *webrtc.RTPTransceiver, stereo bool, nack bool, offerAudioPT map[mime.MimeType]webrtc.PayloadType)

Source from the content-addressed store, hash-verified

3113// pion doesn't support per transciver codec configuration, so the nack of this session will be disabled
3114// forever once it is first disabled by a transceiver.
3115func configureSenderAudio(tr *webrtc.RTPTransceiver, stereo bool, nack bool, offerAudioPT map[mime.MimeType]webrtc.PayloadType) {
3116 sender := tr.Sender()
3117 if sender == nil {
3118 return
3119 }
3120
3121 // enable stereo
3122 codecs := sender.GetParameters().Codecs
3123 configCodecs := make([]webrtc.RTPCodecParameters, 0, len(codecs))
3124 for _, c := range codecs {
3125 if mime.IsMimeTypeStringOpus(c.MimeType) {
3126 c.SDPFmtpLine = strings.ReplaceAll(c.SDPFmtpLine, ";sprop-stereo=1", "")
3127 if stereo {
3128 c.SDPFmtpLine += ";sprop-stereo=1"
3129 }
3130 if !nack {
3131 for i, fb := range c.RTCPFeedback {
3132 if fb.Type == webrtc.TypeRTCPFBNACK {
3133 c.RTCPFeedback = append(c.RTCPFeedback[:i], c.RTCPFeedback[i+1:]...)
3134 break
3135 }
3136 }
3137 }
3138 }
3139 // When answering a subscriber's offer (single peer connection mode), echo
3140 // the payload type the offer assigned for this codec instead of the server's
3141 // MediaEngine payload type. Otherwise the answer can advertise e.g. Opus on a
3142 // PT that was never offered, which Firefox rejects (received packets decode to
3143 // 0 samples / silence). The forwarded RTP already uses the offered PT.
3144 if len(offerAudioPT) > 0 {
3145 if pt, ok := offerAudioPT[mime.NormalizeMimeType(c.MimeType)]; ok {
3146 c.PayloadType = pt
3147 }
3148 }
3149 configCodecs = append(configCodecs, c)
3150 }
3151
3152 tr.SetCodecPreferences(configCodecs)
3153}
3154
3155// offerAudioPayloadTypes returns mime type -> payload type for the audio codecs
3156// in a remote offer, so the subscriber answer can echo the offered payload types

Calls

no outgoing calls