Browse Source

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

pull/3043/head
Alessandro Ros 1 year ago committed by GitHub
parent
commit
a52f550ee6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 31
      internal/core/path_test.go
  2. 6
      internal/protocols/webrtc/peer_connection.go

31
internal/core/path_test.go

@ -404,6 +404,37 @@ func TestPathRunOnRead(t *testing.T) {
Log: test.NilLogger{}, 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()) _, err = c.Read(context.Background())
require.NoError(t, err) require.NoError(t, err)
defer checkClose(t, c.Close) defer checkClose(t, c.Close)

6
internal/protocols/webrtc/peer_connection.go

@ -227,7 +227,7 @@ outer:
// GatherIncomingTracks gathers incoming tracks. // GatherIncomingTracks gathers incoming tracks.
func (co *PeerConnection) GatherIncomingTracks( func (co *PeerConnection) GatherIncomingTracks(
ctx context.Context, ctx context.Context,
count int, maxCount int,
) ([]*IncomingTrack, error) { ) ([]*IncomingTrack, error) {
var tracks []*IncomingTrack var tracks []*IncomingTrack
@ -237,7 +237,7 @@ func (co *PeerConnection) GatherIncomingTracks(
for { for {
select { select {
case <-t.C: case <-t.C:
if count == 0 { if maxCount == 0 && len(tracks) != 0 {
return tracks, nil return tracks, nil
} }
return nil, fmt.Errorf("deadline exceeded while waiting tracks") return nil, fmt.Errorf("deadline exceeded while waiting tracks")
@ -249,7 +249,7 @@ func (co *PeerConnection) GatherIncomingTracks(
} }
tracks = append(tracks, track) tracks = append(tracks, track)
if len(tracks) == count || len(tracks) >= 2 { if len(tracks) == maxCount || len(tracks) >= 2 {
return tracks, nil return tracks, nil
} }

Loading…
Cancel
Save