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 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' } 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/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": { diff --git a/src/api/track/TextTrack.ts b/src/api/track/TextTrack.ts index cfe59f936..1ddfe517d 100644 --- a/src/api/track/TextTrack.ts +++ b/src/api/track/TextTrack.ts @@ -149,6 +149,18 @@ 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. + * + * @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`. + */ + 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; }