Skip to content

Commit

Permalink
feat(android): allow chunckless preparation (#3882)
Browse files Browse the repository at this point in the history
* feat(android): add a way to disable chuncklessPreparation on HLS
  • Loading branch information
freeboub authored Jun 7, 2024
1 parent ac0a9c3 commit d4a8c24
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 2 deletions.
8 changes: 8 additions & 0 deletions android/src/main/java/com/brentvatne/common/api/Source.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -44,6 +45,11 @@ class Source {
/** http header list */
val headers: MutableMap<String, String> = 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
Expand Down Expand Up @@ -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? {
Expand Down Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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())) {
Expand Down
17 changes: 16 additions & 1 deletion docs/pages/component/props.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -753,7 +753,7 @@ source={{ uri: 'https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8'

#### Overriding the metadata of a source

<PlatformsList types={['Android, iOS, tvOS']} />
<PlatformsList types={['Android', 'iOS', 'tvOS']} />

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.
Expand All @@ -773,6 +773,21 @@ source={{
}}
```

#### `textTracksAllowChunklessPreparation`
<PlatformsList types={['Android']} />

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 |
Expand Down
1 change: 1 addition & 0 deletions src/specs/VideoNativeComponent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ export type VideoSrc = Readonly<{
cropStart?: Float;
cropEnd?: Float;
metadata?: VideoMetadata;
textTracksAllowChunklessPreparation?: boolean; // android
}>;

type DRMType = WithDefault<string, 'widevine'>;
Expand Down
1 change: 1 addition & 0 deletions src/types/video.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export type ReactVideoSourceProperties = {
cropStart?: number;
cropEnd?: number;
metadata?: VideoMetadata;
textTracksAllowChunklessPreparation?: boolean;
};

export type ReactVideoSource = Readonly<
Expand Down

0 comments on commit d4a8c24

Please sign in to comment.