mirror of
https://github.com/samsonjs/media.git
synced 2026-03-27 09:45:47 +00:00
Fix onLoad* event media times for multi-period case
------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=137932100
This commit is contained in:
parent
488c2d8270
commit
7b3690a0a6
3 changed files with 37 additions and 20 deletions
|
|
@ -15,8 +15,6 @@
|
|||
*/
|
||||
package com.google.android.exoplayer2.source;
|
||||
|
||||
import static com.google.android.exoplayer2.C.usToMs;
|
||||
|
||||
import android.os.Handler;
|
||||
import android.os.SystemClock;
|
||||
import com.google.android.exoplayer2.C;
|
||||
|
|
@ -174,10 +172,21 @@ public interface AdaptiveMediaSourceEventListener {
|
|||
|
||||
private final Handler handler;
|
||||
private final AdaptiveMediaSourceEventListener listener;
|
||||
private final long mediaTimeOffsetMs;
|
||||
|
||||
public EventDispatcher(Handler handler, AdaptiveMediaSourceEventListener listener) {
|
||||
this(handler, listener, 0);
|
||||
}
|
||||
|
||||
public EventDispatcher(Handler handler, AdaptiveMediaSourceEventListener listener,
|
||||
long mediaTimeOffsetMs) {
|
||||
this.handler = listener != null ? Assertions.checkNotNull(handler) : null;
|
||||
this.listener = listener;
|
||||
this.mediaTimeOffsetMs = mediaTimeOffsetMs;
|
||||
}
|
||||
|
||||
public EventDispatcher copyWithMediaTimeOffsetMs(long mediaTimeOffsetMs) {
|
||||
return new EventDispatcher(handler, listener, mediaTimeOffsetMs);
|
||||
}
|
||||
|
||||
public void loadStarted(DataSpec dataSpec, int dataType, long elapsedRealtimeMs) {
|
||||
|
|
@ -193,8 +202,8 @@ public interface AdaptiveMediaSourceEventListener {
|
|||
@Override
|
||||
public void run() {
|
||||
listener.onLoadStarted(dataSpec, dataType, trackType, trackFormat, trackSelectionReason,
|
||||
trackSelectionData, usToMs(mediaStartTimeUs), usToMs(mediaEndTimeUs),
|
||||
elapsedRealtimeMs);
|
||||
trackSelectionData, adjustMediaTime(mediaStartTimeUs),
|
||||
adjustMediaTime(mediaEndTimeUs), elapsedRealtimeMs);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -215,8 +224,8 @@ public interface AdaptiveMediaSourceEventListener {
|
|||
@Override
|
||||
public void run() {
|
||||
listener.onLoadCompleted(dataSpec, dataType, trackType, trackFormat,
|
||||
trackSelectionReason, trackSelectionData, usToMs(mediaStartTimeUs),
|
||||
usToMs(mediaEndTimeUs), elapsedRealtimeMs, loadDurationMs, bytesLoaded);
|
||||
trackSelectionReason, trackSelectionData, adjustMediaTime(mediaStartTimeUs),
|
||||
adjustMediaTime(mediaEndTimeUs), elapsedRealtimeMs, loadDurationMs, bytesLoaded);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -237,8 +246,8 @@ public interface AdaptiveMediaSourceEventListener {
|
|||
@Override
|
||||
public void run() {
|
||||
listener.onLoadCanceled(dataSpec, dataType, trackType, trackFormat,
|
||||
trackSelectionReason, trackSelectionData, usToMs(mediaStartTimeUs),
|
||||
usToMs(mediaEndTimeUs), elapsedRealtimeMs, loadDurationMs, bytesLoaded);
|
||||
trackSelectionReason, trackSelectionData, adjustMediaTime(mediaStartTimeUs),
|
||||
adjustMediaTime(mediaEndTimeUs), elapsedRealtimeMs, loadDurationMs, bytesLoaded);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -261,8 +270,9 @@ public interface AdaptiveMediaSourceEventListener {
|
|||
@Override
|
||||
public void run() {
|
||||
listener.onLoadError(dataSpec, dataType, trackType, trackFormat, trackSelectionReason,
|
||||
trackSelectionData, usToMs(mediaStartTimeUs), usToMs(mediaEndTimeUs),
|
||||
elapsedRealtimeMs, loadDurationMs, bytesLoaded, error, wasCanceled);
|
||||
trackSelectionData, adjustMediaTime(mediaStartTimeUs),
|
||||
adjustMediaTime(mediaEndTimeUs), elapsedRealtimeMs, loadDurationMs, bytesLoaded,
|
||||
error, wasCanceled);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -274,8 +284,8 @@ public interface AdaptiveMediaSourceEventListener {
|
|||
handler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
listener.onUpstreamDiscarded(trackType, usToMs(mediaStartTimeUs),
|
||||
usToMs(mediaEndTimeUs));
|
||||
listener.onUpstreamDiscarded(trackType, adjustMediaTime(mediaStartTimeUs),
|
||||
adjustMediaTime(mediaEndTimeUs));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -289,12 +299,17 @@ public interface AdaptiveMediaSourceEventListener {
|
|||
@Override
|
||||
public void run() {
|
||||
listener.onDownstreamFormatChanged(trackType, trackFormat, trackSelectionReason,
|
||||
trackSelectionData, usToMs(mediaTimeUs));
|
||||
trackSelectionData, adjustMediaTime(mediaTimeUs));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private long adjustMediaTime(long mediaTimeUs) {
|
||||
long mediaTimeMs = C.usToMs(mediaTimeUs);
|
||||
return mediaTimeMs == C.TIME_UNSET ? C.TIME_UNSET : mediaTimeOffsetMs + mediaTimeMs;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -170,10 +170,12 @@ public final class DashMediaSource implements MediaSource {
|
|||
}
|
||||
|
||||
@Override
|
||||
public MediaPeriod createPeriod(int index, Allocator allocator, long positionUs) {
|
||||
DashMediaPeriod mediaPeriod = new DashMediaPeriod(firstPeriodId + index, manifest, index,
|
||||
chunkSourceFactory, minLoadableRetryCount, eventDispatcher, elapsedRealtimeOffsetMs, loader,
|
||||
allocator);
|
||||
public MediaPeriod createPeriod(int periodIndex, Allocator allocator, long positionUs) {
|
||||
EventDispatcher periodEventDispatcher = eventDispatcher.copyWithMediaTimeOffsetMs(
|
||||
manifest.getPeriod(periodIndex).startMs);
|
||||
DashMediaPeriod mediaPeriod = new DashMediaPeriod(firstPeriodId + periodIndex, manifest,
|
||||
periodIndex, chunkSourceFactory, minLoadableRetryCount, periodEventDispatcher,
|
||||
elapsedRealtimeOffsetMs, loader, allocator);
|
||||
periodsById.put(mediaPeriod.id, mediaPeriod);
|
||||
return mediaPeriod;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,12 +41,12 @@ public class Period {
|
|||
|
||||
/**
|
||||
* @param id The period identifier. May be null.
|
||||
* @param start The start time of the period in milliseconds.
|
||||
* @param startMs The start time of the period in milliseconds.
|
||||
* @param adaptationSets The adaptation sets belonging to the period.
|
||||
*/
|
||||
public Period(String id, long start, List<AdaptationSet> adaptationSets) {
|
||||
public Period(String id, long startMs, List<AdaptationSet> adaptationSets) {
|
||||
this.id = id;
|
||||
this.startMs = start;
|
||||
this.startMs = startMs;
|
||||
this.adaptationSets = Collections.unmodifiableList(adaptationSets);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue