Skip to content

Commit cf45f11

Browse files
authored
Merge pull request #817 from THEOplayer/feature/ios-theolive-targetqualities
Feature/ios theolive targetqualities
2 parents b2c5c0f + 3d0aaf1 commit cf45f11

3 files changed

Lines changed: 28 additions & 7 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
1010
### Added
1111

1212
- Added `useSystemCaptionStyle` flag to `PlayerConfiguration` on Android. When set to `true`, the player will apply the caption styles as configured in the system settings.
13+
- Added support on iOS for controlling the targetQualities on THEOlive streams.
1314

1415
### Fixed
1516

ios/THEOplayerRCTBridge.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ @interface RCT_EXTERN_REMAP_MODULE(THEORCTPlayerModule, THEOplayerRCTPlayerAPI,
113113
uid:(nonnull NSNumber *)uid)
114114

115115
RCT_EXTERN_METHOD(setTargetVideoQuality:(nonnull NSNumber *)node
116-
uid:(nonnull NSNumber *)uid)
116+
uids:(nonnull NSArray<NSNumber *> *)uids)
117117

118118
RCT_EXTERN_METHOD(setPreload:(nonnull NSNumber *)node
119119
type:(nonnull NSString *)type)

ios/THEOplayerRCTPlayerAPI.swift

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import THEOplayerSDK
1010
import THEOplayerConnectorSideloadedSubtitle
1111
#endif
1212

13-
let ERROR_MESSAGE_PLAYER_QUALITY_UNSUPPORTED_FEATURE: String = "Setting a target video quality is not supported on iOS/tvOS."
14-
1513
let TTS_PROP_BACKGROUND_COLOR = "backgroundColor"
1614
let TTS_PROP_EDGE_STYLE = "edgeStyle"
1715
let TTS_PROP_FONT_COLOR = "fontColor"
@@ -337,10 +335,32 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
337335
}
338336
}
339337

340-
@objc(setTargetVideoQuality:uid:)
341-
func setTargetVideoQuality(_ node: NSNumber, uid: [NSNumber]) -> Void {
342-
if DEBUG_PLAYER_API { print(ERROR_MESSAGE_PLAYER_QUALITY_UNSUPPORTED_FEATURE) }
343-
return
338+
@objc(setTargetVideoQuality:uids:)
339+
func setTargetVideoQuality(_ node: NSNumber, uids: [NSNumber]) -> Void {
340+
DispatchQueue.main.async {
341+
if let theView = self.bridge.uiManager.view(forReactTag: node) as? THEOplayerRCTView,
342+
let player = theView.player {
343+
let videoTracks: VideoTrackList = player.videoTracks
344+
guard videoTracks.count > 0 else {
345+
return
346+
}
347+
var activeVideoTrack: VideoTrack?
348+
for i in 0...videoTracks.count-1 {
349+
let videoTrack: MediaTrack = videoTracks.get(i)
350+
if videoTrack.enabled {
351+
activeVideoTrack = videoTrack as? VideoTrack
352+
}
353+
}
354+
if let foundTrack = activeVideoTrack {
355+
let matchingQualities = (0..<foundTrack.qualities.count).compactMap { index in
356+
let quality = foundTrack.qualities.get(index)
357+
return uids.contains { $0.intValue == quality.bandwidth } ? quality : nil
358+
}
359+
foundTrack.targetQualities = matchingQualities
360+
if DEBUG_PLAYER_API { PrintUtils.printLog(logText: "[NATIVE] targetQualities: \(uids) set on active videotrack.") }
361+
}
362+
}
363+
}
344364
}
345365

346366
@objc(setPreload:type:)

0 commit comments

Comments
 (0)