Skip to content

Commit

Permalink
Merge pull request #2215 from valtech-sd/master
Browse files Browse the repository at this point in the history
Resolved ignored silent switch in iOS when player is set to paused
  • Loading branch information
zchwyng authored Sep 9, 2021
2 parents 724b862 + 688650a commit bf11502
Showing 1 changed file with 42 additions and 27 deletions.
69 changes: 42 additions & 27 deletions ios/Video/RCTVideo.m
Original file line number Diff line number Diff line change
Expand Up @@ -918,6 +918,7 @@ - (void)setupPipController {
- (void)setIgnoreSilentSwitch:(NSString *)ignoreSilentSwitch
{
_ignoreSilentSwitch = ignoreSilentSwitch;
[self configureAudio];
[self applyModifiers];
}

Expand All @@ -933,29 +934,8 @@ - (void)setPaused:(BOOL)paused
[_player pause];
[_player setRate:0.0];
} else {
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];
}
[self configureAudio];

if (@available(iOS 10.0, *) && !_automaticallyWaitsToMinimizeStalling) {
[_player playImmediatelyAtRate:_rate];
Expand Down Expand Up @@ -1089,6 +1069,33 @@ - (void)applyModifiers
[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 {
_repeat = repeat;
}
Expand Down Expand Up @@ -1130,12 +1137,20 @@ - (void)setMediaSelectionTrackForCharacteristic:(AVMediaCharacteristic)character
}
}
} else { // default. invalid type or "system"
[_player.currentItem selectMediaOptionAutomaticallyInMediaSelectionGroup:group];
return;
#if TARGET_OS_TV
// Do noting. Fix for tvOS native audio menu language selector
#else
[_player.currentItem selectMediaOptionAutomaticallyInMediaSelectionGroup:group];
return;
#endif
}

// If a match isn't found, option will be nil and text tracks will be disabled
[_player.currentItem selectMediaOption:mediaOption inMediaSelectionGroup:group];

#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
[_player.currentItem selectMediaOption:mediaOption inMediaSelectionGroup:group];
#endif
}

- (void)setSelectedAudioTrack:(NSDictionary *)selectedAudioTrack {
Expand Down

0 comments on commit bf11502

Please sign in to comment.