mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Add eventSourceId to onAvailableRangeChange events
This commit is contained in:
parent
00068c8954
commit
eda8ac4e01
5 changed files with 25 additions and 16 deletions
|
|
@ -177,7 +177,7 @@ public class EventLogger implements DemoPlayer.Listener, DemoPlayer.InfoListener
|
|||
}
|
||||
|
||||
@Override
|
||||
public void onAvailableRangeChanged(TimeRange availableRange) {
|
||||
public void onAvailableRangeChanged(int sourceId, TimeRange availableRange) {
|
||||
availableRangeValuesUs = availableRange.getCurrentBoundsUs(availableRangeValuesUs);
|
||||
Log.d(TAG, "availableRange [" + availableRange.isStatic() + ", " + availableRangeValuesUs[0]
|
||||
+ ", " + availableRangeValuesUs[1] + "]");
|
||||
|
|
|
|||
|
|
@ -217,7 +217,7 @@ public class DashRendererBuilder implements RendererBuilder {
|
|||
ChunkSource videoChunkSource = new DashChunkSource(manifestFetcher,
|
||||
DefaultDashTrackSelector.newVideoInstance(context, true, filterHdContent),
|
||||
videoDataSource, new AdaptiveEvaluator(bandwidthMeter), LIVE_EDGE_LATENCY_MS,
|
||||
elapsedRealtimeOffset, mainHandler, player);
|
||||
elapsedRealtimeOffset, mainHandler, player, DemoPlayer.TYPE_VIDEO);
|
||||
ChunkSampleSource videoSampleSource = new ChunkSampleSource(videoChunkSource, loadControl,
|
||||
VIDEO_BUFFER_SEGMENTS * BUFFER_SEGMENT_SIZE, mainHandler, player,
|
||||
DemoPlayer.TYPE_VIDEO);
|
||||
|
|
@ -229,7 +229,7 @@ public class DashRendererBuilder implements RendererBuilder {
|
|||
DataSource audioDataSource = new DefaultUriDataSource(context, bandwidthMeter, userAgent);
|
||||
ChunkSource audioChunkSource = new DashChunkSource(manifestFetcher,
|
||||
DefaultDashTrackSelector.newAudioInstance(), audioDataSource, null, LIVE_EDGE_LATENCY_MS,
|
||||
elapsedRealtimeOffset, mainHandler, player);
|
||||
elapsedRealtimeOffset, mainHandler, player, DemoPlayer.TYPE_AUDIO);
|
||||
ChunkSampleSource audioSampleSource = new ChunkSampleSource(audioChunkSource, loadControl,
|
||||
AUDIO_BUFFER_SEGMENTS * BUFFER_SEGMENT_SIZE, mainHandler, player,
|
||||
DemoPlayer.TYPE_AUDIO);
|
||||
|
|
@ -241,7 +241,7 @@ public class DashRendererBuilder implements RendererBuilder {
|
|||
DataSource textDataSource = new DefaultUriDataSource(context, bandwidthMeter, userAgent);
|
||||
ChunkSource textChunkSource = new DashChunkSource(manifestFetcher,
|
||||
DefaultDashTrackSelector.newTextInstance(), textDataSource, null, LIVE_EDGE_LATENCY_MS,
|
||||
elapsedRealtimeOffset, mainHandler, player);
|
||||
elapsedRealtimeOffset, mainHandler, player, DemoPlayer.TYPE_TEXT);
|
||||
ChunkSampleSource textSampleSource = new ChunkSampleSource(textChunkSource, loadControl,
|
||||
TEXT_BUFFER_SEGMENTS * BUFFER_SEGMENT_SIZE, mainHandler, player,
|
||||
DemoPlayer.TYPE_TEXT);
|
||||
|
|
|
|||
|
|
@ -126,7 +126,7 @@ public class DemoPlayer implements ExoPlayer.Listener, ChunkSampleSource.EventLi
|
|||
long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs);
|
||||
void onDecoderInitialized(String decoderName, long elapsedRealtimeMs,
|
||||
long initializationDurationMs);
|
||||
void onAvailableRangeChanged(TimeRange availableRange);
|
||||
void onAvailableRangeChanged(int sourceId, TimeRange availableRange);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -526,9 +526,9 @@ public class DemoPlayer implements ExoPlayer.Listener, ChunkSampleSource.EventLi
|
|||
}
|
||||
|
||||
@Override
|
||||
public void onAvailableRangeChanged(TimeRange availableRange) {
|
||||
public void onAvailableRangeChanged(int sourceId, TimeRange availableRange) {
|
||||
if (infoListener != null) {
|
||||
infoListener.onAvailableRangeChanged(availableRange);
|
||||
infoListener.onAvailableRangeChanged(sourceId, availableRange);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -324,7 +324,8 @@ public class DashChunkSourceTest extends InstrumentationTestCase {
|
|||
DashChunkSource chunkSource = new DashChunkSource(manifestFetcher, mpd,
|
||||
DefaultDashTrackSelector.newVideoInstance(null, false, false), mock(DataSource.class), null,
|
||||
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.enable(0);
|
||||
return chunkSource;
|
||||
|
|
|
|||
|
|
@ -85,9 +85,10 @@ public class DashChunkSource implements ChunkSource, Output {
|
|||
/**
|
||||
* 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.
|
||||
*/
|
||||
public void onAvailableRangeChanged(TimeRange availableRange);
|
||||
public void onAvailableRangeChanged(int sourceId, TimeRange availableRange);
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -119,6 +120,7 @@ public class DashChunkSource implements ChunkSource, Output {
|
|||
private final long elapsedRealtimeOffsetUs;
|
||||
private final long[] availableRangeValues;
|
||||
private final boolean live;
|
||||
private final int eventSourceId;
|
||||
|
||||
private MediaPresentationDescription currentManifest;
|
||||
private MediaPresentationDescription processedManifest;
|
||||
|
|
@ -179,7 +181,7 @@ public class DashChunkSource implements ChunkSource, Output {
|
|||
public DashChunkSource(MediaPresentationDescription manifest, DashTrackSelector trackSelector,
|
||||
DataSource dataSource, FormatEvaluator adaptiveFormatEvaluator) {
|
||||
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 {
|
|||
* @param eventHandler A handler to use when delivering events to {@code EventListener}. 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,
|
||||
DashTrackSelector trackSelector, DataSource dataSource,
|
||||
FormatEvaluator adaptiveFormatEvaluator, long liveEdgeLatencyMs, long elapsedRealtimeOffsetMs,
|
||||
Handler eventHandler, EventListener eventListener) {
|
||||
Handler eventHandler, EventListener eventListener, int eventSourceId) {
|
||||
this(manifestFetcher, manifestFetcher.getManifest(), trackSelector,
|
||||
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 {
|
|||
* @param eventHandler A handler to use when delivering events to {@code EventListener}. 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,
|
||||
DashTrackSelector trackSelector, DataSource dataSource,
|
||||
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,
|
||||
dataSource, adaptiveFormatEvaluator, new SystemClock(), liveEdgeLatencyMs * 1000,
|
||||
elapsedRealtimeOffsetMs * 1000, startAtLiveEdge, eventHandler, eventListener);
|
||||
elapsedRealtimeOffsetMs * 1000, startAtLiveEdge, eventHandler, eventListener,
|
||||
eventSourceId);
|
||||
}
|
||||
|
||||
/* package */ DashChunkSource(ManifestFetcher<MediaPresentationDescription> manifestFetcher,
|
||||
MediaPresentationDescription initialManifest, DashTrackSelector trackSelector,
|
||||
DataSource dataSource, FormatEvaluator adaptiveFormatEvaluator,
|
||||
Clock systemClock, long liveEdgeLatencyUs, long elapsedRealtimeOffsetUs,
|
||||
boolean startAtLiveEdge, Handler eventHandler, EventListener eventListener) {
|
||||
boolean startAtLiveEdge, Handler eventHandler, EventListener eventListener,
|
||||
int eventSourceId) {
|
||||
this.manifestFetcher = manifestFetcher;
|
||||
this.currentManifest = initialManifest;
|
||||
this.trackSelector = trackSelector;
|
||||
|
|
@ -261,6 +268,7 @@ public class DashChunkSource implements ChunkSource, Output {
|
|||
this.startAtLiveEdge = startAtLiveEdge;
|
||||
this.eventHandler = eventHandler;
|
||||
this.eventListener = eventListener;
|
||||
this.eventSourceId = eventSourceId;
|
||||
this.evaluation = new Evaluation();
|
||||
this.availableRangeValues = new long[2];
|
||||
periodHolders = new SparseArray<>();
|
||||
|
|
@ -797,7 +805,7 @@ public class DashChunkSource implements ChunkSource, Output {
|
|||
eventHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
eventListener.onAvailableRangeChanged(seekRange);
|
||||
eventListener.onAvailableRangeChanged(eventSourceId, seekRange);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue