Ensure chunk duration is set in CmcdData for HLS media

Previously, encrypted media segments did not have the chunk duration set,
causing an assertion failure during `CmcdData` creation. With this change,
the chunk duration is always set, while `CmcdData` ensures it is applied
only for media chunks.

Issue: androidx/media#2312
PiperOrigin-RevId: 745196718
This commit is contained in:
rohks 2025-04-08 10:19:53 -07:00 committed by Copybara-Service
parent e11a8a1b19
commit 9182b413dc
3 changed files with 6 additions and 3 deletions

View File

@ -80,6 +80,9 @@
* Cronet extension:
* RTMP extension:
* HLS extension:
* Fix issue where chunk duration wasn't set in `CmcdData` for HLS media,
causing an assertion failure when processing encrypted media segments
([#2312](https://github.com/androidx/media/issues/2312)).
* DASH extension:
* Smooth Streaming extension:
* RTSP extension:

View File

@ -517,7 +517,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
.setPlaybackRate(loadingInfo.playbackSpeed)
.setIsLive(!playlist.hasEndTag)
.setDidRebuffer(loadingInfo.rebufferedSince(lastChunkRequestRealtimeMs))
.setIsBufferEmpty(queue.isEmpty());
.setIsBufferEmpty(queue.isEmpty())
.setChunkDurationUs(segmentBaseHolder.segmentBase.durationUs);
long nextMediaSequence =
segmentBaseHolder.partIndex == C.INDEX_UNSET
? segmentBaseHolder.mediaSequence + 1

View File

@ -112,8 +112,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
.setFlags(segmentBaseHolder.isPreload ? FLAG_MIGHT_NOT_USE_FULL_NETWORK_SPEED : 0)
.build();
if (cmcdDataFactory != null) {
CmcdData cmcdData =
cmcdDataFactory.setChunkDurationUs(mediaSegment.durationUs).createCmcdData();
CmcdData cmcdData = cmcdDataFactory.createCmcdData();
dataSpec = cmcdData.addToDataSpec(dataSpec);
}