如果我打开苹果音乐应用程序后,我在后台模式下的应用媒体播放没有播放

时间:2016-12-20 10:45:00

标签: ios objective-c background avplayer

我在后台模式下播放媒体有问题。 在我的应用中,当服务器通过套接字连接发送任何通知时,我必须在后台模式下播放媒体播放。 在我的情况下媒体播放器在应用程序处于后台模式时正常工 问题是当应用程序处于后台模式时,如果我播放音乐应用程序并停止音乐播放器并向我的应用程序发送通知。我的应用程序没有播放媒体播放器。 我在plist中添加了这个" App使用AirPlay播放音频或流音频/视频" 我正在使用" AVPlayer"

请帮帮我。 感谢。

3 个答案:

答案 0 :(得分:0)

如果你查看AVPlayer文档,它说它一次只能播放一个资产。我认为Apple Music使用的API不是与此相关的API。

  

AVPlayer旨在一次播放单个媒体资产。该   播放器实例可以重复使用以播放其他媒体资产   它的replaceCurrentItem(with :)方法,但它管理播放   一次只有一个媒体资产

答案 1 :(得分:0)

<强> 1)。将此代码放入AppDelegate.m(didFinishLaunchingWithOptions)方法中:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive: YES error: nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

<强> 2)。之后,设置背景模式激活音频,Airplay和画中画

enter image description here

答案 2 :(得分:0)

可能是因为当前AV播放器运行项目中断。

另外,在将任何项目加载到AVPlayer之前,请注意您实现它(在代码下面)。 AND启用功能以在后台播放音频。

NSError *myErr;
[self becomeFirstResponder];
[[UIApplication sharedApplication]beginReceivingRemoteControlEvents];  

AVAudioSession *aSession = [AVAudioSession sharedInstance];

[aSession setCategory:AVAudioSessionCategoryPlayback error:&myErr];

[aSession setMode:AVAudioSessionModeDefault error:&myErr];

[aSession setActive: YES error: &myErr];

实施并添加中断处理程序,以便在另一个音频/中断停止后重新播放已停止的音频。并且它的听众会打电话。

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(handleAudioSessionInterruption:)
                                             name:AVAudioSessionInterruptionNotification
                                           object:aSession];

再次管理AV播放器播放/暂停:

- (void)handleAudioSessionInterruption:(NSNotification*)notification {

    NSNumber *interruptionType = [[notification userInfo] objectForKey:AVAudioSessionInterruptionTypeKey];
    NSNumber *interruptionOption = [[notification userInfo] objectForKey:AVAudioSessionInterruptionOptionKey];


    switch (interruptionType.unsignedIntegerValue) {
        case AVAudioSessionInterruptionTypeBegan:{
            // • Audio has stopped, already inactive
            // • Change state of UI, etc., to reflect non-playing state
            IsInteruptionOccured=YES;
        } break;
        case AVAudioSessionInterruptionTypeEnded:{
            // • Make session active
            // • Update user interface
            // • AVAudioSessionInterruptionOptionShouldResume option
            IsInteruptionOccured=NO;
            [[AVAudioSession sharedInstance] setActive: YES error: nil];
            if (interruptionOption.unsignedIntegerValue == AVAudioSessionInterruptionOptionShouldResume) {
                // Here you should continue playback.
                // Resume after exteranl interruption.


                     [_audioPlayer play];


                BOOL isPlayingWithOthers = [[AVAudioSession sharedInstance] isOtherAudioPlaying];
                // test it with...
                NSLog(@"other audio is playing %d",isPlayingWithOthers);
            }
        } break;
        default:
            break;
    }
}