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
|
@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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
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
|
||||||
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
|
||||||
}
|
}
|
||||||
|
|
||||||
@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 {
|
||||||
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 {
|
||||||
/**
|
/**
|
||||||
* 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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
* @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 {
|
||||||
* @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 {
|
||||||
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 {
|
||||||
eventHandler.post(new Runnable() {
|
eventHandler.post(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
eventListener.onAvailableRangeChanged(seekRange);
|
eventListener.onAvailableRangeChanged(eventSourceId, seekRange);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue