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)
| 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. |
| 3115 | func 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 |
no outgoing calls