@@ -1160,12 +1160,15 @@ func TestPeerConnection_Regegotiation_ReuseTransceiver(t *testing.T) {
1160
1160
t .Fatal (err )
1161
1161
}
1162
1162
1163
- vp8Track , err := NewTrackLocalStaticSample (RTPCodecCapability {MimeType : MimeTypeVP8 }, "foo" , "bar" )
1163
+ vp8Track , err := NewTrackLocalStaticRTP (RTPCodecCapability {MimeType : MimeTypeVP8 }, "foo" , "bar" )
1164
1164
assert .NoError (t , err )
1165
1165
sender , err := pcOffer .AddTrack (vp8Track )
1166
1166
assert .NoError (t , err )
1167
1167
assert .NoError (t , signalPair (pcOffer , pcAnswer ))
1168
1168
1169
+ peerConnectionConnected := untilConnectionState (PeerConnectionStateConnected , pcOffer , pcAnswer )
1170
+ peerConnectionConnected .Wait ()
1171
+
1169
1172
assert .Equal (t , len (pcOffer .GetTransceivers ()), 1 )
1170
1173
assert .Equal (t , pcOffer .GetTransceivers ()[0 ].getCurrentDirection (), RTPTransceiverDirectionSendonly )
1171
1174
assert .NoError (t , pcOffer .RemoveTrack (sender ))
@@ -1185,6 +1188,45 @@ func TestPeerConnection_Regegotiation_ReuseTransceiver(t *testing.T) {
1185
1188
assert .NoError (t , err )
1186
1189
assert .Equal (t , len (pcOffer .GetTransceivers ()), 2 )
1187
1190
assert .True (t , sender .rtpTransceiver == pcOffer .GetTransceivers ()[0 ])
1191
+ assert .NoError (t , signalPair (pcOffer , pcAnswer ))
1192
+
1193
+ tracksCh := make (chan * TrackRemote , 2 )
1194
+ pcAnswer .OnTrack (func (tr * TrackRemote , _ * RTPReceiver ) {
1195
+ tracksCh <- tr
1196
+ })
1197
+
1198
+ ssrcReuse := sender .GetParameters ().Encodings [0 ].SSRC
1199
+ for i := 0 ; i < 10 ; i ++ {
1200
+ assert .NoError (t , vp8Track .WriteRTP (& rtp.Packet {Header : rtp.Header {Version : 2 }, Payload : []byte {0 , 1 , 2 , 3 , 4 , 5 }}))
1201
+ time .Sleep (20 * time .Millisecond )
1202
+ }
1203
+
1204
+ // shold not reuse tranceiver between two CreateOffer
1205
+ offer , err := pcOffer .CreateOffer (nil )
1206
+ assert .NoError (t , err )
1207
+ assert .NoError (t , pcOffer .RemoveTrack (sender ))
1208
+ assert .NoError (t , pcOffer .SetLocalDescription (offer ))
1209
+ assert .NoError (t , pcAnswer .SetRemoteDescription (offer ))
1210
+ answer , err := pcAnswer .CreateAnswer (nil )
1211
+ assert .NoError (t , pcAnswer .SetLocalDescription (answer ))
1212
+ assert .NoError (t , err )
1213
+ assert .NoError (t , pcOffer .SetRemoteDescription (answer ))
1214
+ sender3 , err := pcOffer .AddTrack (vp8Track )
1215
+ ssrcNotReuse := sender3 .GetParameters ().Encodings [0 ].SSRC
1216
+ assert .NoError (t , err )
1217
+ assert .Equal (t , len (pcOffer .GetTransceivers ()), 3 )
1218
+ assert .NoError (t , signalPair (pcOffer , pcAnswer ))
1219
+ assert .True (t , sender3 .rtpTransceiver == pcOffer .GetTransceivers ()[2 ])
1220
+
1221
+ for i := 0 ; i < 10 ; i ++ {
1222
+ assert .NoError (t , vp8Track .WriteRTP (& rtp.Packet {Header : rtp.Header {Version : 2 }, Payload : []byte {0 , 1 , 2 , 3 , 4 , 5 }}))
1223
+ time .Sleep (20 * time .Millisecond )
1224
+ }
1225
+
1226
+ tr1 := <- tracksCh
1227
+ tr2 := <- tracksCh
1228
+ assert .Equal (t , tr1 .SSRC (), ssrcReuse )
1229
+ assert .Equal (t , tr2 .SSRC (), ssrcNotReuse )
1188
1230
1189
1231
closePairNow (t , pcOffer , pcAnswer )
1190
1232
}
0 commit comments