From 3a58d4e834719b7cdc5d396ca49f870ba13a1c02 Mon Sep 17 00:00:00 2001 From: Tom Van Laerhoven Date: Thu, 25 Apr 2024 14:25:47 +0200 Subject: [PATCH 01/10] Fix android example release build script --- example/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/package.json b/example/package.json index 6e9804edb..6b6539796 100644 --- a/example/package.json +++ b/example/package.json @@ -5,7 +5,7 @@ "private": true, "scripts": { "android": "npx react-native run-android", - "android-release": "npx react-native run-android --variant release", + "android-release": "npx react-native run-android --mode release", "ios": "npx react-native run-ios", "web": "webpack-dev-server --config ./web/webpack.config.js --mode development", "web-release": "webpack --config ./web/webpack.config.js --mode production", From e2ffb930dda162e8b2c30022e90f2b2217a5fdc6 Mon Sep 17 00:00:00 2001 From: William Van Haevre Date: Thu, 25 Apr 2024 18:21:47 +0200 Subject: [PATCH 02/10] Add enabled prop to MediaTrack on RN SDK --- src/api/track/MediaTrack.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/api/track/MediaTrack.ts b/src/api/track/MediaTrack.ts index 9db117c02..c6e4fe703 100644 --- a/src/api/track/MediaTrack.ts +++ b/src/api/track/MediaTrack.ts @@ -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 { From a012e1576970887338bfb9902a30075bc9ef9479 Mon Sep 17 00:00:00 2001 From: William Van Haevre Date: Thu, 25 Apr 2024 18:22:16 +0200 Subject: [PATCH 03/10] bridge enabled prop for web --- src/internal/adapter/web/TrackUtils.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/internal/adapter/web/TrackUtils.ts b/src/internal/adapter/web/TrackUtils.ts index 93c0f028a..c8c4baca6 100644 --- a/src/internal/adapter/web/TrackUtils.ts +++ b/src/internal/adapter/web/TrackUtils.ts @@ -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, @@ -71,6 +71,7 @@ export function fromNativeMediaTrack(track: NativeMediaTrack): MediaTrack { uid, activeQuality, qualities, + enabled, } as MediaTrack; } From 9982a4263d16e3ca9b162e2347338221fc317203 Mon Sep 17 00:00:00 2001 From: William Van Haevre Date: Thu, 25 Apr 2024 18:22:30 +0200 Subject: [PATCH 04/10] bridge enabled flag for ios --- ios/THEOplayerRCTTrackMetadataAggregator.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ios/THEOplayerRCTTrackMetadataAggregator.swift b/ios/THEOplayerRCTTrackMetadataAggregator.swift index 62b6c8e2d..a56a9af19 100644 --- a/ios/THEOplayerRCTTrackMetadataAggregator.swift +++ b/ios/THEOplayerRCTTrackMetadataAggregator.swift @@ -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" @@ -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 @@ -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 From 75431bdb87f3e3e547e8cf92b460161ea3736247 Mon Sep 17 00:00:00 2001 From: William Van Haevre Date: Thu, 25 Apr 2024 18:22:54 +0200 Subject: [PATCH 05/10] update selected mediatracks based on track changes from native players --- src/internal/adapter/THEOplayerAdapter.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/internal/adapter/THEOplayerAdapter.ts b/src/internal/adapter/THEOplayerAdapter.ts index a49131226..f5365f839 100644 --- a/src/internal/adapter/THEOplayerAdapter.ts +++ b/src/internal/adapter/THEOplayerAdapter.ts @@ -242,9 +242,15 @@ export class THEOplayerAdapter extends DefaultEventDispatcher 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; } From d32e065df4309e78a24d54fd25d00921885731e5 Mon Sep 17 00:00:00 2001 From: Tom Van Laerhoven Date: Fri, 26 Apr 2024 13:41:53 +0200 Subject: [PATCH 06/10] Bridge enabled flag for Android --- android/src/main/java/com/theoplayer/track/TrackListAdapter.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt b/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt index 0b20bfb19..8d3e7fb3f 100644 --- a/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt +++ b/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt @@ -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" @@ -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 { @@ -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 From 9927e6092442d89fcc25c9e4e0145db84fd72093 Mon Sep 17 00:00:00 2001 From: Tom Van Laerhoven Date: Fri, 26 Apr 2024 14:00:18 +0200 Subject: [PATCH 07/10] Update docs on audio focus mgmt --- doc/audio-control.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/doc/audio-control.md b/doc/audio-control.md index e6cf9c560..fb2206915 100644 --- a/doc/audio-control.md +++ b/doc/audio-control.md @@ -24,17 +24,16 @@ the player will regain audio focus afterward and play-out while resume. ### Audio "ducking" When another app seeks audio focus, it can optionally indicate that the current audio focus holder can -lower its playback volume to continue playing (AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK). The new focus holder does +lower its playback volume to continue playing (`AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK`). The new focus holder does not require other apps to be silent. This behavior is known as "ducking." -However, `react-native-theoplayer` does not perform audio "ducking"; it consistently pauses playback. - In summary: -| Event | Action | -|--------------------------------------------------|-----------------| -| `AUDIOFOCUS_LOSS`, `AUDIOFOCUS_LOSS_TRANSIENT`, `AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK` | Pause play-out | -| `AUDIOFOCUS_GAIN` | Resume play-out | +| Event | Action | +|------------------------------------------------|-----------------------------------| +| `AUDIOFOCUS_LOSS`, `AUDIOFOCUS_LOSS_TRANSIENT` | Pause play-out | +| `AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK` | Lower volume | +| `AUDIOFOCUS_GAIN` | Resume play-out or restore volume | ## Audio Becoming Noisy From 6e6ec5d624f3452f0455e68df810c0f901f5b02d Mon Sep 17 00:00:00 2001 From: William Van Haevre Date: Fri, 26 Apr 2024 16:45:54 +0200 Subject: [PATCH 08/10] Add changelog entry --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f26873629..f0361d409 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.1.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## Unreleased + +### Fixed + +- Fixed an issue where the selectedAudioTrack and selectedVideoTrack were not is sync with the ctual selected mediatracks on the native player. + ## [7.1.0] - 24-04-23 ### Fixed From fa4766f261a91f65d4ffb84c81e4af9b1a508584 Mon Sep 17 00:00:00 2001 From: William Van Haevre Date: Fri, 26 Apr 2024 16:50:01 +0200 Subject: [PATCH 09/10] Prepare changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 324b057e1..b25601d7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.1.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). -## Unreleased +## [7.1.1] - 26-04-23 ### Fixed From 79a677b9d3a5c853321d26068acf80091fca07ae Mon Sep 17 00:00:00 2001 From: William Van Haevre Date: Fri, 26 Apr 2024 16:50:19 +0200 Subject: [PATCH 10/10] 7.1.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index ffc2e6dab..03bb8de10 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "react-native-theoplayer", - "version": "7.1.0", + "version": "7.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "react-native-theoplayer", - "version": "7.1.0", + "version": "7.1.1", "license": "SEE LICENSE AT https://www.theoplayer.com/terms", "dependencies": { "buffer": "^6.0.3" diff --git a/package.json b/package.json index baf5342bb..3f6d42914 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-theoplayer", - "version": "7.1.0", + "version": "7.1.1", "description": "A THEOplayer video component for react-native.", "main": "lib/commonjs/index", "module": "lib/module/index",