From 9182b413dc6e14ed06817d8ad4ae65ce01d85f1b Mon Sep 17 00:00:00 2001 From: rohks Date: Tue, 8 Apr 2025 10:19:53 -0700 Subject: [PATCH] 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 --- RELEASENOTES.md | 3 +++ .../java/androidx/media3/exoplayer/hls/HlsChunkSource.java | 3 ++- .../main/java/androidx/media3/exoplayer/hls/HlsMediaChunk.java | 3 +-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 1557f33dd3..88b8b15bf1 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -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: diff --git a/libraries/exoplayer_hls/src/main/java/androidx/media3/exoplayer/hls/HlsChunkSource.java b/libraries/exoplayer_hls/src/main/java/androidx/media3/exoplayer/hls/HlsChunkSource.java index 8ba3827899..2fc2df2480 100644 --- a/libraries/exoplayer_hls/src/main/java/androidx/media3/exoplayer/hls/HlsChunkSource.java +++ b/libraries/exoplayer_hls/src/main/java/androidx/media3/exoplayer/hls/HlsChunkSource.java @@ -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 diff --git a/libraries/exoplayer_hls/src/main/java/androidx/media3/exoplayer/hls/HlsMediaChunk.java b/libraries/exoplayer_hls/src/main/java/androidx/media3/exoplayer/hls/HlsMediaChunk.java index 49b71b4ee9..0c730e5e6b 100644 --- a/libraries/exoplayer_hls/src/main/java/androidx/media3/exoplayer/hls/HlsMediaChunk.java +++ b/libraries/exoplayer_hls/src/main/java/androidx/media3/exoplayer/hls/HlsMediaChunk.java @@ -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); }