diff --git a/android/src/main/java/com/brentvatne/common/api/Source.kt b/android/src/main/java/com/brentvatne/common/api/Source.kt index e41761a413..9f1a4190fd 100644 --- a/android/src/main/java/com/brentvatne/common/api/Source.kt +++ b/android/src/main/java/com/brentvatne/common/api/Source.kt @@ -9,6 +9,7 @@ import android.text.TextUtils import com.brentvatne.common.toolbox.DebugLog import com.brentvatne.common.toolbox.DebugLog.e import com.brentvatne.common.toolbox.ReactBridgeUtils.safeGetArray +import com.brentvatne.common.toolbox.ReactBridgeUtils.safeGetBool import com.brentvatne.common.toolbox.ReactBridgeUtils.safeGetInt import com.brentvatne.common.toolbox.ReactBridgeUtils.safeGetMap import com.brentvatne.common.toolbox.ReactBridgeUtils.safeGetString @@ -44,6 +45,11 @@ class Source { /** http header list */ val headers: MutableMap = HashMap() + /** enable chunckless preparation for HLS + * see: + */ + var textTracksAllowChuncklessPreparation: Boolean = false + /** return true if this and src are equals */ override fun equals(other: Any?): Boolean { if (other == null || other !is Source) return false @@ -114,6 +120,7 @@ class Source { private const val PROP_SRC_TYPE = "type" private const val PROP_SRC_METADATA = "metadata" private const val PROP_SRC_HEADERS = "requestHeaders" + private const val PROP_SRC_TEXT_TRACKS_ALLOW_CHUNCKLESS_PREPARATION = "textTracksAllowChunklessPreparation" @SuppressLint("DiscouragedApi") private fun getUriFromAssetId(context: Context, uriString: String): Uri? { @@ -170,6 +177,7 @@ class Source { source.cropStartMs = safeGetInt(src, PROP_SRC_CROP_START, -1) source.cropEndMs = safeGetInt(src, PROP_SRC_CROP_END, -1) source.extension = safeGetString(src, PROP_SRC_TYPE, null) + source.textTracksAllowChuncklessPreparation = safeGetBool(src, PROP_SRC_TEXT_TRACKS_ALLOW_CHUNCKLESS_PREPARATION, true) val propSrcHeadersArray = safeGetArray(src, PROP_SRC_HEADERS) if (propSrcHeadersArray != null) { diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index 6b54a9a4c4..89da71633a 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -1044,7 +1044,7 @@ private MediaSource buildMediaSource(Uri uri, String overrideExtension, DrmSessi mediaSourceFactory = new HlsMediaSource.Factory( mediaDataSourceFactory - ); + ).setAllowChunklessPreparation(source.getTextTracksAllowChuncklessPreparation()); break; case CONTENT_TYPE_OTHER: if ("asset".equals(uri.getScheme())) { diff --git a/docs/pages/component/props.mdx b/docs/pages/component/props.mdx index 1805a0fc9e..3ffbb61902 100644 --- a/docs/pages/component/props.mdx +++ b/docs/pages/component/props.mdx @@ -753,7 +753,7 @@ source={{ uri: 'https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8' #### Overriding the metadata of a source - + Provide an optional `title`, `subtitle`, `artist`, `imageUri` and/or `description` properties for the video. Useful when using notification controls on Android or iOS or to adapt the tvOS playback experience. @@ -773,6 +773,21 @@ source={{ }} ``` +#### `textTracksAllowChunklessPreparation` + + +AllowChunklessPreparation for hls media source. +see: [disabling-chunkless](https://developer.android.com/media/media3/exoplayer/hls?#disabling-chunkless) in android documentation. + +Default value: true. + +```javascript +source={{ + uri: 'https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8', + textTracksAllowChunklessPreparation: false, + }} +``` + ### `subtitleStyle` | Property | Description | Platforms | diff --git a/src/specs/VideoNativeComponent.ts b/src/specs/VideoNativeComponent.ts index d776956c03..7193771f4d 100644 --- a/src/specs/VideoNativeComponent.ts +++ b/src/specs/VideoNativeComponent.ts @@ -39,6 +39,7 @@ export type VideoSrc = Readonly<{ cropStart?: Float; cropEnd?: Float; metadata?: VideoMetadata; + textTracksAllowChunklessPreparation?: boolean; // android }>; type DRMType = WithDefault; diff --git a/src/types/video.ts b/src/types/video.ts index 7c6001c5de..1128ce7bda 100644 --- a/src/types/video.ts +++ b/src/types/video.ts @@ -23,6 +23,7 @@ export type ReactVideoSourceProperties = { cropStart?: number; cropEnd?: number; metadata?: VideoMetadata; + textTracksAllowChunklessPreparation?: boolean; }; export type ReactVideoSource = Readonly<