2016-12-20 3 views
0

Ich habe ein Problem mit Media Play im Hintergrundmodus. In meiner App muss ich Media Play im Hintergrundmodus spielen, wenn der Server eine Benachrichtigung über die Socket-Verbindung sendet. In meinem Fall Media Player funktioniert gut, wenn App im Hintergrundmodus. Problem ist, wenn App im Hintergrundmodus, wenn ich Musik-App spiele und den Musik-Player zu stoppen und Benachrichtigung an meine App senden. Als meine App Media Player nicht abgespielt. Ich habe in plist dieses hinzugefügt "App spielt Audio oder Streams Audio/Video mit AirPlay" Ich verwende "AVPlayer"meine App Medien spielen im Hintergrundmodus nicht gespielt, wenn ich einmal Apple Music App öffnen

Bitte helfen Sie mir. Danke.

Antwort

0

Wenn Sie in dieDokumentation schauen, heißt es, dass es nur ein Asset gleichzeitig spielen kann. Ich denke Apple Music verwendet wenn nicht die gleiche API etwas, das damit zusammenhängt.

AVPlayer ist für die Wiedergabe eines einzelnen Medienobjekts gleichzeitig vorgesehen. Die Spieler-Instanz kann zusätzliches Medien-Assets wiederverwendet werden, um zu spielen seine replaceCurrentItem mit (mit :) Methode, aber es verwaltet die Wiedergabe von nur eine einzigen Media-Asset zu einem Zeitpunkt

0

1). Setzen Sie diesen Code in Sie AppDelegate.m (didFinishLaunchingWithOptions) Methoden:

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

2). Nachdem der eingestellten Hintergrund Modi aktiv für Audio, Airplay und Bild in Bild

enter image description here

+0

Ich habe bereits diesen Code in AppDelegate und Hintergrund-Modus auch auf hinzugefügt. – Giresh

+0

Von meiner Seite funktioniert es perfekt. aber ich habe YMCAudioPlayer zum Abspielen von Musik verwendet. –

+0

Bitte testen Sie Ihre App, indem Sie den folgenden Schritt ausführen: 1.Öffnen Sie App Play Media. 2.Stop Player. 3.Öffne Apple Music App und spiele Musik, dann hör auf Musik. 4. Jetzt ist Ihre App im Hintergrundmodus. Jetzt im Hintergrundmodus versuchen, Ihren App Media Player zu spielen. Lassen Sie mich Ihr Ergebnis – Giresh

0

auch sein mag, seine durch die aktuelle AVplayer Lauf Artikel zu einer Unterbrechung.

Achten Sie auch darauf, dass Sie es implementiert haben (unter Code), bevor Sie ein Element in AVPlayer laden. UND Fähigkeiten aktiviert, um Audio im Hintergrund abzuspielen.

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

Implementieren und Interruption-Handler hinzufügen, so können Sie Ihre gestoppt Audio nach dem anderen Audio/Unterbrechung gestoppt wieder spielen. und unterhalb des Zuhörers wird es anrufen.

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

Und verwalten AVplayer Wiedergabe/Pause wieder in ihm:

- (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; 
    } 
} 
Verwandte Themen