From 1c7bb2899ccaaf26855700bf2c9d890812b092f5 Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Fri, 21 Jun 2019 18:22:40 +0100 Subject: [PATCH] Merge pull request #6055 from xirac:dev-v2 PiperOrigin-RevId: 254182080 --- RELEASENOTES.md | 1 + .../manifest/SsManifestParser.java | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index b20a278713..b441e6e995 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -4,6 +4,7 @@ * Display last frame when seeking to end of stream ([#2568](https://github.com/google/ExoPlayer/issues/2568)). +* SmoothStreaming: Parse text stream `Subtype` into `Format.roleFlags`. ### 2.10.2 ### diff --git a/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/manifest/SsManifestParser.java b/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/manifest/SsManifestParser.java index 66731660f5..39e22f2982 100644 --- a/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/manifest/SsManifestParser.java +++ b/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/manifest/SsManifestParser.java @@ -586,6 +586,7 @@ public class SsManifestParser implements ParsingLoadable.Parser { } else { subType = parser.getAttributeValue(null, KEY_SUB_TYPE); } + putNormalizedAttribute(KEY_SUB_TYPE, subType); name = parser.getAttributeValue(null, KEY_NAME); url = parseRequiredString(parser, KEY_URL); maxWidth = parseInt(parser, KEY_MAX_WIDTH, Format.NO_VALUE); @@ -645,6 +646,7 @@ public class SsManifestParser implements ParsingLoadable.Parser { private static final String KEY_CHANNELS = "Channels"; private static final String KEY_FOUR_CC = "FourCC"; private static final String KEY_TYPE = "Type"; + private static final String KEY_SUB_TYPE = "Subtype"; private static final String KEY_LANGUAGE = "Language"; private static final String KEY_NAME = "Name"; private static final String KEY_MAX_WIDTH = "MaxWidth"; @@ -709,6 +711,18 @@ public class SsManifestParser implements ParsingLoadable.Parser { /* roleFlags= */ 0, language); } else if (type == C.TRACK_TYPE_TEXT) { + String subType = (String) getNormalizedAttribute(KEY_SUB_TYPE); + @C.RoleFlags int roleFlags = 0; + switch (subType) { + case "CAPT": + roleFlags = C.ROLE_FLAG_CAPTION; + break; + case "DESC": + roleFlags = C.ROLE_FLAG_DESCRIBES_MUSIC_AND_SOUND; + break; + default: + break; + } String language = (String) getNormalizedAttribute(KEY_LANGUAGE); format = Format.createTextContainerFormat( @@ -719,7 +733,7 @@ public class SsManifestParser implements ParsingLoadable.Parser { /* codecs= */ null, bitrate, /* selectionFlags= */ 0, - /* roleFlags= */ 0, + roleFlags, language); } else { format =