diff --git a/examples/basic/src/VideoPlayer.tsx b/examples/basic/src/VideoPlayer.tsx index 7b858627b0..c44ee37253 100644 --- a/examples/basic/src/VideoPlayer.tsx +++ b/examples/basic/src/VideoPlayer.tsx @@ -104,6 +104,9 @@ class VideoPlayer extends Component { seekerWidth = 0; + // internal usage change to index if you want to select tracks by index instead of lang + textTracksSelectionBy = 'lang'; + srcAllPlatformList = [ { description: 'local file landscape', @@ -300,7 +303,10 @@ class VideoPlayer extends Component { if (selectedTrack?.language) { this.setState({ textTracks: data.textTracks, - selectedTextTrack: { + selectedTextTrack: this.textTracksSelectionBy === 'index' ? { + type: 'index', + value: selectedTrack?.index, + }: { type: 'language', value: selectedTrack?.language, }, @@ -804,7 +810,7 @@ class VideoPlayer extends Component { console.log('on value change ' + itemValue); this.setState({ selectedTextTrack: { - type: 'language', + type: this.textTracksSelectionBy === 'index' ? 'index': 'language', value: itemValue, }, }); @@ -814,13 +820,21 @@ class VideoPlayer extends Component { if (!track) { return; } - return ( - - ); + if (this.textTracksSelectionBy === 'index') { + return ( + ); + } else { + return ( + ); + } })} )} diff --git a/ios/Video/DataStructures/SelectedTrackCriteria.swift b/ios/Video/DataStructures/SelectedTrackCriteria.swift index 41d68affc4..b4217817af 100644 --- a/ios/Video/DataStructures/SelectedTrackCriteria.swift +++ b/ios/Video/DataStructures/SelectedTrackCriteria.swift @@ -1,6 +1,6 @@ struct SelectedTrackCriteria { let type: String - let value: Any? + let value: String? let json: NSDictionary? @@ -13,6 +13,6 @@ struct SelectedTrackCriteria { } self.json = json self.type = json["type"] as? String ?? "" - self.value = json["value"] + self.value = json["value"] as? String } } diff --git a/ios/Video/Features/RCTPlayerOperations.swift b/ios/Video/Features/RCTPlayerOperations.swift index 3f25515923..9c80c85f3e 100644 --- a/ios/Video/Features/RCTPlayerOperations.swift +++ b/ios/Video/Features/RCTPlayerOperations.swift @@ -45,9 +45,11 @@ enum RCTPlayerOperations { } } } else if type == "index" { - if let value = criteria?.value, let index = value as? Int { - if textTracks.count > index { - selectedTrackIndex = index + if let value = criteria?.value { // check value is provided + if let indexValue = Int(value as String) { // ensure value is an integer an String to Snt + if textTracks.count > indexValue { // ensure value is in group range + selectedTrackIndex = indexValue + } } } } @@ -106,9 +108,11 @@ enum RCTPlayerOperations { // } else if ([type isEqualToString:@"default"]) { // option = group.defaultOption; */ } else if type == "index" { - if let value = criteria?.value, let index = value as? Int { - if group.options.count > index { - mediaOption = group.options[index] + if let value = criteria?.value { // check value is provided + if let indexValue = Int(value as String) { // ensure value is an integer an String to Snt + if group.options.count > indexValue { // ensure value is in group range + mediaOption = group.options[indexValue] + } } } } else { // default. invalid type or "system"