Skip to content

Commit

Permalink
HLS: Merge muxedAudioFormat into primary audio tracks
Browse files Browse the repository at this point in the history
Issue: google/ExoPlayer#9608
#minor-release
PiperOrigin-RevId: 410236626
  • Loading branch information
ojw28 authored and icbaker committed Nov 19, 2021
1 parent f10b705 commit e12bfea
Showing 1 changed file with 20 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1392,23 +1392,31 @@ private void buildTracksFromSampleStreams() {
Format sampleFormat = Assertions.checkStateNotNull(sampleQueues[i].getUpstreamFormat());
if (i == primaryExtractorTrackIndex) {
Format[] formats = new Format[chunkSourceTrackCount];
if (chunkSourceTrackCount == 1) {
formats[0] = sampleFormat.withManifestFormatInfo(chunkSourceTrackGroup.getFormat(0));
} else {
for (int j = 0; j < chunkSourceTrackCount; j++) {
formats[j] = deriveFormat(chunkSourceTrackGroup.getFormat(j), sampleFormat, true);
for (int j = 0; j < chunkSourceTrackCount; j++) {
Format playlistFormat = chunkSourceTrackGroup.getFormat(j);
if (primaryExtractorTrackType == C.TRACK_TYPE_AUDIO && muxedAudioFormat != null) {
playlistFormat = playlistFormat.withManifestFormatInfo(muxedAudioFormat);
}
// If there's only a single variant (chunkSourceTrackCount == 1) then we can safely
// retain all fields from sampleFormat. Else we need to use deriveFormat to retain only
// the fields that will be the same for all variants.
formats[j] =
chunkSourceTrackCount == 1
? sampleFormat.withManifestFormatInfo(playlistFormat)
: deriveFormat(playlistFormat, sampleFormat, /* propagateBitrates= */ true);
}
trackGroups[i] = new TrackGroup(formats);
primaryTrackGroupIndex = i;
} else {
@Nullable
Format trackFormat =
Format playlistFormat =
primaryExtractorTrackType == C.TRACK_TYPE_VIDEO
&& MimeTypes.isAudio(sampleFormat.sampleMimeType)
? muxedAudioFormat
: null;
trackGroups[i] = new TrackGroup(deriveFormat(trackFormat, sampleFormat, false));
trackGroups[i] =
new TrackGroup(
deriveFormat(playlistFormat, sampleFormat, /* propagateBitrates= */ false));
}
}
this.trackGroups = createTrackGroupArrayWithDrmInfo(trackGroups);
Expand Down Expand Up @@ -1496,8 +1504,12 @@ private static int getTrackTypeScore(int trackType) {
* sample format that may have been obtained from a chunk belonging to a different track in the
* same track group.
*
* <p>Note: Since the sample format may have been obtained from a chunk belonging to a different
* track, it should not be used as a source for data that may vary between tracks.
*
* @param playlistFormat The format information obtained from the master playlist.
* @param sampleFormat The format information obtained from the samples.
* @param sampleFormat The format information obtained from samples within a chunk. The chunk may
* belong to a different track in the same track group.
* @param propagateBitrates Whether the bitrates from the playlist format should be included in
* the derived format.
* @return The derived track format.
Expand Down

0 comments on commit e12bfea

Please sign in to comment.