webrtc: return an error when proxying stream with no tracks (#3042)

This commit is contained in:
Alessandro Ros 2024-02-18 21:58:11 +01:00 committed by GitHub
parent 6e721201ed
commit a52f550ee6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 34 additions and 3 deletions

View File

@ -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)

View File

@ -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
}