Skip to content

Commit 77a3f56

Browse files
aveladtykus160
andauthored
feat: Add more info on src= tracks when the browser support it (#8302)
This add info about videoTrack when there is not audioTrack --------- Co-authored-by: Wojciech Tyczyński <[email protected]>
1 parent 6cc035a commit 77a3f56

File tree

2 files changed

+39
-16
lines changed

2 files changed

+39
-16
lines changed

lib/player.js

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2579,6 +2579,14 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
25792579
this.loadEventManager_.listen(mediaElement.audioTracks, 'change',
25802580
() => this.onTracksChanged_());
25812581
}
2582+
if (mediaElement.videoTracks) {
2583+
this.loadEventManager_.listen(mediaElement.videoTracks, 'addtrack',
2584+
() => this.onTracksChanged_());
2585+
this.loadEventManager_.listen(mediaElement.videoTracks, 'removetrack',
2586+
() => this.onTracksChanged_());
2587+
this.loadEventManager_.listen(mediaElement.videoTracks, 'change',
2588+
() => this.onTracksChanged_());
2589+
}
25822590

25832591
if (mediaElement.textTracks) {
25842592
this.loadEventManager_.listen(
@@ -5112,8 +5120,16 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
51125120
// audioTracks to generate a variant list that is usable for changing
51135121
// languages.
51145122
const audioTracks = Array.from(this.video_.audioTracks);
5115-
return audioTracks.map((audio) =>
5116-
shaka.util.StreamUtils.html5TrackToShakaTrack(audio, videoTrack));
5123+
if (audioTracks.length) {
5124+
return audioTracks.map((audio) =>
5125+
shaka.util.StreamUtils.html5TrackToShakaTrack(audio, videoTrack));
5126+
} else if (videoTrack) {
5127+
return [
5128+
shaka.util.StreamUtils.html5TrackToShakaTrack(null, videoTrack),
5129+
];
5130+
} else {
5131+
return [];
5132+
}
51175133
} else {
51185134
return [];
51195135
}
@@ -5574,6 +5590,9 @@ shaka.Player = class extends shaka.util.FakeEventTarget {
55745590
this.updateAbrManagerVariants_();
55755591
};
55765592
const selectSrcEqualsMode = () => {
5593+
if (!track.originalAudioId) {
5594+
return;
5595+
}
55775596
if (this.video_ && this.video_.audioTracks) {
55785597
// Safari's native HLS won't let you choose an explicit variant, though
55795598
// you can choose audio languages this way.

lib/util/stream_utils.js

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1538,7 +1538,7 @@ shaka.util.StreamUtils = class {
15381538
/**
15391539
* Generate and return an ID for this track, since the ID field is optional.
15401540
*
1541-
* @param {TextTrack|AudioTrack} html5Track
1541+
* @param {TextTrack|AudioTrack|VideoTrack} html5Track
15421542
* @return {number} The generated ID.
15431543
*/
15441544
static html5TrackId(html5Track) {
@@ -1589,22 +1589,27 @@ shaka.util.StreamUtils = class {
15891589

15901590

15911591
/**
1592-
* @param {AudioTrack} audioTrack
1592+
* @param {?AudioTrack} audioTrack
15931593
* @param {?VideoTrack} videoTrack
15941594
* @return {shaka.extern.Track}
15951595
*/
15961596
static html5TrackToShakaTrack(audioTrack, videoTrack) {
1597+
goog.asserts.assert(audioTrack || videoTrack,
1598+
'There must be at least audioTrack or videoTrack.');
1599+
15971600
const LanguageUtils = shaka.util.LanguageUtils;
15981601

1602+
const language = audioTrack ? audioTrack.language : null;
1603+
15991604
/** @type {shaka.extern.Track} */
16001605
const track = {
1601-
id: shaka.util.StreamUtils.html5TrackId(audioTrack),
1602-
active: audioTrack.enabled,
1606+
id: shaka.util.StreamUtils.html5TrackId(audioTrack || videoTrack),
1607+
active: audioTrack ? audioTrack.enabled : videoTrack.selected,
16031608
type: 'variant',
16041609
bandwidth: 0,
1605-
language: LanguageUtils.normalize(audioTrack.language || 'und'),
1606-
label: audioTrack.label,
1607-
kind: audioTrack.kind,
1610+
language: LanguageUtils.normalize(language || 'und'),
1611+
label: audioTrack ? audioTrack.label : null,
1612+
kind: audioTrack ? audioTrack.kind : null,
16081613
width: null,
16091614
height: null,
16101615
frameRate: null,
@@ -1618,7 +1623,7 @@ shaka.util.StreamUtils = class {
16181623
codecs: null,
16191624
audioCodec: null,
16201625
videoCodec: null,
1621-
primary: audioTrack.kind == 'main',
1626+
primary: audioTrack ? audioTrack.kind == 'main' : false,
16221627
roles: [],
16231628
forced: false,
16241629
audioRoles: null,
@@ -1631,21 +1636,20 @@ shaka.util.StreamUtils = class {
16311636
tilesLayout: null,
16321637
audioBandwidth: null,
16331638
videoBandwidth: null,
1634-
originalVideoId: null,
1635-
originalAudioId: audioTrack.id,
1639+
originalVideoId: videoTrack ? videoTrack.id : null,
1640+
originalAudioId: audioTrack ? audioTrack.id : null,
16361641
originalTextId: null,
16371642
originalImageId: null,
16381643
accessibilityPurpose: null,
1639-
originalLanguage: audioTrack.language,
1644+
originalLanguage: language,
16401645
};
16411646

1642-
if (audioTrack.kind) {
1647+
if (audioTrack && audioTrack.kind) {
16431648
track.roles = [audioTrack.kind];
16441649
track.audioRoles = [audioTrack.kind];
1645-
track.label = audioTrack.label;
16461650
}
16471651

1648-
if (audioTrack.configuration) {
1652+
if (audioTrack && audioTrack.configuration) {
16491653
if (audioTrack.configuration.codec) {
16501654
track.audioCodec = audioTrack.configuration.codec;
16511655
track.codecs = track.audioCodec;

0 commit comments

Comments
 (0)