Commit cd9041c0 by Itay Kinnrot Committed by itay.kinnrot

Parse the label of audio and text from stream and add it to Format type + add it…

Parse the label of audio and text from stream and add it to Format type + add it to default ui + update from dev-v2
parent 5725a727
...@@ -162,6 +162,11 @@ public final class Format implements Parcelable { ...@@ -162,6 +162,11 @@ public final class Format implements Parcelable {
public final @Nullable String language; public final @Nullable String language;
/** /**
* The label, or null if unknown or not applicable.
*/
public final String label;
/**
* The Accessibility channel, or {@link #NO_VALUE} if not known or applicable. * The Accessibility channel, or {@link #NO_VALUE} if not known or applicable.
*/ */
public final int accessibilityChannel; public final int accessibilityChannel;
...@@ -185,7 +190,7 @@ public final class Format implements Parcelable { ...@@ -185,7 +190,7 @@ public final class Format implements Parcelable {
return new Format(id, containerMimeType, sampleMimeType, codecs, bitrate, NO_VALUE, width, return new Format(id, containerMimeType, sampleMimeType, codecs, bitrate, NO_VALUE, width,
height, frameRate, NO_VALUE, NO_VALUE, null, NO_VALUE, null, NO_VALUE, NO_VALUE, NO_VALUE, height, frameRate, NO_VALUE, NO_VALUE, null, NO_VALUE, null, NO_VALUE, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, selectionFlags, null, NO_VALUE, OFFSET_SAMPLE_RELATIVE, NO_VALUE, NO_VALUE, selectionFlags, null, NO_VALUE, OFFSET_SAMPLE_RELATIVE,
initializationData, null, null); initializationData, null, null, null);
} }
public static Format createVideoSampleFormat( public static Format createVideoSampleFormat(
...@@ -240,7 +245,7 @@ public final class Format implements Parcelable { ...@@ -240,7 +245,7 @@ public final class Format implements Parcelable {
return new Format(id, null, sampleMimeType, codecs, bitrate, maxInputSize, width, height, return new Format(id, null, sampleMimeType, codecs, bitrate, maxInputSize, width, height,
frameRate, rotationDegrees, pixelWidthHeightRatio, projectionData, stereoMode, frameRate, rotationDegrees, pixelWidthHeightRatio, projectionData, stereoMode,
colorInfo, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, 0, null, NO_VALUE, colorInfo, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, 0, null, NO_VALUE,
OFFSET_SAMPLE_RELATIVE, initializationData, drmInitData, null); OFFSET_SAMPLE_RELATIVE, initializationData, drmInitData, null, null);
} }
// Audio. // Audio.
...@@ -255,11 +260,12 @@ public final class Format implements Parcelable { ...@@ -255,11 +260,12 @@ public final class Format implements Parcelable {
int sampleRate, int sampleRate,
List<byte[]> initializationData, List<byte[]> initializationData,
@C.SelectionFlags int selectionFlags, @C.SelectionFlags int selectionFlags,
@Nullable String language) { @Nullable String language,
@Nullable String label) {
return new Format(id, containerMimeType, sampleMimeType, codecs, bitrate, NO_VALUE, NO_VALUE, return new Format(id, containerMimeType, sampleMimeType, codecs, bitrate, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, null, NO_VALUE, null, channelCount, sampleRate, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, null, NO_VALUE, null, channelCount, sampleRate,
NO_VALUE, NO_VALUE, NO_VALUE, selectionFlags, language, NO_VALUE, OFFSET_SAMPLE_RELATIVE, NO_VALUE, NO_VALUE, NO_VALUE, selectionFlags, language, NO_VALUE, OFFSET_SAMPLE_RELATIVE,
initializationData, null, null); initializationData, null, null, label);
} }
public static Format createAudioSampleFormat( public static Format createAudioSampleFormat(
...@@ -315,7 +321,7 @@ public final class Format implements Parcelable { ...@@ -315,7 +321,7 @@ public final class Format implements Parcelable {
return new Format(id, null, sampleMimeType, codecs, bitrate, maxInputSize, NO_VALUE, NO_VALUE, return new Format(id, null, sampleMimeType, codecs, bitrate, maxInputSize, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, NO_VALUE, null, NO_VALUE, null, channelCount, sampleRate, pcmEncoding, NO_VALUE, NO_VALUE, NO_VALUE, null, NO_VALUE, null, channelCount, sampleRate, pcmEncoding,
encoderDelay, encoderPadding, selectionFlags, language, NO_VALUE, OFFSET_SAMPLE_RELATIVE, encoderDelay, encoderPadding, selectionFlags, language, NO_VALUE, OFFSET_SAMPLE_RELATIVE,
initializationData, drmInitData, metadata); initializationData, drmInitData, metadata, null);
} }
// Text. // Text.
...@@ -327,9 +333,10 @@ public final class Format implements Parcelable { ...@@ -327,9 +333,10 @@ public final class Format implements Parcelable {
@Nullable String codecs, @Nullable String codecs,
int bitrate, int bitrate,
@C.SelectionFlags int selectionFlags, @C.SelectionFlags int selectionFlags,
@Nullable String language) { @Nullable String language,
@Nullable String label) {
return createTextContainerFormat(id, containerMimeType, sampleMimeType, codecs, bitrate, return createTextContainerFormat(id, containerMimeType, sampleMimeType, codecs, bitrate,
selectionFlags, language, NO_VALUE); selectionFlags, language, NO_VALUE, label);
} }
public static Format createTextContainerFormat( public static Format createTextContainerFormat(
...@@ -340,11 +347,13 @@ public final class Format implements Parcelable { ...@@ -340,11 +347,13 @@ public final class Format implements Parcelable {
int bitrate, int bitrate,
@C.SelectionFlags int selectionFlags, @C.SelectionFlags int selectionFlags,
@Nullable String language, @Nullable String language,
int accessibilityChannel) { int accessibilityChannel,
@Nullable String label
) {
return new Format(id, containerMimeType, sampleMimeType, codecs, bitrate, NO_VALUE, NO_VALUE, return new Format(id, containerMimeType, sampleMimeType, codecs, bitrate, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, null, NO_VALUE, null, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, null, NO_VALUE, null, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, NO_VALUE, selectionFlags, language, accessibilityChannel, NO_VALUE, NO_VALUE, NO_VALUE, selectionFlags, language, accessibilityChannel,
OFFSET_SAMPLE_RELATIVE, null, null, null); OFFSET_SAMPLE_RELATIVE, null, null, null, label);
} }
public static Format createTextSampleFormat( public static Format createTextSampleFormat(
...@@ -405,7 +414,7 @@ public final class Format implements Parcelable { ...@@ -405,7 +414,7 @@ public final class Format implements Parcelable {
return new Format(id, null, sampleMimeType, codecs, bitrate, NO_VALUE, NO_VALUE, NO_VALUE, return new Format(id, null, sampleMimeType, codecs, bitrate, NO_VALUE, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, NO_VALUE, null, NO_VALUE, null, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, null, NO_VALUE, null, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE,
NO_VALUE, selectionFlags, language, accessibilityChannel, subsampleOffsetUs, NO_VALUE, selectionFlags, language, accessibilityChannel, subsampleOffsetUs,
initializationData, drmInitData, null); initializationData, drmInitData, null, null);
} }
// Image. // Image.
...@@ -445,7 +454,8 @@ public final class Format implements Parcelable { ...@@ -445,7 +454,8 @@ public final class Format implements Parcelable {
OFFSET_SAMPLE_RELATIVE, OFFSET_SAMPLE_RELATIVE,
initializationData, initializationData,
drmInitData, drmInitData,
null); null,
null);
} }
// Generic. // Generic.
...@@ -461,14 +471,14 @@ public final class Format implements Parcelable { ...@@ -461,14 +471,14 @@ public final class Format implements Parcelable {
return new Format(id, containerMimeType, sampleMimeType, codecs, bitrate, NO_VALUE, NO_VALUE, return new Format(id, containerMimeType, sampleMimeType, codecs, bitrate, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, null, NO_VALUE, null, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, null, NO_VALUE, null, NO_VALUE, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, selectionFlags, language, NO_VALUE, OFFSET_SAMPLE_RELATIVE, null, null, NO_VALUE, NO_VALUE, selectionFlags, language, NO_VALUE, OFFSET_SAMPLE_RELATIVE, null, null,
null); null, null);
} }
public static Format createSampleFormat( public static Format createSampleFormat(
@Nullable String id, @Nullable String sampleMimeType, long subsampleOffsetUs) { @Nullable String id, @Nullable String sampleMimeType, long subsampleOffsetUs) {
return new Format(id, null, sampleMimeType, null, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, return new Format(id, null, sampleMimeType, null, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, NO_VALUE, null, NO_VALUE, null, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, null, NO_VALUE, null, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE,
NO_VALUE, 0, null, NO_VALUE, subsampleOffsetUs, null, null, null); NO_VALUE, 0, null, NO_VALUE, subsampleOffsetUs, null, null, null, null);
} }
public static Format createSampleFormat( public static Format createSampleFormat(
...@@ -479,7 +489,7 @@ public final class Format implements Parcelable { ...@@ -479,7 +489,7 @@ public final class Format implements Parcelable {
@Nullable DrmInitData drmInitData) { @Nullable DrmInitData drmInitData) {
return new Format(id, null, sampleMimeType, codecs, bitrate, NO_VALUE, NO_VALUE, NO_VALUE, return new Format(id, null, sampleMimeType, codecs, bitrate, NO_VALUE, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, NO_VALUE, null, NO_VALUE, null, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, null, NO_VALUE, null, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE,
NO_VALUE, 0, null, NO_VALUE, OFFSET_SAMPLE_RELATIVE, null, drmInitData, null); NO_VALUE, 0, null, NO_VALUE, OFFSET_SAMPLE_RELATIVE, null, drmInitData, null, null);
} }
/* package */ Format( /* package */ Format(
...@@ -508,7 +518,9 @@ public final class Format implements Parcelable { ...@@ -508,7 +518,9 @@ public final class Format implements Parcelable {
long subsampleOffsetUs, long subsampleOffsetUs,
@Nullable List<byte[]> initializationData, @Nullable List<byte[]> initializationData,
@Nullable DrmInitData drmInitData, @Nullable DrmInitData drmInitData,
@Nullable Metadata metadata) { @Nullable Metadata metadata,
@Nullable String label
) {
this.id = id; this.id = id;
this.containerMimeType = containerMimeType; this.containerMimeType = containerMimeType;
this.sampleMimeType = sampleMimeType; this.sampleMimeType = sampleMimeType;
...@@ -531,6 +543,7 @@ public final class Format implements Parcelable { ...@@ -531,6 +543,7 @@ public final class Format implements Parcelable {
this.encoderPadding = encoderPadding == Format.NO_VALUE ? 0 : encoderPadding; this.encoderPadding = encoderPadding == Format.NO_VALUE ? 0 : encoderPadding;
this.selectionFlags = selectionFlags; this.selectionFlags = selectionFlags;
this.language = language; this.language = language;
this.label = label;
this.accessibilityChannel = accessibilityChannel; this.accessibilityChannel = accessibilityChannel;
this.subsampleOffsetUs = subsampleOffsetUs; this.subsampleOffsetUs = subsampleOffsetUs;
this.initializationData = initializationData == null ? Collections.<byte[]>emptyList() this.initializationData = initializationData == null ? Collections.<byte[]>emptyList()
...@@ -563,6 +576,7 @@ public final class Format implements Parcelable { ...@@ -563,6 +576,7 @@ public final class Format implements Parcelable {
encoderPadding = in.readInt(); encoderPadding = in.readInt();
selectionFlags = in.readInt(); selectionFlags = in.readInt();
language = in.readString(); language = in.readString();
label = in.readString();
accessibilityChannel = in.readInt(); accessibilityChannel = in.readInt();
subsampleOffsetUs = in.readLong(); subsampleOffsetUs = in.readLong();
int initializationDataSize = in.readInt(); int initializationDataSize = in.readInt();
...@@ -579,7 +593,7 @@ public final class Format implements Parcelable { ...@@ -579,7 +593,7 @@ public final class Format implements Parcelable {
height, frameRate, rotationDegrees, pixelWidthHeightRatio, projectionData, stereoMode, height, frameRate, rotationDegrees, pixelWidthHeightRatio, projectionData, stereoMode,
colorInfo, channelCount, sampleRate, pcmEncoding, encoderDelay, encoderPadding, colorInfo, channelCount, sampleRate, pcmEncoding, encoderDelay, encoderPadding,
selectionFlags, language, accessibilityChannel, subsampleOffsetUs, initializationData, selectionFlags, language, accessibilityChannel, subsampleOffsetUs, initializationData,
drmInitData, metadata); drmInitData, metadata, label);
} }
public Format copyWithSubsampleOffsetUs(long subsampleOffsetUs) { public Format copyWithSubsampleOffsetUs(long subsampleOffsetUs) {
...@@ -587,7 +601,7 @@ public final class Format implements Parcelable { ...@@ -587,7 +601,7 @@ public final class Format implements Parcelable {
height, frameRate, rotationDegrees, pixelWidthHeightRatio, projectionData, stereoMode, height, frameRate, rotationDegrees, pixelWidthHeightRatio, projectionData, stereoMode,
colorInfo, channelCount, sampleRate, pcmEncoding, encoderDelay, encoderPadding, colorInfo, channelCount, sampleRate, pcmEncoding, encoderDelay, encoderPadding,
selectionFlags, language, accessibilityChannel, subsampleOffsetUs, initializationData, selectionFlags, language, accessibilityChannel, subsampleOffsetUs, initializationData,
drmInitData, metadata); drmInitData, metadata, label);
} }
public Format copyWithContainerInfo( public Format copyWithContainerInfo(
...@@ -603,7 +617,7 @@ public final class Format implements Parcelable { ...@@ -603,7 +617,7 @@ public final class Format implements Parcelable {
height, frameRate, rotationDegrees, pixelWidthHeightRatio, projectionData, stereoMode, height, frameRate, rotationDegrees, pixelWidthHeightRatio, projectionData, stereoMode,
colorInfo, channelCount, sampleRate, pcmEncoding, encoderDelay, encoderPadding, colorInfo, channelCount, sampleRate, pcmEncoding, encoderDelay, encoderPadding,
selectionFlags, language, accessibilityChannel, subsampleOffsetUs, initializationData, selectionFlags, language, accessibilityChannel, subsampleOffsetUs, initializationData,
drmInitData, metadata); drmInitData, metadata, label);
} }
@SuppressWarnings("ReferenceEquality") @SuppressWarnings("ReferenceEquality")
...@@ -618,13 +632,14 @@ public final class Format implements Parcelable { ...@@ -618,13 +632,14 @@ public final class Format implements Parcelable {
float frameRate = this.frameRate == NO_VALUE ? manifestFormat.frameRate : this.frameRate; float frameRate = this.frameRate == NO_VALUE ? manifestFormat.frameRate : this.frameRate;
@C.SelectionFlags int selectionFlags = this.selectionFlags | manifestFormat.selectionFlags; @C.SelectionFlags int selectionFlags = this.selectionFlags | manifestFormat.selectionFlags;
String language = this.language == null ? manifestFormat.language : this.language; String language = this.language == null ? manifestFormat.language : this.language;
DrmInitData drmInitData = String label = this.label == null ? manifestFormat.label : this.label;
DrmInitData.createSessionCreationData(manifestFormat.drmInitData, this.drmInitData); DrmInitData drmInitData =
DrmInitData.createSessionCreationData(manifestFormat.drmInitData, this.drmInitData);
return new Format(id, containerMimeType, sampleMimeType, codecs, bitrate, maxInputSize, width, return new Format(id, containerMimeType, sampleMimeType, codecs, bitrate, maxInputSize, width,
height, frameRate, rotationDegrees, pixelWidthHeightRatio, projectionData, stereoMode, height, frameRate, rotationDegrees, pixelWidthHeightRatio, projectionData, stereoMode,
colorInfo, channelCount, sampleRate, pcmEncoding, encoderDelay, encoderPadding, colorInfo, channelCount, sampleRate, pcmEncoding, encoderDelay, encoderPadding,
selectionFlags, language, accessibilityChannel, subsampleOffsetUs, initializationData, selectionFlags, language, accessibilityChannel, subsampleOffsetUs, initializationData,
drmInitData, metadata); drmInitData, metadata, label);
} }
public Format copyWithGaplessInfo(int encoderDelay, int encoderPadding) { public Format copyWithGaplessInfo(int encoderDelay, int encoderPadding) {
...@@ -632,7 +647,7 @@ public final class Format implements Parcelable { ...@@ -632,7 +647,7 @@ public final class Format implements Parcelable {
height, frameRate, rotationDegrees, pixelWidthHeightRatio, projectionData, stereoMode, height, frameRate, rotationDegrees, pixelWidthHeightRatio, projectionData, stereoMode,
colorInfo, channelCount, sampleRate, pcmEncoding, encoderDelay, encoderPadding, colorInfo, channelCount, sampleRate, pcmEncoding, encoderDelay, encoderPadding,
selectionFlags, language, accessibilityChannel, subsampleOffsetUs, initializationData, selectionFlags, language, accessibilityChannel, subsampleOffsetUs, initializationData,
drmInitData, metadata); drmInitData, metadata, label);
} }
public Format copyWithDrmInitData(@Nullable DrmInitData drmInitData) { public Format copyWithDrmInitData(@Nullable DrmInitData drmInitData) {
...@@ -640,7 +655,7 @@ public final class Format implements Parcelable { ...@@ -640,7 +655,7 @@ public final class Format implements Parcelable {
height, frameRate, rotationDegrees, pixelWidthHeightRatio, projectionData, stereoMode, height, frameRate, rotationDegrees, pixelWidthHeightRatio, projectionData, stereoMode,
colorInfo, channelCount, sampleRate, pcmEncoding, encoderDelay, encoderPadding, colorInfo, channelCount, sampleRate, pcmEncoding, encoderDelay, encoderPadding,
selectionFlags, language, accessibilityChannel, subsampleOffsetUs, initializationData, selectionFlags, language, accessibilityChannel, subsampleOffsetUs, initializationData,
drmInitData, metadata); drmInitData, metadata, label);
} }
public Format copyWithMetadata(@Nullable Metadata metadata) { public Format copyWithMetadata(@Nullable Metadata metadata) {
...@@ -648,7 +663,7 @@ public final class Format implements Parcelable { ...@@ -648,7 +663,7 @@ public final class Format implements Parcelable {
height, frameRate, rotationDegrees, pixelWidthHeightRatio, projectionData, stereoMode, height, frameRate, rotationDegrees, pixelWidthHeightRatio, projectionData, stereoMode,
colorInfo, channelCount, sampleRate, pcmEncoding, encoderDelay, encoderPadding, colorInfo, channelCount, sampleRate, pcmEncoding, encoderDelay, encoderPadding,
selectionFlags, language, accessibilityChannel, subsampleOffsetUs, initializationData, selectionFlags, language, accessibilityChannel, subsampleOffsetUs, initializationData,
drmInitData, metadata); drmInitData, metadata, label);
} }
public Format copyWithRotationDegrees(int rotationDegrees) { public Format copyWithRotationDegrees(int rotationDegrees) {
...@@ -656,7 +671,7 @@ public final class Format implements Parcelable { ...@@ -656,7 +671,7 @@ public final class Format implements Parcelable {
height, frameRate, rotationDegrees, pixelWidthHeightRatio, projectionData, stereoMode, height, frameRate, rotationDegrees, pixelWidthHeightRatio, projectionData, stereoMode,
colorInfo, channelCount, sampleRate, pcmEncoding, encoderDelay, encoderPadding, colorInfo, channelCount, sampleRate, pcmEncoding, encoderDelay, encoderPadding,
selectionFlags, language, accessibilityChannel, subsampleOffsetUs, initializationData, selectionFlags, language, accessibilityChannel, subsampleOffsetUs, initializationData,
drmInitData, metadata); drmInitData, metadata, label);
} }
/** /**
...@@ -782,6 +797,9 @@ public final class Format implements Parcelable { ...@@ -782,6 +797,9 @@ public final class Format implements Parcelable {
if (format.language != null) { if (format.language != null) {
builder.append(", language=").append(format.language); builder.append(", language=").append(format.language);
} }
if (format.label != null) {
builder.append(", label=").append(format.label);
}
return builder.toString(); return builder.toString();
} }
......
...@@ -248,6 +248,7 @@ public class DashManifestParser extends DefaultHandler ...@@ -248,6 +248,7 @@ public class DashManifestParser extends DefaultHandler
int audioSamplingRate = parseInt(xpp, "audioSamplingRate", Format.NO_VALUE); int audioSamplingRate = parseInt(xpp, "audioSamplingRate", Format.NO_VALUE);
String language = xpp.getAttributeValue(null, "lang"); String language = xpp.getAttributeValue(null, "lang");
String drmSchemeType = null; String drmSchemeType = null;
String label = xpp.getAttributeValue(null, "label");
ArrayList<SchemeData> drmSchemeDatas = new ArrayList<>(); ArrayList<SchemeData> drmSchemeDatas = new ArrayList<>();
ArrayList<Descriptor> inbandEventStreams = new ArrayList<>(); ArrayList<Descriptor> inbandEventStreams = new ArrayList<>();
ArrayList<Descriptor> accessibilityDescriptors = new ArrayList<>(); ArrayList<Descriptor> accessibilityDescriptors = new ArrayList<>();
...@@ -285,7 +286,7 @@ public class DashManifestParser extends DefaultHandler ...@@ -285,7 +286,7 @@ public class DashManifestParser extends DefaultHandler
} else if (XmlPullParserUtil.isStartTag(xpp, "Representation")) { } else if (XmlPullParserUtil.isStartTag(xpp, "Representation")) {
RepresentationInfo representationInfo = parseRepresentation(xpp, baseUrl, mimeType, codecs, RepresentationInfo representationInfo = parseRepresentation(xpp, baseUrl, mimeType, codecs,
width, height, frameRate, audioChannels, audioSamplingRate, language, width, height, frameRate, audioChannels, audioSamplingRate, language,
selectionFlags, accessibilityDescriptors, segmentBase); selectionFlags, accessibilityDescriptors, segmentBase, label);
contentType = checkContentTypeConsistency(contentType, contentType = checkContentTypeConsistency(contentType,
getContentType(representationInfo.format)); getContentType(representationInfo.format));
representationInfos.add(representationInfo); representationInfos.add(representationInfo);
...@@ -451,7 +452,7 @@ public class DashManifestParser extends DefaultHandler ...@@ -451,7 +452,7 @@ public class DashManifestParser extends DefaultHandler
int adaptationSetHeight, float adaptationSetFrameRate, int adaptationSetAudioChannels, int adaptationSetHeight, float adaptationSetFrameRate, int adaptationSetAudioChannels,
int adaptationSetAudioSamplingRate, String adaptationSetLanguage, int adaptationSetAudioSamplingRate, String adaptationSetLanguage,
@C.SelectionFlags int adaptationSetSelectionFlags, @C.SelectionFlags int adaptationSetSelectionFlags,
List<Descriptor> adaptationSetAccessibilityDescriptors, SegmentBase segmentBase) List<Descriptor> adaptationSetAccessibilityDescriptors, SegmentBase segmentBase, String label)
throws XmlPullParserException, IOException { throws XmlPullParserException, IOException {
String id = xpp.getAttributeValue(null, "id"); String id = xpp.getAttributeValue(null, "id");
int bandwidth = parseInt(xpp, "bandwidth", Format.NO_VALUE); int bandwidth = parseInt(xpp, "bandwidth", Format.NO_VALUE);
...@@ -501,7 +502,7 @@ public class DashManifestParser extends DefaultHandler ...@@ -501,7 +502,7 @@ public class DashManifestParser extends DefaultHandler
Format format = buildFormat(id, mimeType, width, height, frameRate, audioChannels, Format format = buildFormat(id, mimeType, width, height, frameRate, audioChannels,
audioSamplingRate, bandwidth, adaptationSetLanguage, adaptationSetSelectionFlags, audioSamplingRate, bandwidth, adaptationSetLanguage, adaptationSetSelectionFlags,
adaptationSetAccessibilityDescriptors, codecs, supplementalProperties); adaptationSetAccessibilityDescriptors, codecs, supplementalProperties, label);
segmentBase = segmentBase != null ? segmentBase : new SingleSegmentBase(); segmentBase = segmentBase != null ? segmentBase : new SingleSegmentBase();
return new RepresentationInfo(format, baseUrl, segmentBase, drmSchemeType, drmSchemeDatas, return new RepresentationInfo(format, baseUrl, segmentBase, drmSchemeType, drmSchemeDatas,
...@@ -511,7 +512,7 @@ public class DashManifestParser extends DefaultHandler ...@@ -511,7 +512,7 @@ public class DashManifestParser extends DefaultHandler
protected Format buildFormat(String id, String containerMimeType, int width, int height, protected Format buildFormat(String id, String containerMimeType, int width, int height,
float frameRate, int audioChannels, int audioSamplingRate, int bitrate, String language, float frameRate, int audioChannels, int audioSamplingRate, int bitrate, String language,
@C.SelectionFlags int selectionFlags, List<Descriptor> accessibilityDescriptors, @C.SelectionFlags int selectionFlags, List<Descriptor> accessibilityDescriptors,
String codecs, List<Descriptor> supplementalProperties) { String codecs, List<Descriptor> supplementalProperties, String label) {
String sampleMimeType = getSampleMimeType(containerMimeType, codecs); String sampleMimeType = getSampleMimeType(containerMimeType, codecs);
if (sampleMimeType != null) { if (sampleMimeType != null) {
if (MimeTypes.AUDIO_E_AC3.equals(sampleMimeType)) { if (MimeTypes.AUDIO_E_AC3.equals(sampleMimeType)) {
...@@ -522,7 +523,7 @@ public class DashManifestParser extends DefaultHandler ...@@ -522,7 +523,7 @@ public class DashManifestParser extends DefaultHandler
bitrate, width, height, frameRate, null, selectionFlags); bitrate, width, height, frameRate, null, selectionFlags);
} else if (MimeTypes.isAudio(sampleMimeType)) { } else if (MimeTypes.isAudio(sampleMimeType)) {
return Format.createAudioContainerFormat(id, containerMimeType, sampleMimeType, codecs, return Format.createAudioContainerFormat(id, containerMimeType, sampleMimeType, codecs,
bitrate, audioChannels, audioSamplingRate, null, selectionFlags, language); bitrate, audioChannels, audioSamplingRate, null, selectionFlags, language, label);
} else if (mimeTypeIsRawText(sampleMimeType)) { } else if (mimeTypeIsRawText(sampleMimeType)) {
int accessibilityChannel; int accessibilityChannel;
if (MimeTypes.APPLICATION_CEA608.equals(sampleMimeType)) { if (MimeTypes.APPLICATION_CEA608.equals(sampleMimeType)) {
...@@ -533,7 +534,7 @@ public class DashManifestParser extends DefaultHandler ...@@ -533,7 +534,7 @@ public class DashManifestParser extends DefaultHandler
accessibilityChannel = Format.NO_VALUE; accessibilityChannel = Format.NO_VALUE;
} }
return Format.createTextContainerFormat(id, containerMimeType, sampleMimeType, codecs, return Format.createTextContainerFormat(id, containerMimeType, sampleMimeType, codecs,
bitrate, selectionFlags, language, accessibilityChannel); bitrate, selectionFlags, language, accessibilityChannel, label);
} }
} }
return Format.createContainerFormat(id, containerMimeType, sampleMimeType, codecs, bitrate, return Format.createContainerFormat(id, containerMimeType, sampleMimeType, codecs, bitrate,
......
...@@ -288,7 +288,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli ...@@ -288,7 +288,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
String sampleMimeType = codecs != null ? MimeTypes.getMediaMimeType(codecs) : null; String sampleMimeType = codecs != null ? MimeTypes.getMediaMimeType(codecs) : null;
format = Format.createAudioContainerFormat(id, MimeTypes.APPLICATION_M3U8, sampleMimeType, format = Format.createAudioContainerFormat(id, MimeTypes.APPLICATION_M3U8, sampleMimeType,
codecs, Format.NO_VALUE, Format.NO_VALUE, Format.NO_VALUE, null, selectionFlags, codecs, Format.NO_VALUE, Format.NO_VALUE, Format.NO_VALUE, null, selectionFlags,
language); language, id);
if (uri == null) { if (uri == null) {
muxedAudioFormat = format; muxedAudioFormat = format;
} else { } else {
...@@ -297,7 +297,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli ...@@ -297,7 +297,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
break; break;
case TYPE_SUBTITLES: case TYPE_SUBTITLES:
format = Format.createTextContainerFormat(id, MimeTypes.APPLICATION_M3U8, format = Format.createTextContainerFormat(id, MimeTypes.APPLICATION_M3U8,
MimeTypes.TEXT_VTT, null, Format.NO_VALUE, selectionFlags, language); MimeTypes.TEXT_VTT, null, Format.NO_VALUE, selectionFlags, language, id);
subtitles.add(new HlsMasterPlaylist.HlsUrl(uri, format)); subtitles.add(new HlsMasterPlaylist.HlsUrl(uri, format));
break; break;
case TYPE_CLOSED_CAPTIONS: case TYPE_CLOSED_CAPTIONS:
...@@ -315,7 +315,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli ...@@ -315,7 +315,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
muxedCaptionFormats = new ArrayList<>(); muxedCaptionFormats = new ArrayList<>();
} }
muxedCaptionFormats.add(Format.createTextContainerFormat(id, null, mimeType, null, muxedCaptionFormats.add(Format.createTextContainerFormat(id, null, mimeType, null,
Format.NO_VALUE, selectionFlags, language, accessibilityChannel)); Format.NO_VALUE, selectionFlags, language, accessibilityChannel, id));
break; break;
default: default:
// Do nothing. // Do nothing.
......
...@@ -603,6 +603,7 @@ public class SsManifestParser implements ParsingLoadable.Parser<SsManifest> { ...@@ -603,6 +603,7 @@ public class SsManifestParser implements ParsingLoadable.Parser<SsManifest> {
private static final String KEY_FOUR_CC = "FourCC"; private static final String KEY_FOUR_CC = "FourCC";
private static final String KEY_TYPE = "Type"; private static final String KEY_TYPE = "Type";
private static final String KEY_LANGUAGE = "Language"; private static final String KEY_LANGUAGE = "Language";
private static final String KEY_NAME = "Name";
private static final String KEY_MAX_WIDTH = "MaxWidth"; private static final String KEY_MAX_WIDTH = "MaxWidth";
private static final String KEY_MAX_HEIGHT = "MaxHeight"; private static final String KEY_MAX_HEIGHT = "MaxHeight";
...@@ -637,12 +638,14 @@ public class SsManifestParser implements ParsingLoadable.Parser<SsManifest> { ...@@ -637,12 +638,14 @@ public class SsManifestParser implements ParsingLoadable.Parser<SsManifest> {
CodecSpecificDataUtil.buildAacLcAudioSpecificConfig(samplingRate, channels)); CodecSpecificDataUtil.buildAacLcAudioSpecificConfig(samplingRate, channels));
} }
String language = (String) getNormalizedAttribute(KEY_LANGUAGE); String language = (String) getNormalizedAttribute(KEY_LANGUAGE);
String label = (String) getNormalizedAttribute(KEY_NAME);
format = Format.createAudioContainerFormat(id, MimeTypes.AUDIO_MP4, sampleMimeType, null, format = Format.createAudioContainerFormat(id, MimeTypes.AUDIO_MP4, sampleMimeType, null,
bitrate, channels, samplingRate, codecSpecificData, 0, language); bitrate, channels, samplingRate, codecSpecificData, 0, language, label);
} else if (type == C.TRACK_TYPE_TEXT) { } else if (type == C.TRACK_TYPE_TEXT) {
String language = (String) getNormalizedAttribute(KEY_LANGUAGE); String language = (String) getNormalizedAttribute(KEY_LANGUAGE);
String label = (String) getNormalizedAttribute(KEY_NAME);
format = Format.createTextContainerFormat(id, MimeTypes.APPLICATION_MP4, sampleMimeType, format = Format.createTextContainerFormat(id, MimeTypes.APPLICATION_MP4, sampleMimeType,
null, bitrate, 0, language); null, bitrate, 0, language, label);
} else { } else {
format = Format.createContainerFormat(id, MimeTypes.APPLICATION_MP4, sampleMimeType, null, format = Format.createContainerFormat(id, MimeTypes.APPLICATION_MP4, sampleMimeType, null,
bitrate, 0, null); bitrate, 0, null);
......
...@@ -88,6 +88,9 @@ public class DefaultTrackNameProvider implements TrackNameProvider { ...@@ -88,6 +88,9 @@ public class DefaultTrackNameProvider implements TrackNameProvider {
} }
private String buildLanguageString(Format format) { private String buildLanguageString(Format format) {
if ( !TextUtils.isEmpty(format.label) ){
return format.label;
}
String language = format.language; String language = format.language;
return TextUtils.isEmpty(language) || C.LANGUAGE_UNDETERMINED.equals(language) return TextUtils.isEmpty(language) || C.LANGUAGE_UNDETERMINED.equals(language)
? "" ? ""
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment