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