Skip to content

Commit 626591e

Browse files
authored
fix(HLS): Disable audio/video correctly when loading a TS media playlist (#7815)
1 parent 19c6e46 commit 626591e

File tree

2 files changed

+52
-46
lines changed

2 files changed

+52
-46
lines changed

lib/hls/hls_parser.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1164,8 +1164,8 @@ shaka.hls.HlsParser = class {
11641164

11651165
if (shaka.util.TsParser.probe(
11661166
shaka.util.BufferUtils.toUint8(data))) {
1167-
const basicInfo =
1168-
shaka.media.SegmentUtils.getBasicInfoFromTs(data);
1167+
const basicInfo = shaka.media.SegmentUtils.getBasicInfoFromTs(
1168+
data, this.config_.disableAudio, this.config_.disableVideo);
11691169
if (basicInfo) {
11701170
return basicInfo;
11711171
}

lib/media/segment_utils.js

+50-44
Original file line numberDiff line numberDiff line change
@@ -48,60 +48,66 @@ shaka.media.SegmentUtils = class {
4848

4949
/**
5050
* @param {!BufferSource} data
51+
* @param {boolean=} disableAudio
52+
* @param {boolean=} disableVideo
5153
* @return {?shaka.media.SegmentUtils.BasicInfo}
5254
*/
53-
static getBasicInfoFromTs(data) {
55+
static getBasicInfoFromTs(data, disableAudio = false, disableVideo = false) {
5456
const uint8ArrayData = shaka.util.BufferUtils.toUint8(data);
5557
const tsParser = new shaka.util.TsParser().parse(uint8ArrayData);
5658
const tsCodecs = tsParser.getCodecs();
5759
const videoInfo = tsParser.getVideoInfo();
5860
const codecs = [];
5961
let hasAudio = false;
6062
let hasVideo = false;
61-
switch (tsCodecs.audio) {
62-
case 'aac':
63-
case 'aac-loas':
64-
codecs.push('mp4a.40.2');
65-
hasAudio = true;
66-
break;
67-
case 'mp3':
68-
codecs.push('mp4a.40.34');
69-
hasAudio = true;
70-
break;
71-
case 'ac3':
72-
codecs.push('ac-3');
73-
hasAudio = true;
74-
break;
75-
case 'ec3':
76-
codecs.push('ec-3');
77-
hasAudio = true;
78-
break;
79-
case 'opus':
80-
codecs.push('opus');
81-
hasAudio = true;
82-
break;
63+
if (!disableAudio) {
64+
switch (tsCodecs.audio) {
65+
case 'aac':
66+
case 'aac-loas':
67+
codecs.push('mp4a.40.2');
68+
hasAudio = true;
69+
break;
70+
case 'mp3':
71+
codecs.push('mp4a.40.34');
72+
hasAudio = true;
73+
break;
74+
case 'ac3':
75+
codecs.push('ac-3');
76+
hasAudio = true;
77+
break;
78+
case 'ec3':
79+
codecs.push('ec-3');
80+
hasAudio = true;
81+
break;
82+
case 'opus':
83+
codecs.push('opus');
84+
hasAudio = true;
85+
break;
86+
}
8387
}
84-
switch (tsCodecs.video) {
85-
case 'avc':
86-
if (videoInfo.codec) {
87-
codecs.push(videoInfo.codec);
88-
} else {
89-
codecs.push('avc1.42E01E');
90-
}
91-
hasVideo = true;
92-
break;
93-
case 'hvc':
94-
if (videoInfo.codec) {
95-
codecs.push(videoInfo.codec);
96-
} else {
97-
codecs.push('hvc1.1.6.L93.90');
98-
}
99-
hasVideo = true;
100-
break;
101-
case 'av1':
102-
codecs.push('av01.0.01M.08');
103-
hasVideo = true;
104-
break;
88+
if (!disableVideo) {
89+
switch (tsCodecs.video) {
90+
case 'avc':
91+
if (videoInfo.codec) {
92+
codecs.push(videoInfo.codec);
93+
} else {
94+
codecs.push('avc1.42E01E');
95+
}
96+
hasVideo = true;
97+
break;
98+
case 'hvc':
99+
if (videoInfo.codec) {
100+
codecs.push(videoInfo.codec);
101+
} else {
102+
codecs.push('hvc1.1.6.L93.90');
103+
}
104+
hasVideo = true;
105+
break;
106+
case 'av1':
107+
codecs.push('av01.0.01M.08');
108+
hasVideo = true;
109+
break;
110+
}
105111
}
106112
if (!codecs.length) {
107113
return null;

0 commit comments

Comments
 (0)