Merge remote-tracking branch 'upstream/master' into implement-ios-caching
This commit is contained in:
commit
9f2cb8f92d
@ -31,7 +31,7 @@ yarn add react-native-video
|
|||||||
<details>
|
<details>
|
||||||
<summary>iOS</summary>
|
<summary>iOS</summary>
|
||||||
|
|
||||||
Run `react-native link` to link the react-native-video library.
|
Run `react-native link react-native-video` to link the react-native-video library.
|
||||||
|
|
||||||
If you would like to allow other apps to play music over your video component, add:
|
If you would like to allow other apps to play music over your video component, add:
|
||||||
|
|
||||||
@ -79,9 +79,7 @@ end
|
|||||||
<details>
|
<details>
|
||||||
<summary>tvOS</summary>
|
<summary>tvOS</summary>
|
||||||
|
|
||||||
Run `react-native link` to link the react-native-video library.
|
`react-native link react-native-video` doesn’t work properly with the tvOS target so we need to add the library manually.
|
||||||
|
|
||||||
`react-native link` doesn’t work properly with the tvOS target so we need to add the library manually.
|
|
||||||
|
|
||||||
First select your project in Xcode.
|
First select your project in Xcode.
|
||||||
|
|
||||||
@ -103,7 +101,7 @@ Select RCTVideo-tvOS
|
|||||||
<details>
|
<details>
|
||||||
<summary>Android</summary>
|
<summary>Android</summary>
|
||||||
|
|
||||||
Run `react-native link` to link the react-native-video library.
|
Run `react-native link react-native-video` to link the react-native-video library.
|
||||||
|
|
||||||
Or if you have trouble, make the following additions to the given files manually:
|
Or if you have trouble, make the following additions to the given files manually:
|
||||||
|
|
||||||
|
@ -13,6 +13,8 @@ static NSString *const readyForDisplayKeyPath = @"readyForDisplay";
|
|||||||
static NSString *const playbackRate = @"rate";
|
static NSString *const playbackRate = @"rate";
|
||||||
static NSString *const timedMetadata = @"timedMetadata";
|
static NSString *const timedMetadata = @"timedMetadata";
|
||||||
|
|
||||||
|
static int const RCTVideoUnset = -1;
|
||||||
|
|
||||||
@implementation RCTVideo
|
@implementation RCTVideo
|
||||||
{
|
{
|
||||||
AVPlayer *_player;
|
AVPlayer *_player;
|
||||||
@ -838,7 +840,7 @@ static NSString *const timedMetadata = @"timedMetadata";
|
|||||||
|
|
||||||
- (void) setSideloadedText {
|
- (void) setSideloadedText {
|
||||||
NSString *type = _selectedTextTrack[@"type"];
|
NSString *type = _selectedTextTrack[@"type"];
|
||||||
NSArray* textTracks = [self getTextTrackInfo];
|
NSArray *textTracks = [self getTextTrackInfo];
|
||||||
|
|
||||||
// The first few tracks will be audio & video track
|
// The first few tracks will be audio & video track
|
||||||
int firstTextIndex = 0;
|
int firstTextIndex = 0;
|
||||||
@ -848,7 +850,7 @@ static NSString *const timedMetadata = @"timedMetadata";
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int selectedTrackIndex = -1;
|
int selectedTrackIndex = RCTVideoUnset;
|
||||||
|
|
||||||
if ([type isEqualToString:@"disabled"]) {
|
if ([type isEqualToString:@"disabled"]) {
|
||||||
// Do nothing. We want to ensure option is nil
|
// Do nothing. We want to ensure option is nil
|
||||||
@ -877,29 +879,27 @@ static NSString *const timedMetadata = @"timedMetadata";
|
|||||||
selectedTrackIndex = index;
|
selectedTrackIndex = index;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else { // type "system"
|
||||||
|
CFArrayRef captioningMediaCharacteristics = MACaptionAppearanceCopyPreferredCaptioningMediaCharacteristics(kMACaptionAppearanceDomainUser);
|
||||||
// user's selected language might not be available, or system defaults have captions enabled
|
NSArray *captionSettings = (__bridge NSArray*)captioningMediaCharacteristics;
|
||||||
if (selectedTrackIndex == -1 || [type isEqualToString:@"default"]) {
|
if ([captionSettings containsObject:AVMediaCharacteristicTranscribesSpokenDialogForAccessibility]) {
|
||||||
CFArrayRef captioningMediaCharacteristics = MACaptionAppearanceCopyPreferredCaptioningMediaCharacteristics(kMACaptionAppearanceDomainUser);
|
selectedTrackIndex = 0; // If we can't find a match, use the first available track
|
||||||
NSArray *captionSettings = (__bridge NSArray*)captioningMediaCharacteristics;
|
NSString *systemLanguage = [[NSLocale preferredLanguages] firstObject];
|
||||||
if ([captionSettings containsObject: AVMediaCharacteristicTranscribesSpokenDialogForAccessibility]) {
|
for (int i = 0; i < textTracks.count; ++i) {
|
||||||
// iterate through the textTracks to find a matching option, or default to the first object.
|
NSDictionary *currentTextTrack = [textTracks objectAtIndex:i];
|
||||||
selectedTrackIndex = 0;
|
if ([systemLanguage isEqualToString:currentTextTrack[@"language"]]) {
|
||||||
|
selectedTrackIndex = i;
|
||||||
NSString * systemLanguage = [[NSLocale preferredLanguages] firstObject];
|
break;
|
||||||
for (int i = 0; i < textTracks.count; ++i) {
|
|
||||||
NSDictionary *currentTextTrack = [textTracks objectAtIndex:i];
|
|
||||||
if ([systemLanguage isEqualToString:currentTextTrack[@"language"]]) {
|
|
||||||
selectedTrackIndex = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = firstTextIndex; i < _player.currentItem.tracks.count; ++i) {
|
for (int i = firstTextIndex; i < _player.currentItem.tracks.count; ++i) {
|
||||||
BOOL isEnabled = i == selectedTrackIndex + firstTextIndex;
|
BOOL isEnabled = NO;
|
||||||
|
if (selectedTrackIndex != RCTVideoUnset) {
|
||||||
|
isEnabled = i == selectedTrackIndex + firstTextIndex;
|
||||||
|
}
|
||||||
[_player.currentItem.tracks[i] setEnabled:isEnabled];
|
[_player.currentItem.tracks[i] setEnabled:isEnabled];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user