PeerConnection: more thread-safe

now proctected by lock:
	- CreateOffer
	- CreateAnswer
	- AddTransceiverFromKind
	- AddTransceiverFromTrack

newRTPTransceiver is no longer a PeerConnection method;
pc.addRTPTransceiver would fire onNegotiationNeeded;
pc.AddTrack, pc.RemoveTrack now hold lock for the entire function;

Fixes TestNegotiationNeededStressOneSided() by waiting til all
tracks added to pcA and the negotiation completed
This commit is contained in:
Markus Tzoe
2021-04-10 17:10:53 +08:00
committed by Markus
parent 9ab64a04ac
commit b6ca48ea6d
3 changed files with 111 additions and 125 deletions

View File

@@ -20,6 +20,19 @@ type RTPTransceiver struct {
kind RTPCodecType
}
func newRTPTransceiver(
receiver *RTPReceiver,
sender *RTPSender,
direction RTPTransceiverDirection,
kind RTPCodecType,
) *RTPTransceiver {
t := &RTPTransceiver{kind: kind}
t.setReceiver(receiver)
t.setSender(sender)
t.setDirection(direction)
return t
}
// Sender returns the RTPTransceiver's RTPSender if it has one
func (t *RTPTransceiver) Sender() *RTPSender {
if v := t.sender.Load(); v != nil {