0

Je commence à être convaincu que iOS n'est que de la pure magie. J'ai regardé de nombreux messages sur AVAudioPlayer pour trouver des solutions, mais aucun n'a fonctionné.AVAudioPlayer ne se met pas en mode silencieux lorsque le mode SilentMode est activé

Lorsque l'application démarre j'ai un film à partir de de MPMoviePlayerController et je AVAudioPlayer le coup d'envoi avec un son comme suit:

-(void)createAndPlayMovieFromURL:(NSURL *)movieURL sourceType:(MPMovieSourceType)sourceType{ 

     /* Create a new movie player object. */ 
     player = [[MPMoviePlayerController alloc] initWithContentURL:movieURL]; 
     player.controlStyle = MPMovieControlModeDefault; 

     if (player) 
     { 
      /* Save the movie object. */ 
      [self setMoviePlayerController:player]; 

      /* Specify the URL that points to the movie file. */ 
      [player setContentURL:movieURL];   

      /* If you specify the movie type before playing the movie it can result 
      in faster load times. */ 
      [player setMovieSourceType:sourceType]; 

      CGRect frame = CGRectMake(0, 0, 480, 320); 

      /* Inset the movie frame in the parent view frame. */ 
      [[player view] setFrame:frame]; 

      [player view].backgroundColor = [UIColor blackColor]; 

      /* To present a movie in your application, incorporate the view contained 
      in a movie player’s view property into your application’s view hierarchy. 
      Be sure to size the frame correctly. */ 
      [self.view addSubview: [player view]];   
     } 
    [[self moviePlayerController] play]; 
} 

et pour le son:

- (void)setupAudioPlayBack:(NSString *) path : (NSString *) extension{ 

    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] 
             pathForResource:path 
             ofType:extension]]; 
    NSError *error; 
    audioPlayer = [[AVAudioPlayer alloc] 
        initWithContentsOfURL:url 
        error:&error]; 
    if (error) 
    { 
     NSLog(@"Error in audioPlayer: %@", 
       [error localizedDescription]); 
    } else { 
     audioPlayer.delegate = self; 
     [audioPlayer prepareToPlay]; 
    } 
} 

Et laisse maintenant parler la magie. Lorsque le premier film est lu et le son, le son ne répond ni aux commandes de volume du téléphone, ni au commutateur Silent Mode On.

Mais immédiatement un deuxième film joue avec son propre son et tout fonctionne bien - il n'y a pas de son avec le mode silencieux activé, si le mode silencieux désactivé répond aux commandes de volume. 3ème film - joue parfaitement aussi. J'ai essayé d'utiliser le player.useApplicationAudioSession = NO pour MPMoviePlayerController - résolu le problème avec le premier son ne répondant pas au mode silencieux ou aux contrôles de volume, mais maintenant quand le second film commence à jouer, il se fige instantanément et le son joué est coupé de l'original taille à quelque chose autour de 2 secondes.

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategorySoloAmbient error:nil]; n'a pas aidé non plus où que je l'ai défini.

Donc ma question est - comment faire interagir avec l'MPMoviePlayerController AVAudioPlayer sans aucun problème ...

Répondre

2

Ok, j'ai trouvé une solution (encore une fois, la magie).

Lorsque vous démarrez votre ViewController vous le définissez comme suit:

- (void)viewDidLoad 
{ 
    [self setupAudioPlayBack:@"sound1" :@"caf"]; 
    [self playMovieFile:[self localMovieURL:@"mov1" :@"mov"]]; 
    audioTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(playAudio) userInfo:nil repeats:NO]; 

    [super viewDidLoad]; 
} 

Lorsque la méthode playAudio est simplement:

- (void)playAudio{ 

    [audioPlayer play]; 
} 

seulement 0,1 milliseconde minuterie suffit pour tout faire fonctionner (0.0 doesn ne fonctionne pas) et assurez-vous qu'une nouvelle vidéo ne démarre pas avant la fin de l'audio, sinon elle détruira les réglages, vous devrez donc invalider la minuterie et recommencer la minuterie.

+0

J'ai trouvé cela utile, merci. –

Questions connexes