From 408bc08682328c50ba323ac74406983682464d4b Mon Sep 17 00:00:00 2001 From: eneim Date: Thu, 18 Jan 2018 09:32:46 +0900 Subject: [PATCH 1/2] Make Raw Resource Scheme to be public, accessible from outside. --- .../android/exoplayer2/upstream/RawResourceDataSource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/RawResourceDataSource.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/RawResourceDataSource.java index 0b7b85b8c3..941fa90e8f 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/RawResourceDataSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/RawResourceDataSource.java @@ -58,7 +58,7 @@ public final class RawResourceDataSource implements DataSource { return Uri.parse(RAW_RESOURCE_SCHEME + ":///" + rawResourceId); } - private static final String RAW_RESOURCE_SCHEME = "rawresource"; + public static final String RAW_RESOURCE_SCHEME = "rawresource"; private final Resources resources; private final TransferListener listener; From 88f8c768b0aca93da652d3955dda846dbc03b97f Mon Sep 17 00:00:00 2001 From: eneim Date: Thu, 18 Jan 2018 09:36:48 +0900 Subject: [PATCH 2/2] Also check if the Uri is built for raw resource data, and then create the RawResourceDataSource for it. --- .../exoplayer2/upstream/DefaultDataSource.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultDataSource.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultDataSource.java index 853b40f73f..6d22f8b6c5 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultDataSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/DefaultDataSource.java @@ -31,6 +31,9 @@ import java.lang.reflect.InvocationTargetException; * /path/to/media/media.mp4 because the implementation assumes that a URI without a scheme is a * local file URI). *
  • asset: For fetching data from an asset in the application's apk (e.g. asset:///media.mp4). + *
  • rawresource: For fetching data from a raw resource in the applications' apk + * (e.g. rawresource:///resourceId, where rawResourceId is the integer identifier of the raw + * resource).
  • *
  • content: For fetching data from a content URI (e.g. content://authority/path/123). *
  • rtmp: For fetching data over RTMP. Only supported if the project using ExoPlayer has an * explicit dependency on ExoPlayer's RTMP extension.
  • @@ -48,6 +51,7 @@ public final class DefaultDataSource implements DataSource { private static final String SCHEME_ASSET = "asset"; private static final String SCHEME_CONTENT = "content"; private static final String SCHEME_RTMP = "rtmp"; + private static final String SCHEME_RAW = RawResourceDataSource.RAW_RESOURCE_SCHEME; private final Context context; private final TransferListener listener; @@ -60,6 +64,7 @@ public final class DefaultDataSource implements DataSource { private DataSource contentDataSource; private DataSource rtmpDataSource; private DataSource dataSchemeDataSource; + private DataSource rawResourceDataSource; private DataSource dataSource; @@ -134,6 +139,8 @@ public final class DefaultDataSource implements DataSource { dataSource = getRtmpDataSource(); } else if (DataSchemeDataSource.SCHEME_DATA.equals(scheme)) { dataSource = getDataSchemeDataSource(); + } else if (SCHEME_RAW.equals(scheme)) { + dataSource = getRawResourceDataSource(); } else { dataSource = baseDataSource; } @@ -213,4 +220,10 @@ public final class DefaultDataSource implements DataSource { return dataSchemeDataSource; } + private DataSource getRawResourceDataSource() { + if (rawResourceDataSource == null) { + rawResourceDataSource = new RawResourceDataSource(context, listener); + } + return rawResourceDataSource; + } }