Skip to content

Commit 4fb9cce

Browse files
Merge pull request #14 from clappr/fix/switch-audio-issues-safari
fix(audio): resolve muted audio issues when switching audio
2 parents 4228191 + 0b5491f commit 4fb9cce

File tree

2 files changed

+22
-23
lines changed

2 files changed

+22
-23
lines changed

src/html5_playback.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ export default class HTML5TVsPlayback extends Playback {
6060
if (!this.el.audioTracks) return null
6161

6262
const track = Object.values(this.el.audioTracks).find(track => track.enabled)
63-
return this._formatAudioTrack(track)
63+
64+
return track && this._formatAudioTrack(track)
6465
}
6566

6667
get isLive() { return this.mediaType === Playback.LIVE }
@@ -331,7 +332,10 @@ export default class HTML5TVsPlayback extends Playback {
331332
const track = this.el.audioTracks?.getTrackById(id)
332333
if (!track || track.enabled) return
333334

334-
track.enabled = true
335+
Object.values(this.el.audioTracks).forEach(track => {
336+
track.enabled = track.id === id
337+
})
338+
335339
this.trigger(Events.PLAYBACK_AUDIO_CHANGED, this._formatAudioTrack(track))
336340
}
337341

src/html5_playback.test.js

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -31,41 +31,28 @@ const setupTest = (options = {}) => {
3131
// https://developer.mozilla.org/en-US/docs/Web/API/AudioTrackList
3232
const createAudioTrackListStub = () => {
3333
const tracks = {}
34-
const updateEnabledProperty = (trackId, value) => {
35-
Object.values(tracks).forEach(track => {
36-
if (track.id === trackId)
37-
track._enabled = value
38-
else
39-
track._enabled = value ? false : this._enabled
40-
})
41-
}
42-
const createAudioTrack = trackInfo => ({
43-
...trackInfo,
44-
get enabled() { return this._enabled },
45-
set enabled(value) { updateEnabledProperty(this.id, value) },
46-
})
4734

4835
Object.defineProperties(tracks, {
4936
addEventListener: { value: jest.fn() },
5037
getTrackById: { value: id => tracks[id] },
5138
0: {
52-
value: createAudioTrack({
39+
value: {
5340
id: '0',
5441
language: 'en',
5542
kind: 'description',
5643
label: 'English (describes video)',
57-
_enabled: true,
58-
}),
44+
enabled: true,
45+
},
5946
enumerable: true,
6047
},
6148
1: {
62-
value: createAudioTrack({
49+
value: {
6350
id: '1',
6451
language: 'en',
6552
kind: 'main',
6653
label: 'English',
67-
_enabled: false,
68-
}),
54+
enabled: false,
55+
},
6956
enumerable: true,
7057
},
7158
length: { value: 2 },
@@ -252,10 +239,18 @@ describe('HTML5TVsPlayback', function() {
252239
})
253240
})
254241

255-
test('returns null if audioTracks property doesn\'t exist on media element', () => {
242+
test('does not return anything if no audio track is enabled', () => {
243+
Object.values(this.playback.el.audioTracks).forEach(t => {
244+
t.enabled = false
245+
})
246+
247+
expect(this.playback.currentAudioTrack).toBeFalsy()
248+
})
249+
250+
test('does not return anything if audioTracks property doesn\'t exist on media element', () => {
256251
delete window.HTMLMediaElement.prototype.audioTracks
257252

258-
expect(this.playback.currentAudioTrack).toBeNull()
253+
expect(this.playback.currentAudioTrack).toBeFalsy()
259254
})
260255
})
261256

0 commit comments

Comments
 (0)