fix: ensure tracks are available in sample (#3660)
* fix(ts): onPlaybackRateChangeData was not correctly typed * fix: ensure tracks are well displayed in the sample
This commit is contained in:
parent
453907483d
commit
4c7719a3f5
@ -735,10 +735,11 @@ class VideoPlayer extends Component {
|
|||||||
<View style={styles.generalControls}>
|
<View style={styles.generalControls}>
|
||||||
<Text style={styles.controlOption}>AudioTrack</Text>
|
<Text style={styles.controlOption}>AudioTrack</Text>
|
||||||
{this.state.audioTracks?.length <= 0 ? (
|
{this.state.audioTracks?.length <= 0 ? (
|
||||||
<Text style={styles.controlOption}>empty</Text>
|
<Text style={styles.emptyPickerItem}>empty</Text>
|
||||||
) : (
|
) : (
|
||||||
<Picker
|
<Picker
|
||||||
style={styles.picker}
|
style={styles.picker}
|
||||||
|
itemStyle={styles.pickerItem}
|
||||||
selectedValue={this.state.selectedAudioTrack?.value}
|
selectedValue={this.state.selectedAudioTrack?.value}
|
||||||
onValueChange={itemValue => {
|
onValueChange={itemValue => {
|
||||||
console.log('on audio value change ' + itemValue);
|
console.log('on audio value change ' + itemValue);
|
||||||
@ -765,10 +766,11 @@ class VideoPlayer extends Component {
|
|||||||
)}
|
)}
|
||||||
<Text style={styles.controlOption}>TextTrack</Text>
|
<Text style={styles.controlOption}>TextTrack</Text>
|
||||||
{this.state.textTracks?.length <= 0 ? (
|
{this.state.textTracks?.length <= 0 ? (
|
||||||
<Text style={styles.controlOption}>empty</Text>
|
<Text style={styles.emptyPickerItem}>empty</Text>
|
||||||
) : (
|
) : (
|
||||||
<Picker
|
<Picker
|
||||||
style={styles.picker}
|
style={styles.picker}
|
||||||
|
itemStyle={styles.pickerItem}
|
||||||
selectedValue={this.state.selectedTextTrack?.value}
|
selectedValue={this.state.selectedTextTrack?.value}
|
||||||
onValueChange={itemValue => {
|
onValueChange={itemValue => {
|
||||||
console.log('on value change ' + itemValue);
|
console.log('on value change ' + itemValue);
|
||||||
@ -960,6 +962,13 @@ const styles = StyleSheet.create({
|
|||||||
paddingRight: 2,
|
paddingRight: 2,
|
||||||
lineHeight: 12,
|
lineHeight: 12,
|
||||||
},
|
},
|
||||||
|
pickerContainer: {
|
||||||
|
width: 100,
|
||||||
|
alignSelf: 'center',
|
||||||
|
color: 'white',
|
||||||
|
borderWidth: 1,
|
||||||
|
borderColor: 'red',
|
||||||
|
},
|
||||||
IndicatorStyle: {
|
IndicatorStyle: {
|
||||||
flex: 1,
|
flex: 1,
|
||||||
justifyContent: 'center',
|
justifyContent: 'center',
|
||||||
@ -997,10 +1006,24 @@ const styles = StyleSheet.create({
|
|||||||
width: 12,
|
width: 12,
|
||||||
},
|
},
|
||||||
picker: {
|
picker: {
|
||||||
color: 'white',
|
|
||||||
flex: 1,
|
flex: 1,
|
||||||
flexDirection: 'row',
|
flexDirection: 'row',
|
||||||
justifyContent: 'center',
|
justifyContent: 'center',
|
||||||
|
width: 100,
|
||||||
|
height: 40,
|
||||||
|
},
|
||||||
|
pickerItem: {
|
||||||
|
color: 'white',
|
||||||
|
width: 100,
|
||||||
|
height: 40,
|
||||||
|
},
|
||||||
|
emptyPickerItem: {
|
||||||
|
color: 'white',
|
||||||
|
marginTop: 20,
|
||||||
|
marginLeft: 20,
|
||||||
|
flex: 1,
|
||||||
|
width: 100,
|
||||||
|
height: 40,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -78,57 +78,6 @@ enum RCTPlayerOperations {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// UNUSED
|
|
||||||
static func setStreamingText(player: AVPlayer?, criteria: SelectedTrackCriteria?) async {
|
|
||||||
let type = criteria?.type
|
|
||||||
var mediaOption: AVMediaSelectionOption!
|
|
||||||
|
|
||||||
guard let group = await RCTVideoAssetsUtils.getMediaSelectionGroup(asset: player?.currentItem?.asset, for: .legible) else {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if type == "disabled" {
|
|
||||||
// Do nothing. We want to ensure option is nil
|
|
||||||
} else if (type == "language") || (type == "title") {
|
|
||||||
let value = criteria?.value as? String
|
|
||||||
for i in 0 ..< group.options.count {
|
|
||||||
let currentOption: AVMediaSelectionOption! = group.options[i]
|
|
||||||
var optionValue: String!
|
|
||||||
if type == "language" {
|
|
||||||
optionValue = currentOption.extendedLanguageTag
|
|
||||||
} else {
|
|
||||||
optionValue = currentOption.commonMetadata.map(\.value)[0] as! String
|
|
||||||
}
|
|
||||||
if value == optionValue {
|
|
||||||
mediaOption = currentOption
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// } 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]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else { // default. invalid type or "system"
|
|
||||||
#if os(tvOS)
|
|
||||||
// Do noting. Fix for tvOS native audio menu language selector
|
|
||||||
#else
|
|
||||||
await player?.currentItem?.selectMediaOptionAutomatically(in: group)
|
|
||||||
return
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#if os(tvOS)
|
|
||||||
// Do noting. Fix for tvOS native audio menu language selector
|
|
||||||
#else
|
|
||||||
// If a match isn't found, option will be nil and text tracks will be disabled
|
|
||||||
await player?.currentItem?.select(mediaOption, in: group)
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static func setMediaSelectionTrackForCharacteristic(player: AVPlayer?, characteristic: AVMediaCharacteristic, criteria: SelectedTrackCriteria?) async {
|
static func setMediaSelectionTrackForCharacteristic(player: AVPlayer?, characteristic: AVMediaCharacteristic, criteria: SelectedTrackCriteria?) async {
|
||||||
let type = criteria?.type
|
let type = criteria?.type
|
||||||
var mediaOption: AVMediaSelectionOption!
|
var mediaOption: AVMediaSelectionOption!
|
||||||
|
@ -1499,7 +1499,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
|
|||||||
let audioTracks = await RCTVideoUtils.getAudioTrackInfo(self._player)
|
let audioTracks = await RCTVideoUtils.getAudioTrackInfo(self._player)
|
||||||
let textTracks = await RCTVideoUtils.getTextTrackInfo(self._player)
|
let textTracks = await RCTVideoUtils.getTextTrackInfo(self._player)
|
||||||
|
|
||||||
self.onTextTracks?(["textTracks": textTracks])
|
self.onTextTracks?(["textTracks": self._textTracks?.compactMap { $0.json } ?? textTracks.compactMap(\.json)])
|
||||||
self.onAudioTracks?(["audioTracks": audioTracks])
|
self.onAudioTracks?(["audioTracks": audioTracks])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user