mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Allow specifying a custom cacheKey to ExtractorMediaSource
Issue: #2201 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=142772885
This commit is contained in:
parent
0b141aeeee
commit
39827fad27
3 changed files with 31 additions and 29 deletions
|
|
@ -229,30 +229,6 @@
|
||||||
"uri": "https://storage.googleapis.com/wvmedia/cenc/vp9/subsample/24fps/tears/tears_uhd.mpd",
|
"uri": "https://storage.googleapis.com/wvmedia/cenc/vp9/subsample/24fps/tears/tears_uhd.mpd",
|
||||||
"drm_scheme": "widevine",
|
"drm_scheme": "widevine",
|
||||||
"drm_license_url": "https://proxy.uat.widevine.com/proxy?provider=widevine_test"
|
"drm_license_url": "https://proxy.uat.widevine.com/proxy?provider=widevine_test"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "WV: Secure Subsample (WebM, VP9 with altref)",
|
|
||||||
"uri": "https://storage.googleapis.com/widevine_test/vp9/sintel_1080p_vp9_altref_subsample/sintel_1080p_vp9_altref_subsample.mpd",
|
|
||||||
"drm_scheme": "widevine",
|
|
||||||
"drm_license_url": "https://widevine-proxy.appspot.com/proxy"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "WV: Secure Fullsample (WebM, VP9 with altref)",
|
|
||||||
"uri": "https://storage.googleapis.com/widevine_test/vp9/sintel_1080p_vp9_altref_fullsample/sintel_1080p_vp9_altref_fullsample.mpd",
|
|
||||||
"drm_scheme": "widevine",
|
|
||||||
"drm_license_url": "https://widevine-proxy.appspot.com/proxy"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "WV: Secure Subsample (WebM, VP9 without altref)",
|
|
||||||
"uri": "https://storage.googleapis.com/widevine_test/vp9/sintel_1080p_vp9_noaltref_subsample/sintel_1080p_vp9_noaltref_subsample.mpd",
|
|
||||||
"drm_scheme": "widevine",
|
|
||||||
"drm_license_url": "https://widevine-proxy.appspot.com/proxy"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "WV: Secure Fullsample (WebM, VP9 without altref)",
|
|
||||||
"uri": "https://storage.googleapis.com/widevine_test/vp9/sintel_1080p_vp9_noaltref_fullsample/sintel_1080p_vp9_noaltref_fullsample.mpd",
|
|
||||||
"drm_scheme": "widevine",
|
|
||||||
"drm_license_url": "https://widevine-proxy.appspot.com/proxy"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,7 @@ import java.io.IOException;
|
||||||
private final ExtractorMediaSource.EventListener eventListener;
|
private final ExtractorMediaSource.EventListener eventListener;
|
||||||
private final MediaSource.Listener sourceListener;
|
private final MediaSource.Listener sourceListener;
|
||||||
private final Allocator allocator;
|
private final Allocator allocator;
|
||||||
|
private final String customCacheKey;
|
||||||
private final Loader loader;
|
private final Loader loader;
|
||||||
private final ExtractorHolder extractorHolder;
|
private final ExtractorHolder extractorHolder;
|
||||||
private final ConditionVariable loadCondition;
|
private final ConditionVariable loadCondition;
|
||||||
|
|
@ -101,11 +102,13 @@ import java.io.IOException;
|
||||||
* @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 sourceListener A listener to notify when the timeline has been loaded.
|
* @param sourceListener A listener to notify when the timeline has been loaded.
|
||||||
* @param allocator An {@link Allocator} from which to obtain media buffer allocations.
|
* @param allocator An {@link Allocator} from which to obtain media buffer allocations.
|
||||||
|
* @param customCacheKey A custom key that uniquely identifies the original stream. Used for cache
|
||||||
|
* indexing. May be null.
|
||||||
*/
|
*/
|
||||||
public ExtractorMediaPeriod(Uri uri, DataSource dataSource, Extractor[] extractors,
|
public ExtractorMediaPeriod(Uri uri, DataSource dataSource, Extractor[] extractors,
|
||||||
int minLoadableRetryCount, Handler eventHandler,
|
int minLoadableRetryCount, Handler eventHandler,
|
||||||
ExtractorMediaSource.EventListener eventListener, MediaSource.Listener sourceListener,
|
ExtractorMediaSource.EventListener eventListener, MediaSource.Listener sourceListener,
|
||||||
Allocator allocator) {
|
Allocator allocator, String customCacheKey) {
|
||||||
this.uri = uri;
|
this.uri = uri;
|
||||||
this.dataSource = dataSource;
|
this.dataSource = dataSource;
|
||||||
this.minLoadableRetryCount = minLoadableRetryCount;
|
this.minLoadableRetryCount = minLoadableRetryCount;
|
||||||
|
|
@ -113,6 +116,7 @@ import java.io.IOException;
|
||||||
this.eventListener = eventListener;
|
this.eventListener = eventListener;
|
||||||
this.sourceListener = sourceListener;
|
this.sourceListener = sourceListener;
|
||||||
this.allocator = allocator;
|
this.allocator = allocator;
|
||||||
|
this.customCacheKey = customCacheKey;
|
||||||
loader = new Loader("Loader:ExtractorMediaPeriod");
|
loader = new Loader("Loader:ExtractorMediaPeriod");
|
||||||
extractorHolder = new ExtractorHolder(extractors, this);
|
extractorHolder = new ExtractorHolder(extractors, this);
|
||||||
loadCondition = new ConditionVariable();
|
loadCondition = new ConditionVariable();
|
||||||
|
|
@ -615,7 +619,7 @@ import java.io.IOException;
|
||||||
ExtractorInput input = null;
|
ExtractorInput input = null;
|
||||||
try {
|
try {
|
||||||
long position = positionHolder.position;
|
long position = positionHolder.position;
|
||||||
length = dataSource.open(new DataSpec(uri, position, C.LENGTH_UNSET, null));
|
length = dataSource.open(new DataSpec(uri, position, C.LENGTH_UNSET, customCacheKey));
|
||||||
if (length != C.LENGTH_UNSET) {
|
if (length != C.LENGTH_UNSET) {
|
||||||
length += position;
|
length += position;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -93,6 +93,7 @@ public final class ExtractorMediaSource implements MediaSource, MediaSource.List
|
||||||
private final Handler eventHandler;
|
private final Handler eventHandler;
|
||||||
private final EventListener eventListener;
|
private final EventListener eventListener;
|
||||||
private final Timeline.Period period;
|
private final Timeline.Period period;
|
||||||
|
private final String customCacheKey;
|
||||||
|
|
||||||
private MediaSource.Listener sourceListener;
|
private MediaSource.Listener sourceListener;
|
||||||
private Timeline timeline;
|
private Timeline timeline;
|
||||||
|
|
@ -110,7 +111,25 @@ public final class ExtractorMediaSource implements MediaSource, MediaSource.List
|
||||||
public ExtractorMediaSource(Uri uri, DataSource.Factory dataSourceFactory,
|
public ExtractorMediaSource(Uri uri, DataSource.Factory dataSourceFactory,
|
||||||
ExtractorsFactory extractorsFactory, Handler eventHandler, EventListener eventListener) {
|
ExtractorsFactory extractorsFactory, Handler eventHandler, EventListener eventListener) {
|
||||||
this(uri, dataSourceFactory, extractorsFactory, MIN_RETRY_COUNT_DEFAULT_FOR_MEDIA, eventHandler,
|
this(uri, dataSourceFactory, extractorsFactory, MIN_RETRY_COUNT_DEFAULT_FOR_MEDIA, eventHandler,
|
||||||
eventListener);
|
eventListener, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param uri The {@link Uri} of the media stream.
|
||||||
|
* @param dataSourceFactory A factory for {@link DataSource}s to read the media.
|
||||||
|
* @param extractorsFactory A factory for {@link Extractor}s to process the media stream. If the
|
||||||
|
* possible formats are known, pass a factory that instantiates extractors for those formats.
|
||||||
|
* Otherwise, pass a {@link DefaultExtractorsFactory} to use default extractors.
|
||||||
|
* @param eventHandler A handler for 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 customCacheKey A custom key that uniquely identifies the original stream. Used for cache
|
||||||
|
* indexing. May be null.
|
||||||
|
*/
|
||||||
|
public ExtractorMediaSource(Uri uri, DataSource.Factory dataSourceFactory,
|
||||||
|
ExtractorsFactory extractorsFactory, Handler eventHandler, EventListener eventListener,
|
||||||
|
String customCacheKey) {
|
||||||
|
this(uri, dataSourceFactory, extractorsFactory, MIN_RETRY_COUNT_DEFAULT_FOR_MEDIA, eventHandler,
|
||||||
|
eventListener, customCacheKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -122,16 +141,19 @@ public final class ExtractorMediaSource implements MediaSource, MediaSource.List
|
||||||
* @param minLoadableRetryCount The minimum number of times to retry if a loading error occurs.
|
* @param minLoadableRetryCount The minimum number of times to retry if a loading error occurs.
|
||||||
* @param eventHandler A handler for events. May be null if delivery of events is not required.
|
* @param eventHandler A handler for 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 eventListener A listener of events. May be null if delivery of events is not required.
|
||||||
|
* @param customCacheKey A custom key that uniquely identifies the original stream. Used for cache
|
||||||
|
* indexing. May be null.
|
||||||
*/
|
*/
|
||||||
public ExtractorMediaSource(Uri uri, DataSource.Factory dataSourceFactory,
|
public ExtractorMediaSource(Uri uri, DataSource.Factory dataSourceFactory,
|
||||||
ExtractorsFactory extractorsFactory, int minLoadableRetryCount, Handler eventHandler,
|
ExtractorsFactory extractorsFactory, int minLoadableRetryCount, Handler eventHandler,
|
||||||
EventListener eventListener) {
|
EventListener eventListener, String customCacheKey) {
|
||||||
this.uri = uri;
|
this.uri = uri;
|
||||||
this.dataSourceFactory = dataSourceFactory;
|
this.dataSourceFactory = dataSourceFactory;
|
||||||
this.extractorsFactory = extractorsFactory;
|
this.extractorsFactory = extractorsFactory;
|
||||||
this.minLoadableRetryCount = minLoadableRetryCount;
|
this.minLoadableRetryCount = minLoadableRetryCount;
|
||||||
this.eventHandler = eventHandler;
|
this.eventHandler = eventHandler;
|
||||||
this.eventListener = eventListener;
|
this.eventListener = eventListener;
|
||||||
|
this.customCacheKey = customCacheKey;
|
||||||
period = new Timeline.Period();
|
period = new Timeline.Period();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -152,7 +174,7 @@ public final class ExtractorMediaSource implements MediaSource, MediaSource.List
|
||||||
Assertions.checkArgument(index == 0);
|
Assertions.checkArgument(index == 0);
|
||||||
return new ExtractorMediaPeriod(uri, dataSourceFactory.createDataSource(),
|
return new ExtractorMediaPeriod(uri, dataSourceFactory.createDataSource(),
|
||||||
extractorsFactory.createExtractors(), minLoadableRetryCount, eventHandler, eventListener,
|
extractorsFactory.createExtractors(), minLoadableRetryCount, eventHandler, eventListener,
|
||||||
this, allocator);
|
this, allocator, customCacheKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue