Browse Source

automatically call WHEPClient.Close() in case of errors during WHEPClient.Read() or WHEPClient.Publish()

pull/3124/head
aler9 2 years ago
parent
commit
fa24957654
  1. 9
      internal/protocols/webrtc/whip_client.go
  2. 1
      internal/staticsources/webrtc/source.go

9
internal/protocols/webrtc/whip_client.go

@ -78,6 +78,7 @@ func (c *WHIPClient) Publish( @@ -78,6 +78,7 @@ func (c *WHIPClient) Publish(
err = c.pc.SetAnswer(res.Answer)
if err != nil {
WHIPDeleteSession(context.Background(), c.HTTPClient, c.URL.String()) //nolint:errcheck
c.pc.Close()
return nil, err
}
@ -91,6 +92,7 @@ outer: @@ -91,6 +92,7 @@ outer:
case ca := <-c.pc.NewLocalCandidate():
err := WHIPPatchCandidate(ctx, c.HTTPClient, c.URL.String(), offer, res.ETag, ca)
if err != nil {
WHIPDeleteSession(context.Background(), c.HTTPClient, c.URL.String()) //nolint:errcheck
c.pc.Close()
return nil, err
}
@ -101,6 +103,7 @@ outer: @@ -101,6 +103,7 @@ outer:
break outer
case <-t.C:
WHIPDeleteSession(context.Background(), c.HTTPClient, c.URL.String()) //nolint:errcheck
c.pc.Close()
return nil, fmt.Errorf("deadline exceeded while waiting connection")
}
@ -156,6 +159,7 @@ func (c *WHIPClient) Read(ctx context.Context) ([]*IncomingTrack, error) { @@ -156,6 +159,7 @@ func (c *WHIPClient) Read(ctx context.Context) ([]*IncomingTrack, error) {
var sdp sdp.SessionDescription
err = sdp.Unmarshal([]byte(res.Answer.SDP))
if err != nil {
WHIPDeleteSession(context.Background(), c.HTTPClient, c.URL.String()) //nolint:errcheck
c.pc.Close()
return nil, err
}
@ -163,12 +167,14 @@ func (c *WHIPClient) Read(ctx context.Context) ([]*IncomingTrack, error) { @@ -163,12 +167,14 @@ func (c *WHIPClient) Read(ctx context.Context) ([]*IncomingTrack, error) {
// check that there are at most two tracks
_, err = TrackCount(sdp.MediaDescriptions)
if err != nil {
WHIPDeleteSession(context.Background(), c.HTTPClient, c.URL.String()) //nolint:errcheck
c.pc.Close()
return nil, err
}
err = c.pc.SetAnswer(res.Answer)
if err != nil {
WHIPDeleteSession(context.Background(), c.HTTPClient, c.URL.String()) //nolint:errcheck
c.pc.Close()
return nil, err
}
@ -182,6 +188,7 @@ outer: @@ -182,6 +188,7 @@ outer:
case ca := <-c.pc.NewLocalCandidate():
err := WHIPPatchCandidate(ctx, c.HTTPClient, c.URL.String(), offer, res.ETag, ca)
if err != nil {
WHIPDeleteSession(context.Background(), c.HTTPClient, c.URL.String()) //nolint:errcheck
c.pc.Close()
return nil, err
}
@ -192,6 +199,7 @@ outer: @@ -192,6 +199,7 @@ outer:
break outer
case <-t.C:
WHIPDeleteSession(context.Background(), c.HTTPClient, c.URL.String()) //nolint:errcheck
c.pc.Close()
return nil, fmt.Errorf("deadline exceeded while waiting connection")
}
@ -199,6 +207,7 @@ outer: @@ -199,6 +207,7 @@ outer:
tracks, err := c.pc.GatherIncomingTracks(ctx, 0)
if err != nil {
WHIPDeleteSession(context.Background(), c.HTTPClient, c.URL.String()) //nolint:errcheck
c.pc.Close()
return nil, err
}

1
internal/staticsources/webrtc/source.go

@ -56,7 +56,6 @@ func (s *Source) Run(params defs.StaticSourceRunParams) error { @@ -56,7 +56,6 @@ func (s *Source) Run(params defs.StaticSourceRunParams) error {
tracks, err := client.Read(params.Context)
if err != nil {
client.Close() //nolint:errcheck
return err
}
defer client.Close() //nolint:errcheck

Loading…
Cancel
Save