mirror of
https://github.com/androidx/media.git
synced 2025-05-09 00:20:45 +08:00
Support signalling of last segment number via supplemental descriptor in mpd
This commit is contained in:
parent
835d1f3afe
commit
2091aa5cf9
@ -42,6 +42,7 @@ import com.google.android.exoplayer2.source.chunk.SingleSampleMediaChunk;
|
|||||||
import com.google.android.exoplayer2.source.dash.PlayerEmsgHandler.PlayerTrackEmsgHandler;
|
import com.google.android.exoplayer2.source.dash.PlayerEmsgHandler.PlayerTrackEmsgHandler;
|
||||||
import com.google.android.exoplayer2.source.dash.manifest.AdaptationSet;
|
import com.google.android.exoplayer2.source.dash.manifest.AdaptationSet;
|
||||||
import com.google.android.exoplayer2.source.dash.manifest.DashManifest;
|
import com.google.android.exoplayer2.source.dash.manifest.DashManifest;
|
||||||
|
import com.google.android.exoplayer2.source.dash.manifest.Descriptor;
|
||||||
import com.google.android.exoplayer2.source.dash.manifest.RangedUri;
|
import com.google.android.exoplayer2.source.dash.manifest.RangedUri;
|
||||||
import com.google.android.exoplayer2.source.dash.manifest.Representation;
|
import com.google.android.exoplayer2.source.dash.manifest.Representation;
|
||||||
import com.google.android.exoplayer2.trackselection.TrackSelection;
|
import com.google.android.exoplayer2.trackselection.TrackSelection;
|
||||||
@ -325,10 +326,34 @@ public class DefaultDashChunkSource implements DashChunkSource {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<Descriptor> listDescriptors;
|
||||||
|
Integer lastSegmentNumberSchemeIdUri = Integer.MAX_VALUE;
|
||||||
|
String sampleMimeType = trackSelection.getFormat(periodIndex).sampleMimeType;
|
||||||
|
|
||||||
|
if (sampleMimeType.contains("video") || sampleMimeType.contains("audio")) {
|
||||||
|
|
||||||
|
int track_type = sampleMimeType.contains("video")? C.TRACK_TYPE_VIDEO : C.TRACK_TYPE_AUDIO;
|
||||||
|
|
||||||
|
if (!manifest.getPeriod(periodIndex).adaptationSets.get(manifest.getPeriod(periodIndex)
|
||||||
|
.getAdaptationSetIndex(track_type)).supplementalProperties.isEmpty()) {
|
||||||
|
listDescriptors = manifest.getPeriod(periodIndex).adaptationSets
|
||||||
|
.get(manifest.getPeriod(periodIndex).getAdaptationSetIndex(track_type))
|
||||||
|
.supplementalProperties;
|
||||||
|
for ( Descriptor descriptor: listDescriptors ) {
|
||||||
|
if (descriptor.schemeIdUri.equalsIgnoreCase
|
||||||
|
("http://dashif.org/guidelines/last-segment-number")) {
|
||||||
|
lastSegmentNumberSchemeIdUri = Integer.valueOf(descriptor.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
long firstAvailableSegmentNum =
|
long firstAvailableSegmentNum =
|
||||||
representationHolder.getFirstAvailableSegmentNum(manifest, periodIndex, nowUnixTimeUs);
|
representationHolder.getFirstAvailableSegmentNum(manifest, periodIndex, nowUnixTimeUs);
|
||||||
long lastAvailableSegmentNum =
|
long lastAvailableSegmentNum =
|
||||||
representationHolder.getLastAvailableSegmentNum(manifest, periodIndex, nowUnixTimeUs);
|
Math.min(representationHolder.
|
||||||
|
getLastAvailableSegmentNum(manifest, periodIndex, nowUnixTimeUs),
|
||||||
|
lastSegmentNumberSchemeIdUri);
|
||||||
|
|
||||||
updateLiveEdgeTimeUs(representationHolder, lastAvailableSegmentNum);
|
updateLiveEdgeTimeUs(representationHolder, lastAvailableSegmentNum);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user