From 53abeab1339c2d5529e410488c240060a36507f1 Mon Sep 17 00:00:00 2001 From: Mattias Buelens Date: Thu, 16 Apr 2026 14:32:21 +0200 Subject: [PATCH 1/5] Require THEOplayer Web SDK 11.x --- e2e/package-lock.json | 2 +- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/e2e/package-lock.json b/e2e/package-lock.json index 5685eba0e..086bde286 100644 --- a/e2e/package-lock.json +++ b/e2e/package-lock.json @@ -87,7 +87,7 @@ "peerDependencies": { "react": "*", "react-native": "*", - "theoplayer": "^9.12.0 || ^10 || ^11" + "theoplayer": "^11" }, "peerDependenciesMeta": { "theoplayer": { diff --git a/package-lock.json b/package-lock.json index f90a24f0e..bf1df6af3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,7 +40,7 @@ "peerDependencies": { "react": "*", "react-native": "*", - "theoplayer": "^9.12.0 || ^10 || ^11" + "theoplayer": "^11" }, "peerDependenciesMeta": { "theoplayer": { diff --git a/package.json b/package.json index 7505ef920..cd799e19e 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "peerDependencies": { "react": "*", "react-native": "*", - "theoplayer": "^9.12.0 || ^10 || ^11" + "theoplayer": "^11" }, "peerDependenciesMeta": { "theoplayer": { From 5449e145158b1a4d03aa188a60da3077915b921c Mon Sep 17 00:00:00 2001 From: Mattias Buelens Date: Tue, 14 Apr 2026 15:07:30 +0200 Subject: [PATCH 2/5] Enable buildConfig feature --- android/build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/android/build.gradle b/android/build.gradle index 0ae88fa38..23139c788 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -92,6 +92,9 @@ android { minifyEnabled false } } + buildFeatures { + buildConfig true + } lint { disable 'GradleCompatible' } From 7c3fb55bd49f01f586bcad489eb43863c6af3c3e Mon Sep 17 00:00:00 2001 From: Mattias Buelens Date: Tue, 14 Apr 2026 15:09:00 +0200 Subject: [PATCH 3/5] Add `TextTrack.captionChannel` --- .../java/com/theoplayer/track/TrackListAdapter.kt | 4 ++++ src/api/track/TextTrack.ts | 11 +++++++++++ src/internal/adapter/web/TrackUtils.ts | 3 ++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt b/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt index 1db1144db..27b46dde2 100644 --- a/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt +++ b/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt @@ -26,6 +26,7 @@ private const val PROP_NAME = "name" private const val PROP_ENABLED = "enabled" private const val PROP_SRC = "src" private const val PROP_FORCED = "forced" +private const val PROP_CAPTION_CHANNEL = "captionChannel" private const val PROP_AUDIO_SAMPLING_RATE = "audioSamplingRate" private const val PROP_BANDWIDTH = "bandwidth" private const val PROP_QUALITIES = "qualities" @@ -69,6 +70,9 @@ object TrackListAdapter { textTrackPayload.putString(PROP_SRC, textTrack.source) textTrackPayload.putBoolean(PROP_FORCED, textTrack.isForced) + // THEOplayer v10.13+ + textTrack.captionChannel?.let { textTrackPayload.putInt(PROP_CAPTION_CHANNEL, it) } + // Optionally pass cue list. val cueList = textTrack.cues if (cueList != null) { diff --git a/src/api/track/TextTrack.ts b/src/api/track/TextTrack.ts index cfe59f936..f9c3b7be6 100644 --- a/src/api/track/TextTrack.ts +++ b/src/api/track/TextTrack.ts @@ -149,6 +149,17 @@ export interface TextTrack extends Track { *
- For HLS: the corresponding #EXT-X-MEDIA tag contains the attributes TYPE=SUBTITLES and FORCED=YES (not supported yet) */ readonly forced: boolean; + + /** + * The closed caption service number of the text track. + * + * @remarks + *
- For CEA-608 caption tracks, this holds the channel number. + *
- For CEA-708 caption tracks, this holds the service number. + *
- Otherwise, this is `undefined`. + *
- Not yet supported on iOS. + */ + readonly captionChannel?: number; } /** diff --git a/src/internal/adapter/web/TrackUtils.ts b/src/internal/adapter/web/TrackUtils.ts index c8c4baca6..bd0ff83e0 100644 --- a/src/internal/adapter/web/TrackUtils.ts +++ b/src/internal/adapter/web/TrackUtils.ts @@ -41,7 +41,7 @@ export function fromNativeTextTrackList(tracks: NativeTextTrackList): TextTrack[ } export function fromNativeTextTrack(track: NativeTextTrack): TextTrack { - const { id, uid, kind, label, language, mode, type, src, forced } = track; + const { id, uid, kind, label, language, mode, type, src, forced, captionChannel } = track; return { id, @@ -53,6 +53,7 @@ export function fromNativeTextTrack(track: NativeTextTrack): TextTrack { type, src, forced, + captionChannel, cues: track.cues ? track.cues.map((cue) => fromNativeCue(cue)) : [], } as TextTrack; } From 83f968274ea0bca4b1286d740f37a56720fd8e8f Mon Sep 17 00:00:00 2001 From: Mattias Buelens Date: Tue, 14 Apr 2026 15:13:03 +0200 Subject: [PATCH 4/5] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c418c7c1..8adb4368e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Added support for player SDK v11. More info on the [migration documentation](./doc/migrating-to-react-native-theoplayer-11.md) page. - Enabled core library desugaring for Android to support version 3.39.0 of the Google IMA SDK. +- Added `TextTrack.captionChannel` to retrieve the CEA-608 channel and/or CEA-708 service numbers of closed caption text tracks. ### Changed From 935350795857c822fffc57fb38615383160aa18c Mon Sep 17 00:00:00 2001 From: Tom Van Laerhoven Date: Thu, 16 Apr 2026 09:17:33 +0200 Subject: [PATCH 5/5] Use platform tag --- src/api/track/TextTrack.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/api/track/TextTrack.ts b/src/api/track/TextTrack.ts index f9c3b7be6..1ddfe517d 100644 --- a/src/api/track/TextTrack.ts +++ b/src/api/track/TextTrack.ts @@ -153,11 +153,12 @@ export interface TextTrack extends Track { /** * The closed caption service number of the text track. * + * @platform web,android + * * @remarks *
- For CEA-608 caption tracks, this holds the channel number. *
- For CEA-708 caption tracks, this holds the service number. *
- Otherwise, this is `undefined`. - *
- Not yet supported on iOS. */ readonly captionChannel?: number; }