Merge pull request #2215 from valtech-sd/master

Resolved ignored silent switch in iOS when player is set to paused
This commit is contained in:
Jonas Dalesjö 2021-09-09 21:34:50 +02:00 committed by GitHub
commit bf11502fdb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -918,6 +918,7 @@ static int const RCTVideoUnset = -1;
- (void)setIgnoreSilentSwitch:(NSString *)ignoreSilentSwitch - (void)setIgnoreSilentSwitch:(NSString *)ignoreSilentSwitch
{ {
_ignoreSilentSwitch = ignoreSilentSwitch; _ignoreSilentSwitch = ignoreSilentSwitch;
[self configureAudio];
[self applyModifiers]; [self applyModifiers];
} }
@ -933,29 +934,8 @@ static int const RCTVideoUnset = -1;
[_player pause]; [_player pause];
[_player setRate:0.0]; [_player setRate:0.0];
} else { } else {
AVAudioSession *session = [AVAudioSession sharedInstance];
AVAudioSessionCategory category = nil;
AVAudioSessionCategoryOptions options = nil;
if([_ignoreSilentSwitch isEqualToString:@"ignore"]) { [self configureAudio];
category = AVAudioSessionCategoryPlayback;
} else if([_ignoreSilentSwitch isEqualToString:@"obey"]) {
category = AVAudioSessionCategoryAmbient;
}
if([_mixWithOthers isEqualToString:@"mix"]) {
options = AVAudioSessionCategoryOptionMixWithOthers;
} else if([_mixWithOthers isEqualToString:@"duck"]) {
options = AVAudioSessionCategoryOptionDuckOthers;
}
if (category != nil && options != nil) {
[session setCategory:category withOptions:options error:nil];
} else if (category != nil && options == nil) {
[session setCategory:category error:nil];
} else if (category == nil && options != nil) {
[session setCategory:session.category withOptions:options error:nil];
}
if (@available(iOS 10.0, *) && !_automaticallyWaitsToMinimizeStalling) { if (@available(iOS 10.0, *) && !_automaticallyWaitsToMinimizeStalling) {
[_player playImmediatelyAtRate:_rate]; [_player playImmediatelyAtRate:_rate];
@ -1089,6 +1069,33 @@ static int const RCTVideoUnset = -1;
[self setAllowsExternalPlayback:_allowsExternalPlayback]; [self setAllowsExternalPlayback:_allowsExternalPlayback];
} }
- (void)configureAudio
{
AVAudioSession *session = [AVAudioSession sharedInstance];
AVAudioSessionCategory category = nil;
AVAudioSessionCategoryOptions options = nil;
if([_ignoreSilentSwitch isEqualToString:@"ignore"]) {
category = AVAudioSessionCategoryPlayback;
} else if([_ignoreSilentSwitch isEqualToString:@"obey"]) {
category = AVAudioSessionCategoryAmbient;
}
if([_mixWithOthers isEqualToString:@"mix"]) {
options = AVAudioSessionCategoryOptionMixWithOthers;
} else if([_mixWithOthers isEqualToString:@"duck"]) {
options = AVAudioSessionCategoryOptionDuckOthers;
}
if (category != nil && options != nil) {
[session setCategory:category withOptions:options error:nil];
} else if (category != nil && options == nil) {
[session setCategory:category error:nil];
} else if (category == nil && options != nil) {
[session setCategory:session.category withOptions:options error:nil];
}
}
- (void)setRepeat:(BOOL)repeat { - (void)setRepeat:(BOOL)repeat {
_repeat = repeat; _repeat = repeat;
} }
@ -1130,12 +1137,20 @@ static int const RCTVideoUnset = -1;
} }
} }
} else { // default. invalid type or "system" } else { // default. invalid type or "system"
#if TARGET_OS_TV
// Do noting. Fix for tvOS native audio menu language selector
#else
[_player.currentItem selectMediaOptionAutomaticallyInMediaSelectionGroup:group]; [_player.currentItem selectMediaOptionAutomaticallyInMediaSelectionGroup:group];
return; return;
#endif
} }
#if TARGET_OS_TV
// 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 // If a match isn't found, option will be nil and text tracks will be disabled
[_player.currentItem selectMediaOption:mediaOption inMediaSelectionGroup:group]; [_player.currentItem selectMediaOption:mediaOption inMediaSelectionGroup:group];
#endif
} }
- (void)setSelectedAudioTrack:(NSDictionary *)selectedAudioTrack { - (void)setSelectedAudioTrack:(NSDictionary *)selectedAudioTrack {