diff --git a/mediadevices.go b/mediadevices.go index 04c705c..72edf74 100644 --- a/mediadevices.go +++ b/mediadevices.go @@ -82,6 +82,12 @@ func WithTrackGenerator(gen TrackGenerator) MediaDevicesOption { func (m *mediaDevices) GetDisplayMedia(constraints MediaStreamConstraints) (MediaStream, error) { trackers := make([]Tracker, 0) + cleanTrackers := func() { + for _, t := range trackers { + t.Stop() + } + } + var videoConstraints MediaTrackConstraints if constraints.Video != nil { constraints.Video(&videoConstraints) @@ -90,6 +96,7 @@ func (m *mediaDevices) GetDisplayMedia(constraints MediaStreamConstraints) (Medi if videoConstraints.Enabled { tracker, err := m.selectScreen(videoConstraints) if err != nil { + cleanTrackers() return nil, err } @@ -98,6 +105,7 @@ func (m *mediaDevices) GetDisplayMedia(constraints MediaStreamConstraints) (Medi s, err := NewMediaStream(trackers...) if err != nil { + cleanTrackers() return nil, err } @@ -111,6 +119,12 @@ func (m *mediaDevices) GetUserMedia(constraints MediaStreamConstraints) (MediaSt // TODO: It should return media stream based on constraints trackers := make([]Tracker, 0) + cleanTrackers := func() { + for _, t := range trackers { + t.Stop() + } + } + var videoConstraints, audioConstraints MediaTrackConstraints if constraints.Video != nil { constraints.Video(&videoConstraints) @@ -123,6 +137,7 @@ func (m *mediaDevices) GetUserMedia(constraints MediaStreamConstraints) (MediaSt if videoConstraints.Enabled { tracker, err := m.selectVideo(videoConstraints) if err != nil { + cleanTrackers() return nil, err } @@ -132,6 +147,7 @@ func (m *mediaDevices) GetUserMedia(constraints MediaStreamConstraints) (MediaSt if audioConstraints.Enabled { tracker, err := m.selectAudio(audioConstraints) if err != nil { + cleanTrackers() return nil, err } @@ -140,6 +156,7 @@ func (m *mediaDevices) GetUserMedia(constraints MediaStreamConstraints) (MediaSt s, err := NewMediaStream(trackers...) if err != nil { + cleanTrackers() return nil, err } diff --git a/pkg/driver/wrapper.go b/pkg/driver/wrapper.go index a751415..ea2a46d 100644 --- a/pkg/driver/wrapper.go +++ b/pkg/driver/wrapper.go @@ -79,6 +79,9 @@ func (w *adapterWrapper) VideoRecord(p prop.Media) (r video.Reader, err error) { r, err = w.VideoRecorder.VideoRecord(p) return err }) + if err != nil { + _ = w.Close() + } return } diff --git a/track.go b/track.go index 4b23348..8b49642 100644 --- a/track.go +++ b/track.go @@ -139,6 +139,7 @@ func newVideoTrack(opts *MediaDevicesOptions, d driver.Driver, constraints Media encoder, err := codec.BuildVideoEncoder(r, constraints.Media) if err != nil { + _ = d.Close() return nil, err } @@ -214,6 +215,7 @@ func newAudioTrack(opts *MediaDevicesOptions, d driver.Driver, constraints Media encoder, err := codec.BuildAudioEncoder(reader, constraints.Media) if err != nil { + _ = d.Close() return nil, err }