Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bugfix/update selected media track #313

Merged
merged 6 commits into from
Apr 26, 2024
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ private const val PROP_LABEL = "label"
private const val PROP_TYPE = "type"
private const val PROP_CODECS = "codecs"
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_AUDIO_SAMPLING_RATE = "audioSamplingRate"
Expand Down Expand Up @@ -165,6 +166,7 @@ object TrackListAdapter {
audioTrackPayload.putString(PROP_KIND, audioTrack.kind)
audioTrackPayload.putString(PROP_LABEL, audioTrack.label)
audioTrackPayload.putString(PROP_LANGUAGE, audioTrack.language)
audioTrackPayload.putBoolean(PROP_ENABLED, audioTrack.isEnabled)
val qualityList = audioTrack.qualities
val qualities = Arguments.createArray()
try {
Expand Down Expand Up @@ -209,6 +211,7 @@ object TrackListAdapter {
videoTrackPayload.putString(PROP_KIND, videoTrack.kind)
videoTrackPayload.putString(PROP_LABEL, videoTrack.label)
videoTrackPayload.putString(PROP_LANGUAGE, videoTrack.language)
videoTrackPayload.putBoolean(PROP_ENABLED, videoTrack.isEnabled)
val qualities = Arguments.createArray()
try {
val qualityList = videoTrack.qualities
Expand Down
3 changes: 3 additions & 0 deletions ios/THEOplayerRCTTrackMetadataAggregator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ let PROP_KIND: String = "kind"
let PROP_LANGUAGE: String = "language"
let PROP_MODE: String = "mode"
let PROP_LABEL: String = "label"
let PROP_ENABLED: String = "enabled"
let PROP_TYPE: String = "type"
let PROP_QUALITIES: String = "qualities"
let PROP_ACTIVE_QUALITY: String = "activeQuality"
Expand Down Expand Up @@ -183,6 +184,7 @@ class THEOplayerRCTTrackMetadataAggregator {
entry[PROP_KIND] = audioTrack.kind
entry[PROP_LANGUAGE] = audioTrack.language
entry[PROP_LABEL] = audioTrack.label
entry[PROP_ENABLED] = audioTrack.enabled
entry[PROP_QUALITIES] = [] // empty: qualities are not being exposed on iOS
//entry[PROP_ACTIVE_QUALITY] = // undefined: qualities are not being exposed on iOS
//entry[PROP_TARGET_QUALITY] = // undefined: qualities are not being exposed on iOS
Expand Down Expand Up @@ -223,6 +225,7 @@ class THEOplayerRCTTrackMetadataAggregator {
entry[PROP_KIND] = videoTrack.kind
entry[PROP_LANGUAGE] = videoTrack.language
entry[PROP_LABEL] = videoTrack.label
entry[PROP_ENABLED] = videoTrack.enabled
entry[PROP_QUALITIES] = [] // empty: qualities are not being exposed on iOS
//entry[PROP_ACTIVE_QUALITY] = // undefined: qualities are not being exposed on iOS
//entry[PROP_TARGET_QUALITY] = // undefined: qualities are not being exposed on iOS
Expand Down
5 changes: 5 additions & 0 deletions src/api/track/MediaTrack.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@ export interface MediaTrack extends Track {
* The qualities of the media track.
*/
readonly qualities: Quality[];

/**
* Marks the track to be the selected track for playout
*/
readonly enabled: boolean;
}

export function findMediaTrackByUid(mediaTracks: MediaTrack[], uid: number | undefined): MediaTrack | undefined {
Expand Down
6 changes: 6 additions & 0 deletions src/internal/adapter/THEOplayerAdapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -242,9 +242,15 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
if (isAudio) {
this._state.audioTracks = removeTrack(this._state.audioTracks, track);
this._state.audioTracks = addTrack(this._state.audioTracks, track);
if (track.enabled) {
this._state.selectedAudioTrack = track.uid;
}
} else {
this._state.videoTracks = removeTrack(this._state.videoTracks, track);
this._state.videoTracks = addTrack(this._state.videoTracks, track);
if (track.enabled) {
this._state.selectedVideoTrack = track.uid;
}
}
break;
}
Expand Down
3 changes: 2 additions & 1 deletion src/internal/adapter/web/TrackUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ export function fromNativeMediaTrackList(tracks: NativeMediaTrackList): MediaTra
}

export function fromNativeMediaTrack(track: NativeMediaTrack): MediaTrack {
const { id, uid, kind, label, language, activeQuality, qualities } = track;
const { id, uid, kind, label, language, activeQuality, qualities, enabled } = track;
return {
kind,
label,
Expand All @@ -71,6 +71,7 @@ export function fromNativeMediaTrack(track: NativeMediaTrack): MediaTrack {
uid,
activeQuality,
qualities,
enabled,
} as MediaTrack;
}

Expand Down
Loading