Close drivers on stream initialization failure

In GetUserMedia and GetDisplayMedia, driver was left opened if
initialization failure. Since Trackers are not returned on error,
there was no way to close them.
This commit closes Trackers on GetUserMedia/GetDisplayMedia failure.
This commit is contained in:
Atsushi Watanabe
2020-02-19 15:23:38 +09:00
committed by Lukas Herman
parent a0269f8c6f
commit 2bac44aa8a
3 changed files with 22 additions and 0 deletions
+17
View File
@@ -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
}
+3
View File
@@ -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
}
+2
View File
@@ -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
}