Move SDP code into dedicated file

Remove some duplication that makes re-negotiation harder.
By splitting parsing of inbound SDP and creation of outbound
it makes the next step a lot easier.

Relates to #207
This commit is contained in:
Sean DuBois
2020-02-04 21:36:29 -08:00
parent f1ffb81649
commit 53014d3eb8
3 changed files with 324 additions and 319 deletions

View File

@@ -52,3 +52,36 @@ func (t *RTPTransceiver) Stop() error {
t.Direction = RTPTransceiverDirectionInactive
return nil
}
// Given a direction+type pluck a transceiver from the passed list
// if no entry satisfies the requested type+direction return a inactive Transceiver
func satisfyTypeAndDirection(remoteKind RTPCodecType, remoteDirection RTPTransceiverDirection, localTransceivers []*RTPTransceiver) (*RTPTransceiver, []*RTPTransceiver) {
// Get direction order from most preferred to least
getPreferredDirections := func() []RTPTransceiverDirection {
switch remoteDirection {
case RTPTransceiverDirectionSendrecv:
return []RTPTransceiverDirection{RTPTransceiverDirectionRecvonly, RTPTransceiverDirectionSendrecv}
case RTPTransceiverDirectionSendonly:
return []RTPTransceiverDirection{RTPTransceiverDirectionRecvonly, RTPTransceiverDirectionSendrecv}
case RTPTransceiverDirectionRecvonly:
return []RTPTransceiverDirection{RTPTransceiverDirectionSendonly, RTPTransceiverDirectionSendrecv}
}
return []RTPTransceiverDirection{}
}
for _, possibleDirection := range getPreferredDirections() {
for i := range localTransceivers {
t := localTransceivers[i]
if t.kind != remoteKind || possibleDirection != t.Direction {
continue
}
return t, append(localTransceivers[:i], localTransceivers[i+1:]...)
}
}
return &RTPTransceiver{
kind: remoteKind,
Direction: RTPTransceiverDirectionInactive,
}, localTransceivers
}