Commit 01131747 by tonihei Committed by Rohit Singh

Make DefaultDashChunkSource more robust against empty segment timelines

Segment timelines are technically allowed to be empty, but not all places
add the necessary checks.

Issue: google/ExoPlayer#11014
PiperOrigin-RevId: 514722205
parent d83b4a35
...@@ -234,9 +234,12 @@ public class DefaultDashChunkSource implements DashChunkSource { ...@@ -234,9 +234,12 @@ public class DefaultDashChunkSource implements DashChunkSource {
// Segments are aligned across representations, so any segment index will do. // Segments are aligned across representations, so any segment index will do.
for (RepresentationHolder representationHolder : representationHolders) { for (RepresentationHolder representationHolder : representationHolders) {
if (representationHolder.segmentIndex != null) { if (representationHolder.segmentIndex != null) {
long segmentCount = representationHolder.getSegmentCount();
if (segmentCount == 0) {
continue;
}
long segmentNum = representationHolder.getSegmentNum(positionUs); long segmentNum = representationHolder.getSegmentNum(positionUs);
long firstSyncUs = representationHolder.getSegmentStartTimeUs(segmentNum); long firstSyncUs = representationHolder.getSegmentStartTimeUs(segmentNum);
long segmentCount = representationHolder.getSegmentCount();
long secondSyncUs = long secondSyncUs =
firstSyncUs < positionUs firstSyncUs < positionUs
&& (segmentCount == DashSegmentIndex.INDEX_UNBOUNDED && (segmentCount == DashSegmentIndex.INDEX_UNBOUNDED
...@@ -592,7 +595,7 @@ public class DefaultDashChunkSource implements DashChunkSource { ...@@ -592,7 +595,7 @@ public class DefaultDashChunkSource implements DashChunkSource {
} }
private long getAvailableLiveDurationUs(long nowUnixTimeUs, long playbackPositionUs) { private long getAvailableLiveDurationUs(long nowUnixTimeUs, long playbackPositionUs) {
if (!manifest.dynamic) { if (!manifest.dynamic || representationHolders[0].getSegmentCount() == 0) {
return C.TIME_UNSET; return C.TIME_UNSET;
} }
long lastSegmentNum = representationHolders[0].getLastAvailableSegmentNum(nowUnixTimeUs); long lastSegmentNum = representationHolders[0].getLastAvailableSegmentNum(nowUnixTimeUs);
......
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