MPMoviePlayerController, der Filme wechselt, verursacht weißen Blitz

8

Ich habe eine kleine UIView, die einen wiederholten Film anzeigt. Wenn der Benutzer auf eine Schaltfläche klickt, wird ein anderer Film geladen und in derselben UIView angezeigt.

Das Problem besteht darin, dass zwischen dem Entfernen des ersten Films und dem Anzeigen des zweiten Filmes eine halbe Sekunde "Blitz" ist. Gibt es irgendwelche, um das zu entfernen?

%Vor%     
bennythemink 30.12.2010, 04:43
quelle

4 Antworten

4

Ich habe es geschafft, dass sich meine Filme ohne den weißen Blitz mit der AVFoundation ändern, wie zuvor vorgeschlagen. sudo code unten, hoffe es hilft jemandem:)

Apples Referenzdokumente können hier gefunden werden und ich habe sie verwendet, um die meisten meiner Informationen zu erhalten: Ссылка

Das erste, was ich getan habe, war, die folgende Klasse namens PlayerView (ich kann mich nicht erinnern, wo es mir leid tut) zu meinem Projekt hinzuzufügen. Es ist eine Unterklasse von UIView und die Ansicht, in der der Film angezeigt wird. Sobald Sie es zu Ihrem Projekt hinzufügen, öffnen Sie den UI-Builder, fügen Sie einer vorhandenen Xib eine neue Ansicht hinzu und ändern Sie ihre Klasse in PlayerView. Verbinden Sie dies mit einem IBOutlet. Denken Sie daran, dass dies die Ansicht ist, in der der Film angezeigt wird.

PlayerView.h

%Vor%

PlayerView.m

%Vor%

Im ViewContoller, der die Filme anzeigt, habe ich folgendes:

DisplayMovies.h

%Vor%

DisplayMovies.m

%Vor%     
bennythemink 24.02.2011, 00:51
quelle
2

Die oben beschriebene Lösung funktionierte nicht für mich. Ich bekam immer noch kurze Blitze zwischen den Tracks. Ich konnte das Problem lösen, indem ich zwei Ansichten mit jeweils einem eigenen AVPlayer erstellte. Ich setze beide zusammen und wechsle dann zwischen ihnen, indem ich die Draufsicht verberge. Dadurch wurde der Flash gelöscht und ich konnte einen Übergang zwischen den beiden Tracks animieren, indem ich die obere Ansicht verdeckte, indem ich Alpha auf 0.0 setzte, anstatt setHidden zu verwenden. Hier ist mein Code:

%Vor%

Dann animiere ich zwischen den Videos, die ich benutzt habe:

%Vor%

Um die Videos zu ändern, müssen Sie nur die versteckte Ansicht einstellen, um zu spielen, was Sie wollen, und dann den Schalter nach dem Blitz schalten.

    
Hivebrain 03.05.2011 03:53
quelle
1

Ich muss immer noch zu diesem Projekt zurückkommen, aber ich habe noch mehr Ratschläge erhalten. Ich werde in hoffentlich zwei Wochen wieder an diesem Projekt arbeiten, also werde ich euch wissen lassen, welche Lösung (Daumen) für mich funktioniert hat. In der Zwischenzeit hier meine Optionen:

1. Sie können MPMoviePlayerController nicht verwenden, um den Film ohne Flash zu wechseln.

Alternativ können Sie AV Foundation verwenden. Die AVPlayer -replaceCurrentItemWithPlayerItem: -Methode wird nahtlos vom alten Player-Element auf das neue übertragen, ohne zu blinken.

Weitere Informationen zur Programmierung mit AV Foundation finden Sie im "AV Foundation Programming Guide", den Sie hier finden:

Ссылка

2. Sie können alle Ihre Filme in einen einzigen (großen) Film zusammenführen und anschließend die Eigenschaften von MPMediaPlayback currentPlaybackTime / endPlaybackTime verwenden, um den gewünschten Film (innerhalb des großen Films) auszuwählen und abzuspielen. Wenn Sie diese Technik verwenden, müssen Sie auch sicherstellen, dass zu dem Zeitpunkt, an dem der neue Film gestartet wird, ein Schlüsselbild vorhanden ist.

3. Erstellen Sie alternativ ein einzelnes MPMoviePlayerController-Objekt, verwenden Sie den Parameter -setContentURL:, um die neue Film-URL festzulegen, und nutzen Sie die Eigenschaft backgroundView, um einen nahtloseren Übergang zu erzielen. Die backgroundView wird automatisch mit der Eigenschaft view formatiert, aber sie wird ausgeblendet, bevor der Film vorgeladen wird. Sie können hinter beide Filmansichten eine schwarze Ansicht setzen und dann backgroundColor = black des backgroundView erstellen, wodurch es nahtloser erscheint.

Hoffe, das hilft.

    
bennythemink 09.02.2011 22:00
quelle
0

Hier finden Sie die Lösung Ссылка von iOS 6, die Sie benötigen benutze [self.moviePlayer prepareToPlay]; und fange MPMoviePlayerReadyForDisplayDidChangeNotification, um [self.moviePlayer play];

zu verwenden     
user2557885 25.09.2014 09:37
quelle