Commit eda8ac4e by Oliver Woodman

Add eventSourceId to onAvailableRangeChange events

parent 00068c89
...@@ -177,7 +177,7 @@ public class EventLogger implements DemoPlayer.Listener, DemoPlayer.InfoListener ...@@ -177,7 +177,7 @@ public class EventLogger implements DemoPlayer.Listener, DemoPlayer.InfoListener
} }
@Override @Override
public void onAvailableRangeChanged(TimeRange availableRange) { public void onAvailableRangeChanged(int sourceId, TimeRange availableRange) {
availableRangeValuesUs = availableRange.getCurrentBoundsUs(availableRangeValuesUs); availableRangeValuesUs = availableRange.getCurrentBoundsUs(availableRangeValuesUs);
Log.d(TAG, "availableRange [" + availableRange.isStatic() + ", " + availableRangeValuesUs[0] Log.d(TAG, "availableRange [" + availableRange.isStatic() + ", " + availableRangeValuesUs[0]
+ ", " + availableRangeValuesUs[1] + "]"); + ", " + availableRangeValuesUs[1] + "]");
......
...@@ -217,7 +217,7 @@ public class DashRendererBuilder implements RendererBuilder { ...@@ -217,7 +217,7 @@ public class DashRendererBuilder implements RendererBuilder {
ChunkSource videoChunkSource = new DashChunkSource(manifestFetcher, ChunkSource videoChunkSource = new DashChunkSource(manifestFetcher,
DefaultDashTrackSelector.newVideoInstance(context, true, filterHdContent), DefaultDashTrackSelector.newVideoInstance(context, true, filterHdContent),
videoDataSource, new AdaptiveEvaluator(bandwidthMeter), LIVE_EDGE_LATENCY_MS, videoDataSource, new AdaptiveEvaluator(bandwidthMeter), LIVE_EDGE_LATENCY_MS,
elapsedRealtimeOffset, mainHandler, player); elapsedRealtimeOffset, mainHandler, player, DemoPlayer.TYPE_VIDEO);
ChunkSampleSource videoSampleSource = new ChunkSampleSource(videoChunkSource, loadControl, ChunkSampleSource videoSampleSource = new ChunkSampleSource(videoChunkSource, loadControl,
VIDEO_BUFFER_SEGMENTS * BUFFER_SEGMENT_SIZE, mainHandler, player, VIDEO_BUFFER_SEGMENTS * BUFFER_SEGMENT_SIZE, mainHandler, player,
DemoPlayer.TYPE_VIDEO); DemoPlayer.TYPE_VIDEO);
...@@ -229,7 +229,7 @@ public class DashRendererBuilder implements RendererBuilder { ...@@ -229,7 +229,7 @@ public class DashRendererBuilder implements RendererBuilder {
DataSource audioDataSource = new DefaultUriDataSource(context, bandwidthMeter, userAgent); DataSource audioDataSource = new DefaultUriDataSource(context, bandwidthMeter, userAgent);
ChunkSource audioChunkSource = new DashChunkSource(manifestFetcher, ChunkSource audioChunkSource = new DashChunkSource(manifestFetcher,
DefaultDashTrackSelector.newAudioInstance(), audioDataSource, null, LIVE_EDGE_LATENCY_MS, DefaultDashTrackSelector.newAudioInstance(), audioDataSource, null, LIVE_EDGE_LATENCY_MS,
elapsedRealtimeOffset, mainHandler, player); elapsedRealtimeOffset, mainHandler, player, DemoPlayer.TYPE_AUDIO);
ChunkSampleSource audioSampleSource = new ChunkSampleSource(audioChunkSource, loadControl, ChunkSampleSource audioSampleSource = new ChunkSampleSource(audioChunkSource, loadControl,
AUDIO_BUFFER_SEGMENTS * BUFFER_SEGMENT_SIZE, mainHandler, player, AUDIO_BUFFER_SEGMENTS * BUFFER_SEGMENT_SIZE, mainHandler, player,
DemoPlayer.TYPE_AUDIO); DemoPlayer.TYPE_AUDIO);
...@@ -241,7 +241,7 @@ public class DashRendererBuilder implements RendererBuilder { ...@@ -241,7 +241,7 @@ public class DashRendererBuilder implements RendererBuilder {
DataSource textDataSource = new DefaultUriDataSource(context, bandwidthMeter, userAgent); DataSource textDataSource = new DefaultUriDataSource(context, bandwidthMeter, userAgent);
ChunkSource textChunkSource = new DashChunkSource(manifestFetcher, ChunkSource textChunkSource = new DashChunkSource(manifestFetcher,
DefaultDashTrackSelector.newTextInstance(), textDataSource, null, LIVE_EDGE_LATENCY_MS, DefaultDashTrackSelector.newTextInstance(), textDataSource, null, LIVE_EDGE_LATENCY_MS,
elapsedRealtimeOffset, mainHandler, player); elapsedRealtimeOffset, mainHandler, player, DemoPlayer.TYPE_TEXT);
ChunkSampleSource textSampleSource = new ChunkSampleSource(textChunkSource, loadControl, ChunkSampleSource textSampleSource = new ChunkSampleSource(textChunkSource, loadControl,
TEXT_BUFFER_SEGMENTS * BUFFER_SEGMENT_SIZE, mainHandler, player, TEXT_BUFFER_SEGMENTS * BUFFER_SEGMENT_SIZE, mainHandler, player,
DemoPlayer.TYPE_TEXT); DemoPlayer.TYPE_TEXT);
......
...@@ -126,7 +126,7 @@ public class DemoPlayer implements ExoPlayer.Listener, ChunkSampleSource.EventLi ...@@ -126,7 +126,7 @@ public class DemoPlayer implements ExoPlayer.Listener, ChunkSampleSource.EventLi
long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs); long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs);
void onDecoderInitialized(String decoderName, long elapsedRealtimeMs, void onDecoderInitialized(String decoderName, long elapsedRealtimeMs,
long initializationDurationMs); long initializationDurationMs);
void onAvailableRangeChanged(TimeRange availableRange); void onAvailableRangeChanged(int sourceId, TimeRange availableRange);
} }
/** /**
...@@ -526,9 +526,9 @@ public class DemoPlayer implements ExoPlayer.Listener, ChunkSampleSource.EventLi ...@@ -526,9 +526,9 @@ public class DemoPlayer implements ExoPlayer.Listener, ChunkSampleSource.EventLi
} }
@Override @Override
public void onAvailableRangeChanged(TimeRange availableRange) { public void onAvailableRangeChanged(int sourceId, TimeRange availableRange) {
if (infoListener != null) { if (infoListener != null) {
infoListener.onAvailableRangeChanged(availableRange); infoListener.onAvailableRangeChanged(sourceId, availableRange);
} }
} }
......
...@@ -324,7 +324,8 @@ public class DashChunkSourceTest extends InstrumentationTestCase { ...@@ -324,7 +324,8 @@ public class DashChunkSourceTest extends InstrumentationTestCase {
DashChunkSource chunkSource = new DashChunkSource(manifestFetcher, mpd, DashChunkSource chunkSource = new DashChunkSource(manifestFetcher, mpd,
DefaultDashTrackSelector.newVideoInstance(null, false, false), mock(DataSource.class), null, DefaultDashTrackSelector.newVideoInstance(null, false, false), mock(DataSource.class), null,
new FakeClock(mpd.availabilityStartTime + mpd.duration - ELAPSED_REALTIME_OFFSET_MS), new FakeClock(mpd.availabilityStartTime + mpd.duration - ELAPSED_REALTIME_OFFSET_MS),
liveEdgeLatencyMs * 1000, ELAPSED_REALTIME_OFFSET_MS * 1000, startAtLiveEdge, null, null); liveEdgeLatencyMs * 1000, ELAPSED_REALTIME_OFFSET_MS * 1000, startAtLiveEdge, null, null,
0);
chunkSource.prepare(); chunkSource.prepare();
chunkSource.enable(0); chunkSource.enable(0);
return chunkSource; return chunkSource;
......
...@@ -85,9 +85,10 @@ public class DashChunkSource implements ChunkSource, Output { ...@@ -85,9 +85,10 @@ public class DashChunkSource implements ChunkSource, Output {
/** /**
* Invoked when the available seek range of the stream has changed. * Invoked when the available seek range of the stream has changed.
* *
* @param sourceId The id of the reporting {@link DashChunkSource}.
* @param availableRange The range which specifies available content that can be seeked to. * @param availableRange The range which specifies available content that can be seeked to.
*/ */
public void onAvailableRangeChanged(TimeRange availableRange); public void onAvailableRangeChanged(int sourceId, TimeRange availableRange);
} }
...@@ -119,6 +120,7 @@ public class DashChunkSource implements ChunkSource, Output { ...@@ -119,6 +120,7 @@ public class DashChunkSource implements ChunkSource, Output {
private final long elapsedRealtimeOffsetUs; private final long elapsedRealtimeOffsetUs;
private final long[] availableRangeValues; private final long[] availableRangeValues;
private final boolean live; private final boolean live;
private final int eventSourceId;
private MediaPresentationDescription currentManifest; private MediaPresentationDescription currentManifest;
private MediaPresentationDescription processedManifest; private MediaPresentationDescription processedManifest;
...@@ -179,7 +181,7 @@ public class DashChunkSource implements ChunkSource, Output { ...@@ -179,7 +181,7 @@ public class DashChunkSource implements ChunkSource, Output {
public DashChunkSource(MediaPresentationDescription manifest, DashTrackSelector trackSelector, public DashChunkSource(MediaPresentationDescription manifest, DashTrackSelector trackSelector,
DataSource dataSource, FormatEvaluator adaptiveFormatEvaluator) { DataSource dataSource, FormatEvaluator adaptiveFormatEvaluator) {
this(null, manifest, trackSelector, dataSource, adaptiveFormatEvaluator, new SystemClock(), 0, this(null, manifest, trackSelector, dataSource, adaptiveFormatEvaluator, new SystemClock(), 0,
0, false, null, null); 0, false, null, null, 0);
} }
/** /**
...@@ -204,14 +206,15 @@ public class DashChunkSource implements ChunkSource, Output { ...@@ -204,14 +206,15 @@ public class DashChunkSource implements ChunkSource, Output {
* @param eventHandler A handler to use when delivering events to {@code EventListener}. May be * @param eventHandler A handler to use when delivering events to {@code EventListener}. May be
* null if delivery of events is not required. * null if delivery of events is not required.
* @param eventListener A listener of events. May be null if delivery of events is not required. * @param eventListener A listener of events. May be null if delivery of events is not required.
* @param eventSourceId An identifier that gets passed to {@code eventListener} methods.
*/ */
public DashChunkSource(ManifestFetcher<MediaPresentationDescription> manifestFetcher, public DashChunkSource(ManifestFetcher<MediaPresentationDescription> manifestFetcher,
DashTrackSelector trackSelector, DataSource dataSource, DashTrackSelector trackSelector, DataSource dataSource,
FormatEvaluator adaptiveFormatEvaluator, long liveEdgeLatencyMs, long elapsedRealtimeOffsetMs, FormatEvaluator adaptiveFormatEvaluator, long liveEdgeLatencyMs, long elapsedRealtimeOffsetMs,
Handler eventHandler, EventListener eventListener) { Handler eventHandler, EventListener eventListener, int eventSourceId) {
this(manifestFetcher, manifestFetcher.getManifest(), trackSelector, this(manifestFetcher, manifestFetcher.getManifest(), trackSelector,
dataSource, adaptiveFormatEvaluator, new SystemClock(), liveEdgeLatencyMs * 1000, dataSource, adaptiveFormatEvaluator, new SystemClock(), liveEdgeLatencyMs * 1000,
elapsedRealtimeOffsetMs * 1000, true, eventHandler, eventListener); elapsedRealtimeOffsetMs * 1000, true, eventHandler, eventListener, eventSourceId);
} }
/** /**
...@@ -235,21 +238,25 @@ public class DashChunkSource implements ChunkSource, Output { ...@@ -235,21 +238,25 @@ public class DashChunkSource implements ChunkSource, Output {
* @param eventHandler A handler to use when delivering events to {@code EventListener}. May be * @param eventHandler A handler to use when delivering events to {@code EventListener}. May be
* null if delivery of events is not required. * null if delivery of events is not required.
* @param eventListener A listener of events. May be null if delivery of events is not required. * @param eventListener A listener of events. May be null if delivery of events is not required.
* @param eventSourceId An identifier that gets passed to {@code eventListener} methods.
*/ */
public DashChunkSource(ManifestFetcher<MediaPresentationDescription> manifestFetcher, public DashChunkSource(ManifestFetcher<MediaPresentationDescription> manifestFetcher,
DashTrackSelector trackSelector, DataSource dataSource, DashTrackSelector trackSelector, DataSource dataSource,
FormatEvaluator adaptiveFormatEvaluator, long liveEdgeLatencyMs, long elapsedRealtimeOffsetMs, FormatEvaluator adaptiveFormatEvaluator, long liveEdgeLatencyMs, long elapsedRealtimeOffsetMs,
boolean startAtLiveEdge, Handler eventHandler, EventListener eventListener) { boolean startAtLiveEdge, Handler eventHandler, EventListener eventListener,
int eventSourceId) {
this(manifestFetcher, manifestFetcher.getManifest(), trackSelector, this(manifestFetcher, manifestFetcher.getManifest(), trackSelector,
dataSource, adaptiveFormatEvaluator, new SystemClock(), liveEdgeLatencyMs * 1000, dataSource, adaptiveFormatEvaluator, new SystemClock(), liveEdgeLatencyMs * 1000,
elapsedRealtimeOffsetMs * 1000, startAtLiveEdge, eventHandler, eventListener); elapsedRealtimeOffsetMs * 1000, startAtLiveEdge, eventHandler, eventListener,
eventSourceId);
} }
/* package */ DashChunkSource(ManifestFetcher<MediaPresentationDescription> manifestFetcher, /* package */ DashChunkSource(ManifestFetcher<MediaPresentationDescription> manifestFetcher,
MediaPresentationDescription initialManifest, DashTrackSelector trackSelector, MediaPresentationDescription initialManifest, DashTrackSelector trackSelector,
DataSource dataSource, FormatEvaluator adaptiveFormatEvaluator, DataSource dataSource, FormatEvaluator adaptiveFormatEvaluator,
Clock systemClock, long liveEdgeLatencyUs, long elapsedRealtimeOffsetUs, Clock systemClock, long liveEdgeLatencyUs, long elapsedRealtimeOffsetUs,
boolean startAtLiveEdge, Handler eventHandler, EventListener eventListener) { boolean startAtLiveEdge, Handler eventHandler, EventListener eventListener,
int eventSourceId) {
this.manifestFetcher = manifestFetcher; this.manifestFetcher = manifestFetcher;
this.currentManifest = initialManifest; this.currentManifest = initialManifest;
this.trackSelector = trackSelector; this.trackSelector = trackSelector;
...@@ -261,6 +268,7 @@ public class DashChunkSource implements ChunkSource, Output { ...@@ -261,6 +268,7 @@ public class DashChunkSource implements ChunkSource, Output {
this.startAtLiveEdge = startAtLiveEdge; this.startAtLiveEdge = startAtLiveEdge;
this.eventHandler = eventHandler; this.eventHandler = eventHandler;
this.eventListener = eventListener; this.eventListener = eventListener;
this.eventSourceId = eventSourceId;
this.evaluation = new Evaluation(); this.evaluation = new Evaluation();
this.availableRangeValues = new long[2]; this.availableRangeValues = new long[2];
periodHolders = new SparseArray<>(); periodHolders = new SparseArray<>();
...@@ -797,7 +805,7 @@ public class DashChunkSource implements ChunkSource, Output { ...@@ -797,7 +805,7 @@ public class DashChunkSource implements ChunkSource, Output {
eventHandler.post(new Runnable() { eventHandler.post(new Runnable() {
@Override @Override
public void run() { public void run() {
eventListener.onAvailableRangeChanged(seekRange); eventListener.onAvailableRangeChanged(eventSourceId, seekRange);
} }
}); });
} }
......
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