当SilentMode打开时,AVAudioPlayer不会静音

时间:2013-01-02 21:25:05

标签: ios mpmovieplayercontroller avaudioplayer mpmovieplayer avaudiosession

我开始相信iOS只是纯粹的魔力。我查看了AVAudioPlayer上的许多帖子以寻找解决方案,但都没有效果。

当应用程序启动时,我有一个从MPMoviePlayerController开始的电影,我让AVAudioPlayer按照以下声音开始播放:

    -(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];
} 

和声音:

- (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];
    }
}

现在让我们说说魔术吧。当第一部电影播放和声音时,声音不会响应手机上的音量控制或静音模式开启。

然后立刻第二部电影播放自己的声音并且一切正常 - 静音模式开启时没有声音,如果静音模式关闭则响应音量控制。第三部电影 - 也很完美。

我尝试使用player.useApplicationAudioSession = NO用于MPMoviePlayerController - 修复问题,第一次声音没有响应静音模式或音量控制,但现在当第二部电影开始播放时,它立即冻结,播放的声音被切断从原来的大小到2秒左右。

无论我在哪里设置它,

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategorySoloAmbient error:nil];都无济于事。

所以我的问题是 - 如何使MPMoviePlayerController与AVAudioPlayer交互而没有任何问题......

1 个答案:

答案 0 :(得分:2)

好的,我实际上找到了一个解决方案(再次,魔术)。

启动ViewController时,按如下方式进行设置:

 - (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];
}

playAudio方法的简单方法是:

 - (void)playAudio{

    [audioPlayer play];
}

只需0.1毫秒的计时器就足以让一切正常(0.0不起作用),并确保在音频结束前没有启动新视频,否则会破坏设置,因此您必须使计时器无效并重做再次计时器。