diff --git a/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt b/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt index 27b46dde2..7b81c9050 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_IN_BAND_METADATA_TRACK_DISPATCH_TYPE = "inBandMetadataTrackDispatchType" private const val PROP_CAPTION_CHANNEL = "captionChannel" private const val PROP_AUDIO_SAMPLING_RATE = "audioSamplingRate" private const val PROP_BANDWIDTH = "bandwidth" @@ -71,6 +72,7 @@ object TrackListAdapter { textTrackPayload.putBoolean(PROP_FORCED, textTrack.isForced) // THEOplayer v10.13+ + textTrackPayload.putString(PROP_IN_BAND_METADATA_TRACK_DISPATCH_TYPE, textTrack.inBandMetadataTrackDispatchType ?: "") textTrack.captionChannel?.let { textTrackPayload.putInt(PROP_CAPTION_CHANNEL, it) } // Optionally pass cue list. diff --git a/ios/THEOplayerRCTTrackMetadataAggregator.swift b/ios/THEOplayerRCTTrackMetadataAggregator.swift index 8e0700e93..7799cccf8 100644 --- a/ios/THEOplayerRCTTrackMetadataAggregator.swift +++ b/ios/THEOplayerRCTTrackMetadataAggregator.swift @@ -29,6 +29,7 @@ let PROP_CUE_CONTENT: String = "content" let PROP_CUE_CUSTOM_ATTRIBUTES: String = "customAttributes" let PROP_SRC: String = "src" let PROP_FORCED: String = "forced" +let PROP_IN_BAND_METADATA_TRACK_DISPATCH_TYPE: String = "inBandMetadataTrackDispatchType" let PROP_START_DATE: String = "startDate" let PROP_END_DATE: String = "endDate" let PROP_ATTRIBUTE_CLASS: String = "class" @@ -78,6 +79,7 @@ class THEOplayerRCTTrackMetadataAggregator { entry[PROP_TYPE] = textTrack.type entry[PROP_SRC] = textTrack.src entry[PROP_FORCED] = textTrack.forced + entry[PROP_IN_BAND_METADATA_TRACK_DISPATCH_TYPE] = textTrack.inBandMetadataTrackDispatchType // process cues when texttrack contains them if !textTrack.cues.isEmpty { var cueList: [[String:Any]] = [] @@ -311,6 +313,7 @@ class THEOplayerRCTTrackMetadataAggregator { track[PROP_LABEL] = trackDescription.label ?? "no label" track[PROP_TYPE] = "webvtt" track[PROP_SRC] = trackDescription.src.absoluteString + track[PROP_IN_BAND_METADATA_TRACK_DISPATCH_TYPE] = "" var cueList: [[String:Any]] = [] var cueIndex = 0 for c in cues { diff --git a/src/api/track/TextTrack.ts b/src/api/track/TextTrack.ts index 1ddfe517d..ce77c5853 100644 --- a/src/api/track/TextTrack.ts +++ b/src/api/track/TextTrack.ts @@ -150,6 +150,11 @@ export interface TextTrack extends Track { */ readonly forced: boolean; + /** + * The in-band metadata track dispatch type of the text track. + */ + readonly inBandMetadataTrackDispatchType: string; + /** * The closed caption service number of the text track. * diff --git a/src/internal/adapter/web/TrackUtils.ts b/src/internal/adapter/web/TrackUtils.ts index bd0ff83e0..429b0fd4a 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, captionChannel } = track; + const { id, uid, kind, label, language, mode, type, src, forced, inBandMetadataTrackDispatchType, captionChannel } = track; return { id, @@ -53,6 +53,7 @@ export function fromNativeTextTrack(track: NativeTextTrack): TextTrack { type, src, forced, + inBandMetadataTrackDispatchType, captionChannel, cues: track.cues ? track.cues.map((cue) => fromNativeCue(cue)) : [], } as TextTrack;