mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +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;
|
package com.google.android.exoplayer2.source;
|
||||||
|
|
||||||
import static com.google.android.exoplayer2.C.usToMs;
|
|
||||||
|
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import com.google.android.exoplayer2.C;
|
import com.google.android.exoplayer2.C;
|
||||||
|
|
@ -174,10 +172,21 @@ public interface AdaptiveMediaSourceEventListener {
|
||||||
|
|
||||||
private final Handler handler;
|
private final Handler handler;
|
||||||
private final AdaptiveMediaSourceEventListener listener;
|
private final AdaptiveMediaSourceEventListener listener;
|
||||||
|
private final long mediaTimeOffsetMs;
|
||||||
|
|
||||||
public EventDispatcher(Handler handler, AdaptiveMediaSourceEventListener listener) {
|
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.handler = listener != null ? Assertions.checkNotNull(handler) : null;
|
||||||
this.listener = listener;
|
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) {
|
public void loadStarted(DataSpec dataSpec, int dataType, long elapsedRealtimeMs) {
|
||||||
|
|
@ -193,8 +202,8 @@ public interface AdaptiveMediaSourceEventListener {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
listener.onLoadStarted(dataSpec, dataType, trackType, trackFormat, trackSelectionReason,
|
listener.onLoadStarted(dataSpec, dataType, trackType, trackFormat, trackSelectionReason,
|
||||||
trackSelectionData, usToMs(mediaStartTimeUs), usToMs(mediaEndTimeUs),
|
trackSelectionData, adjustMediaTime(mediaStartTimeUs),
|
||||||
elapsedRealtimeMs);
|
adjustMediaTime(mediaEndTimeUs), elapsedRealtimeMs);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -215,8 +224,8 @@ public interface AdaptiveMediaSourceEventListener {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
listener.onLoadCompleted(dataSpec, dataType, trackType, trackFormat,
|
listener.onLoadCompleted(dataSpec, dataType, trackType, trackFormat,
|
||||||
trackSelectionReason, trackSelectionData, usToMs(mediaStartTimeUs),
|
trackSelectionReason, trackSelectionData, adjustMediaTime(mediaStartTimeUs),
|
||||||
usToMs(mediaEndTimeUs), elapsedRealtimeMs, loadDurationMs, bytesLoaded);
|
adjustMediaTime(mediaEndTimeUs), elapsedRealtimeMs, loadDurationMs, bytesLoaded);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -237,8 +246,8 @@ public interface AdaptiveMediaSourceEventListener {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
listener.onLoadCanceled(dataSpec, dataType, trackType, trackFormat,
|
listener.onLoadCanceled(dataSpec, dataType, trackType, trackFormat,
|
||||||
trackSelectionReason, trackSelectionData, usToMs(mediaStartTimeUs),
|
trackSelectionReason, trackSelectionData, adjustMediaTime(mediaStartTimeUs),
|
||||||
usToMs(mediaEndTimeUs), elapsedRealtimeMs, loadDurationMs, bytesLoaded);
|
adjustMediaTime(mediaEndTimeUs), elapsedRealtimeMs, loadDurationMs, bytesLoaded);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -261,8 +270,9 @@ public interface AdaptiveMediaSourceEventListener {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
listener.onLoadError(dataSpec, dataType, trackType, trackFormat, trackSelectionReason,
|
listener.onLoadError(dataSpec, dataType, trackType, trackFormat, trackSelectionReason,
|
||||||
trackSelectionData, usToMs(mediaStartTimeUs), usToMs(mediaEndTimeUs),
|
trackSelectionData, adjustMediaTime(mediaStartTimeUs),
|
||||||
elapsedRealtimeMs, loadDurationMs, bytesLoaded, error, wasCanceled);
|
adjustMediaTime(mediaEndTimeUs), elapsedRealtimeMs, loadDurationMs, bytesLoaded,
|
||||||
|
error, wasCanceled);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -274,8 +284,8 @@ public interface AdaptiveMediaSourceEventListener {
|
||||||
handler.post(new Runnable() {
|
handler.post(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
listener.onUpstreamDiscarded(trackType, usToMs(mediaStartTimeUs),
|
listener.onUpstreamDiscarded(trackType, adjustMediaTime(mediaStartTimeUs),
|
||||||
usToMs(mediaEndTimeUs));
|
adjustMediaTime(mediaEndTimeUs));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -289,12 +299,17 @@ public interface AdaptiveMediaSourceEventListener {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
listener.onDownstreamFormatChanged(trackType, trackFormat, trackSelectionReason,
|
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
|
@Override
|
||||||
public MediaPeriod createPeriod(int index, Allocator allocator, long positionUs) {
|
public MediaPeriod createPeriod(int periodIndex, Allocator allocator, long positionUs) {
|
||||||
DashMediaPeriod mediaPeriod = new DashMediaPeriod(firstPeriodId + index, manifest, index,
|
EventDispatcher periodEventDispatcher = eventDispatcher.copyWithMediaTimeOffsetMs(
|
||||||
chunkSourceFactory, minLoadableRetryCount, eventDispatcher, elapsedRealtimeOffsetMs, loader,
|
manifest.getPeriod(periodIndex).startMs);
|
||||||
allocator);
|
DashMediaPeriod mediaPeriod = new DashMediaPeriod(firstPeriodId + periodIndex, manifest,
|
||||||
|
periodIndex, chunkSourceFactory, minLoadableRetryCount, periodEventDispatcher,
|
||||||
|
elapsedRealtimeOffsetMs, loader, allocator);
|
||||||
periodsById.put(mediaPeriod.id, mediaPeriod);
|
periodsById.put(mediaPeriod.id, mediaPeriod);
|
||||||
return mediaPeriod;
|
return mediaPeriod;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -41,12 +41,12 @@ public class Period {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param id The period identifier. May be null.
|
* @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.
|
* @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.id = id;
|
||||||
this.startMs = start;
|
this.startMs = startMs;
|
||||||
this.adaptationSets = Collections.unmodifiableList(adaptationSets);
|
this.adaptationSets = Collections.unmodifiableList(adaptationSets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue