@@ -340,3 +340,57 @@ func TestSetHooks(t *testing.T) {
340340 t .Errorf ("Failed to set DTLS Certificate Request Hook" )
341341 }
342342}
343+
344+ func TestSetFireOnTrackBeforeFirstRTP (t * testing.T ) {
345+ lim := test .TimeOut (time .Second * 30 )
346+ defer lim .Stop ()
347+
348+ report := test .CheckRoutines (t )
349+ defer report ()
350+
351+ s := SettingEngine {}
352+ s .SetFireOnTrackBeforeFirstRTP (true )
353+
354+ mediaEngineOne := & MediaEngine {}
355+ assert .NoError (t , mediaEngineOne .RegisterCodec (RTPCodecParameters {
356+ RTPCodecCapability : RTPCodecCapability {MimeType : "video/VP8" , ClockRate : 90000 , Channels : 0 , SDPFmtpLine : "" , RTCPFeedback : nil },
357+ PayloadType : 100 ,
358+ }, RTPCodecTypeVideo ))
359+
360+ mediaEngineTwo := & MediaEngine {}
361+ assert .NoError (t , mediaEngineTwo .RegisterCodec (RTPCodecParameters {
362+ RTPCodecCapability : RTPCodecCapability {MimeType : "video/VP8" , ClockRate : 90000 , Channels : 0 , SDPFmtpLine : "" , RTCPFeedback : nil },
363+ PayloadType : 200 ,
364+ }, RTPCodecTypeVideo ))
365+
366+ offerer , err := NewAPI (WithMediaEngine (mediaEngineOne ), WithSettingEngine (s )).NewPeerConnection (Configuration {})
367+ assert .NoError (t , err )
368+
369+ answerer , err := NewAPI (WithMediaEngine (mediaEngineTwo )).NewPeerConnection (Configuration {})
370+ assert .NoError (t , err )
371+
372+ track , err := NewTrackLocalStaticSample (RTPCodecCapability {MimeType : MimeTypeVP8 }, "video" , "pion" )
373+ assert .NoError (t , err )
374+
375+ _ , err = offerer .AddTransceiverFromKind (RTPCodecTypeVideo )
376+ assert .NoError (t , err )
377+
378+ _ , err = answerer .AddTrack (track )
379+ assert .NoError (t , err )
380+
381+ onTrackFired , onTrackFiredFunc := context .WithCancel (context .Background ())
382+ offerer .OnTrack (func (track * TrackRemote , _ * RTPReceiver ) {
383+ _ , _ , err = track .Read (make ([]byte , 1500 ))
384+ assert .NoError (t , err )
385+ assert .Equal (t , track .PayloadType (), PayloadType (100 ))
386+ assert .Equal (t , track .Codec ().RTPCodecCapability .MimeType , "video/VP8" )
387+
388+ onTrackFiredFunc ()
389+ })
390+
391+ assert .NoError (t , signalPair (offerer , answerer ))
392+
393+ sendVideoUntilDone (onTrackFired .Done (), t , []* TrackLocalStaticSample {track })
394+
395+ closePairNow (t , offerer , answerer )
396+ }
0 commit comments