diff --git a/lib/dash/dash_parser.js b/lib/dash/dash_parser.js index e21754a211..08cc1f2318 100644 --- a/lib/dash/dash_parser.js +++ b/lib/dash/dash_parser.js @@ -1230,8 +1230,10 @@ shaka.dash.DashParser = class { let forced = false; if (isText) { - // See: https://github.com/google/shaka-player/issues/2122 - forced = roles.includes('forced_subtitle'); + // See: https://github.com/google/shaka-player/issues/2122 and + // https://github.com/Dash-Industry-Forum/DASH-IF-IOP/issues/165 + forced = roles.includes('forced_subtitle') || + roles.includes('forced-subtitle'); } let tilesLayout; diff --git a/test/dash/dash_parser_manifest_unit.js b/test/dash/dash_parser_manifest_unit.js index e46cd634a0..0e263f5a02 100644 --- a/test/dash/dash_parser_manifest_unit.js +++ b/test/dash/dash_parser_manifest_unit.js @@ -1874,7 +1874,7 @@ describe('DashParser Manifest', () => { expect(textStream.kind).toBe('caption'); }); - it('converts Roles element to "forced"', async () => { + it('converts Roles element to "forced" (old role)', async () => { const manifestText = [ '', ' ', @@ -1906,6 +1906,38 @@ describe('DashParser Manifest', () => { expect(textStream.forced).toBe(true); }); + it('converts Roles element to "forced"', async () => { + const manifestText = [ + '', + ' ', + ' ', + ' ', + ' ', + ' ', + ' ', + ' t-en.vtt', + ' ', + ' ', + ' ', + ' ', + ' v-sd.mp4', + ' ', + ' ', + ' ', + ' ', + '', + ].join('\n'); + + fakeNetEngine.setResponseText('dummy://foo', manifestText); + /** @type {shaka.extern.Manifest} */ + const manifest = await parser.start('dummy://foo', playerInterface); + const textStream = manifest.textStreams[0]; + expect(textStream.roles).toEqual(['captions', 'forced-subtitle']); + expect(textStream.forced).toBe(true); + }); + it('supports HDR signaling via profiles', async () => { // (DASH-IF IOP v4.3 10.3.3.) const hdrProfile =