0

У меня есть приложение, которое воспроизводит какую-то фоновую музыку, когда нажата некоторая кнопка, она нажимает новый вид с помощью навигационного контроллера. Это новое представление имеет MPMoviePlayerController и AVCaptureSession с общей аудиосистемой. После того, как это мнение отклонено, звук в фоновом режиме действительно мягкий по сравнению с тем, как это было. Что это за то, что громкость так покорилась после игры?MPMoviePlayerController заставляет все другое аудио быть мягким (после окончания MP)

NSError* error4 = nil; 
AVAudioSession* audioSession = [AVAudioSession sharedInstance]; 
if (![audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&error4]) { 
    NSLog(@"AVAudioSession setCategory failed: %@", [error4 localizedDescription]); 
} 

// Set audio session property "allow mixing" to true so audio can be recorded while it is playing 
UInt32 allowMixing = true; 
OSStatus status = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing); 
if (status != kAudioSessionNoError) { 
    NSLog(@"AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers) failed: %ld", status); 
} 

// Activate the audio session 
error4 = nil; 
if (![audioSession setActive:YES error:&error4]) { 
    NSLog(@"AVAudioSession setActive:YES failed: %@", [error4 localizedDescription]); 
} 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectoryPath = [paths objectAtIndex:0]; 

NSString *proud = [[documentsDirectoryPath stringByAppendingPathComponent:@"imissyou"] stringByAppendingPathComponent:selectedCountry]; 

NSURL *movieURL = [[NSURL fileURLWithPath:proud] retain]; 
player = 

[[MPMoviePlayerController alloc] initWithContentURL: movieURL]; 
player.useApplicationAudioSession=YES; 

[player prepareToPlay]; 
player.controlStyle = MPMovieControlStyleNone; 
player.allowsAirPlay = NO; 
player.scalingMode = MPMovieScalingModeFill; 

player.view.frame = self.view.frame; 

[self.view insertSubview:player.view belowSubview:vImagePreview]; 

[player setFullscreen:YES animated:YES]; 

// ... 

[[NSNotificationCenter defaultCenter] 
addObserver:self 
selector:@selector(movieFinishedCallback:) 
name:MPMoviePlayerPlaybackDidFinishNotification 
object:player]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(exitedFullscreen:) name:MPMoviePlayerDidExitFullscreenNotification object:player]; 


[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(moviePlayerWillExitFullscreen:) 
              name:MPMoviePlayerWillExitFullscreenNotification 
              object:player]; 


[player play]; 


session = [[AVCaptureSession alloc] init]; 
[session beginConfiguration]; 
session.sessionPreset = AVCaptureSessionPresetMedium; 

CALayer *viewLayer = self.vImagePreview.layer; 
NSLog(@"viewLayer = %@", viewLayer); 

AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session]; 
captureVideoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 
captureVideoPreviewLayer.frame = self.vImagePreview.bounds; 
[captureVideoPreviewLayer setCornerRadius:14]; 
[captureVideoPreviewLayer setBorderWidth:3.0]; 
[captureVideoPreviewLayer setBorderColor:[[UIColor whiteColor] CGColor]]; 
[[vImagePreview layer] setCornerRadius:14]; 


[[vImagePreview layer] setBorderWidth:3.0]; 


[[vImagePreview layer] setBorderColor:[[UIColor whiteColor] CGColor]]; 

[self.vImagePreview.layer addSublayer:captureVideoPreviewLayer]; 
[captureVideoPreviewLayer release]; 
AVCaptureDevice *device = [self frontFacingCameraIfAvailable]; 
NSError *error = nil; 
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error]; 
if (!input) { 
    // Handle the error appropriately. 
    NSLog(@"ERROR: trying to open camera: %@", error); 
} 

AVCaptureDevice *audioCaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio]; 
NSError *error2 = nil; 
AVCaptureDeviceInput *audioInput = [AVCaptureDeviceInput deviceInputWithDevice:audioCaptureDevice error:&error2]; 






AVCaptureMovieFileOutput *movieFileOutput = [[AVCaptureMovieFileOutput alloc] init]; 

NSString *archives = [documentsDirectoryPath stringByAppendingPathComponent:@"archives"]; 
NSString *editedfilename = [[selectedCountry lastPathComponent] stringByDeletingPathExtension]; 
NSString *datestring = [[editedfilename stringByAppendingString:@" "] stringByAppendingString:currentTime]; 
NSLog(@"%@", datestring); 
NSString *outputpathofmovie = [[archives stringByAppendingPathComponent:datestring] stringByAppendingString:@".mp4"]; 
NSURL *outputURL = [[NSURL alloc] initFileURLWithPath:outputpathofmovie]; 
[session addInput:input]; 
[session addInput:audioInput]; 
[session addOutput:movieFileOutput]; 
[session commitConfiguration]; 
[session startRunning]; 
[movieFileOutput startRecordingToOutputFileURL:outputURL recordingDelegate:self]; 
[movieURL release]; 
[outputURL release]; 

ответ

0

Я понял это сейчас. У меня была категория для PlayAndRecord. Я изменил его Ambient (который также позволяет записывать звук во время воспроизведения аудио) и удалить свойство OverrideCategoryMixWithOthers, оставляя только

OSStatus propertySetError = 0; 
UInt32 allowMixing = true; 
propertySetError |= AudioSessionSetProperty(kAudioSessionProperty_OtherMixableAudioShouldDuck, sizeof(allowMixing), &allowMixing); 
1

Аудиозапись может быть «утка» фоновой музыки. Вы можете установить для свойства «kAudioSessionProperty_OtherMixableAudioShouldDuck» значение false, чтобы отключить это.

+0

Как идти об изменении собственности? Я добавил это в код: 'OSStatus propertySetError = 0; UInt32 allowMixing = true; propertySetError | = AudioSessionSetProperty (kAudioSessionProperty_OtherMixableAudioShouldDuck, sizeof (allowMixing), & allowMixing); ' И могу ли я использовать это при использовании OverrideCategoryMixWithOthers? – user717452

+0

изменить allowMixing = false; Я думаю, вы можете использовать его с другим свойством, поскольку он просто говорит, что делать, когда он смешивается, но я не уверен. – rooster117

+0

Не работал, перепутал запись, выполненную AVCaptureSession, и по завершении звука звук почти отключился. – user717452