diff --git a/internal/core/path_test.go b/internal/core/path_test.go index 5004c093..30a90d73 100644 --- a/internal/core/path_test.go +++ b/internal/core/path_test.go @@ -404,6 +404,37 @@ func TestPathRunOnRead(t *testing.T) { Log: test.NilLogger{}, } + writerDone := make(chan struct{}) + defer func() { <-writerDone }() + + writerTerminate := make(chan struct{}) + defer close(writerTerminate) + + go func() { + defer close(writerDone) + i := uint16(0) + for { + select { + case <-time.After(100 * time.Millisecond): + case <-writerTerminate: + return + } + err := source.WritePacketRTP(testMediaH264, &rtp.Packet{ + Header: rtp.Header{ + Version: 2, + Marker: true, + PayloadType: 96, + SequenceNumber: 123 + i, + Timestamp: 45343, + SSRC: 563423, + }, + Payload: []byte{5}, + }) + require.NoError(t, err) + i++ + } + }() + _, err = c.Read(context.Background()) require.NoError(t, err) defer checkClose(t, c.Close) diff --git a/internal/protocols/webrtc/peer_connection.go b/internal/protocols/webrtc/peer_connection.go index 719489eb..0050f0a5 100644 --- a/internal/protocols/webrtc/peer_connection.go +++ b/internal/protocols/webrtc/peer_connection.go @@ -227,7 +227,7 @@ outer: // GatherIncomingTracks gathers incoming tracks. func (co *PeerConnection) GatherIncomingTracks( ctx context.Context, - count int, + maxCount int, ) ([]*IncomingTrack, error) { var tracks []*IncomingTrack @@ -237,7 +237,7 @@ func (co *PeerConnection) GatherIncomingTracks( for { select { case <-t.C: - if count == 0 { + if maxCount == 0 && len(tracks) != 0 { return tracks, nil } return nil, fmt.Errorf("deadline exceeded while waiting tracks") @@ -249,7 +249,7 @@ func (co *PeerConnection) GatherIncomingTracks( } tracks = append(tracks, track) - if len(tracks) == count || len(tracks) >= 2 { + if len(tracks) == maxCount || len(tracks) >= 2 { return tracks, nil }