From 4cd21b64cca06f777c19e4df3bf1f4f45ef98f2b Mon Sep 17 00:00:00 2001 From: Brian Sztamfater Date: Tue, 6 Jun 2023 18:01:38 +0100 Subject: [PATCH] fix: support loading raw resources on Android --- .../com/transparentvideo/AlphaMovieView.java | 24 +++++++++++++++++++ .../TransparentVideoViewManager.java | 10 +++++++- .../main/java/com/transparentvideo/Utils.java | 10 ++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 android/src/main/java/com/transparentvideo/Utils.java diff --git a/android/src/main/java/com/transparentvideo/AlphaMovieView.java b/android/src/main/java/com/transparentvideo/AlphaMovieView.java index 2ca5486..e02845c 100644 --- a/android/src/main/java/com/transparentvideo/AlphaMovieView.java +++ b/android/src/main/java/com/transparentvideo/AlphaMovieView.java @@ -327,6 +327,30 @@ public class AlphaMovieView extends GLTextureView { } } + public void setVideoFromResourceId(Context context, int resId) { + reset(); + + try { + AssetFileDescriptor afd = context.getResources().openRawResourceFd(resId); + if (afd == null) return; + + mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); + + FileDescriptor fileDescriptor = afd.getFileDescriptor(); + long startOffset = afd.getStartOffset(); + long endOffset = afd.getLength(); + mediaPlayer.setDataSource(fileDescriptor, startOffset, endOffset); + + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + retriever.setDataSource(fileDescriptor, startOffset, endOffset); + + onDataSourceSet(retriever); + + } catch (IOException e) { + Log.e(TAG, e.getMessage(), e); + } + } + public void setVideoFromFile(FileDescriptor fileDescriptor) { reset(); diff --git a/android/src/main/java/com/transparentvideo/TransparentVideoViewManager.java b/android/src/main/java/com/transparentvideo/TransparentVideoViewManager.java index 7390d2b..f6c7a0b 100644 --- a/android/src/main/java/com/transparentvideo/TransparentVideoViewManager.java +++ b/android/src/main/java/com/transparentvideo/TransparentVideoViewManager.java @@ -2,6 +2,8 @@ package com.transparentvideo; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; +import android.content.Context; +import android.os.Bundle; import android.view.Gravity; import android.widget.LinearLayout; @@ -59,6 +61,12 @@ public class TransparentVideoViewManager extends SimpleViewManager view.addView(alphaMovieView); } alphaMovieView.setPacked(true); - alphaMovieView.setVideoByUrl(src.getString("uri")); + String file = src.getString("uri"); + try { + Integer rawResourceId = Utils.getRawResourceId(reactContext, file); + alphaMovieView.setVideoFromResourceId(reactContext, rawResourceId); + } catch (RuntimeException e) { + alphaMovieView.setVideoByUrl(file); + } } } diff --git a/android/src/main/java/com/transparentvideo/Utils.java b/android/src/main/java/com/transparentvideo/Utils.java new file mode 100644 index 0000000..a74118c --- /dev/null +++ b/android/src/main/java/com/transparentvideo/Utils.java @@ -0,0 +1,10 @@ +package com.transparentvideo; + +import android.content.Context; +import android.os.Bundle; + +public class Utils { + public static int getRawResourceId(Context context, String resourceName) { + return context.getResources().getIdentifier(resourceName, "raw", context.getPackageName()); + } +}