首页 文章

MPMoviePlayerController停止播放iPod并且不重新启动

提问于
浏览
5

我有一个带有简短介绍视频的iPhone应用程序 . 如果用户在iPod正在播放音乐时启动应用程序,音乐将在视频播放时停止(无论视频是否有声音),并且视频播放后音频将永久停止 . Apple似乎表明你可以用AudioSession技巧来解决这个问题:http://www.devworld.apple.com/iphone/library/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/WorkingWithOpenALiPodMusicandMovies/WorkingWithOpenALiPodMusicandMovies.html

但他们在这里的建议似乎并不奏效;似乎MPMoviePlayerController会为了自己的目的覆盖音频会话配置 . 理想情况下,我将电影音频混合在iPod音频上,或者可能使用闪避,但即使重新启动音乐也可能是一个可以修复的问题 . 有任何想法吗?

3 回答

  • 2

    我找到了一个很好的解决方案 . 在.h文件中,您必须创建一个名为“wasPlaying”的BOOL . 在播放视频之前,您会询问iPod是否正在播放 .

    if ([[MPMusicPlayerController iPodMusicPlayer] playbackState] == MPMusicPlaybackStatePlaying)
    {
        NSLog(@"Music was playing, lets put YES to the bool");
        wasPlaying = YES;
    }
    

    然后,在告诉电影播放器播放后,您可以调用以下内容:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(finishedPlaying) name:MPMoviePlayerPlaybackDidFinishNotification object: moviePlayer];
    

    之后,在方法finishPlaying中:

    if (wasPlaying ==YES)
    {
        NSLog(@"Music was playing, lets play music again");
        [[MPMusicPlayerController iPodMusicPlayer] play];
    }
    

    对我来说它工作得很好!

  • 1

    我认为您可以通过初始化类似于此的音频会话来完成此操作:

    NSError *audioSessionError = nil; 
     AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
     [audioSession setCategory:AVAudioSessionCategoryAmbient 
                              error:&audioSessionError] == YES)
    

    然后,当您想要使用音频会话时,您可以设置iPod音频以避开视频轨道:

    AudioSessionInitialize (NULL, NULL, NULL, NULL);
    OSStatus propertySetError = 0;
    UInt32 allowMixing = true;
    propertySetError |= AudioSessionSetProperty(kAudioSessionProperty_OtherMixableAudioShouldDuck, sizeof(allowMixing), &allowMixing);
    AudioSessionSetActive(YES);
    
  • 2

    您可以随时使用一个音乐提供应用程序和多个(简短)声音源 . 如果后台应用正在播放音乐,您的应用可以覆盖简短的声音 . 如果您想播放音乐,必须停止后台应用 .

    因此,我不认为使用MPMoviePlayerController(或任何高级音频框架)可以实现的目标 . 您可以覆盖电影的音轨,如果它足够短但MPMoviePlayerController可能不适合这个 .

相关问题