2009-11-11 5 views
5

Ich habe eine iPhone-App mit einem kurzen Intro-Video. Wenn ein Benutzer die App startet, während ihr iPod Musik abspielt, wird die Musik während der Wiedergabe des Videos angehalten (unabhängig davon, ob das Video einen Ton hat oder nicht) und die Audiodaten bleiben nach der Videowiedergabe dauerhaft stehen. Apple scheint zu zeigen, dass Sie dies mit AudioSession Tricks lösen können: http://www.devworld.apple.com/iphone/library/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/WorkingWithOpenALiPodMusicandMovies/WorkingWithOpenALiPodMusicandMovies.htmlMPMoviePlayerController stoppt die iPod-Wiedergabe und startet nicht neu

Aber ihre Vorschläge hier scheinen einfach nicht zu arbeiten; Es sieht so aus, als ob MPMoviePlayerController die Audiositzungskonfiguration für ihre eigenen Zwecke überschreibt. Im Idealfall würde ich den Film-Audio über den iPod Audio mischen oder Ducking verwenden, aber sogar die Musik neu starten könnte eine passable Lösung sein. Irgendwelche Ideen?

+0

Nur ein kurzer Kommentar: Das Senden von E-Mails mit Apple scheint darauf hinzudeuten, dass dies wahrscheinlich ein Fehler auf der Seite von Apple ist und sie keine Möglichkeit kennen, dieses spezielle Problem zu lösen. :( – jexe

+0

Irgendwelche Updates von Apple? Ich bin in dieses Problem jetzt –

+0

gelaufen das Dokument, das Sie verbunden haben, bezieht sich auf iPod Bibliothekszugriff von innerhalb Ihrer Anwendung, während Sie angegeben haben, dass Sie Ihre Musik mit der Musik mischen möchten, die von kommt iPod-App - das ist eine ganz andere Sache –

Antwort

1

Sie können immer nur eine einzelne Musik bereitstellende App und mehrere Quellen von (kurzen) Sounds haben. Wenn eine Hintergrund-App Musik abspielt, kann Ihre App kurze Töne überlagern. Wenn Sie Musik abspielen möchten, muss die Hintergrund-App gestoppt werden.

Also ich glaube nicht, dass das, was Sie erreichen möchten, mit MPMoviePlayerController (oder einem der High-Level-Audio-Frameworks) möglich ist. Sie können möglicherweise eine Audiospur eines Films überlagern, wenn sie ausreichend kurz ist, aber MPMoviePlayerController ist wahrscheinlich nicht gut dafür.

+0

Nicht wahr, es ist möglich, nach der Dokumentation, und möglicherweise in einer neuen festen Version, über die ich nicht sprechen kann und im Grunde jetzt bestätigt mich selbst mit Apple, dass es ein Fehler auf ihrer Seite ist –

+0

Kannst du ein Beispiel? Danke. –

+0

Wenn Sie sprechen über das Dokument verknüpft ist von @Jexe bezieht sich dies nicht auf die iPod-App, sondern auf den Zugriff auf die iPod-Bibliothek, was mehr Mischoptionen ermöglicht. Ich sehe keinen Fehler Apples Seite hier. –

2

Ich habe eine großartige Lösung dafür gefunden. In der .h-Datei müssen Sie ein BOOL namens "wasPlaying" erstellen. Bevor Sie Ihr Video abspielen, fragen Sie den iPod, ob er abgespielt wird.

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

Dann, nachdem Sie den Film Spieler sagen, rufen Sie die folgende:

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

Und danach, die in dem Verfahren finishedPlaying:

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

Für mich ist es funktionierte fein!

+0

Dies funktioniert nicht, wenn es sich um eine Drittanbieter-App handelt, die aus dem AppStore installiert wurde. Kann nicht fortgesetzt werden. Irgendeine Lösungsmöglichkeit? – honcheng

+0

Es funktionierte für mich beim Testen auf dem Gerät. Hast du es bei dir versucht? –

2

Ich glaube, Sie können dies tun, indem Sie die Audio-Sitzung ähnlich wie diese Initialisierung:

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

Dann, wenn Sie die Audiositzung verwenden möchten Sie den iPod Audio-Ente die Videospur einstellen:

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