2010-11-26 8 views
5

Ich verwende derzeit einen AVPlayer, zusammen mit einem AVPlayerLayer, um ein Video abzuspielen. Während der Wiedergabe des Videos habe ich mich während des Videos alle 30 Sekunden für die Zeitaktualisierung registriert. Dies wird verwendet, um ein Diagramm der Beschleunigung an diesem Punkt im Video zu zeichnen und es zusammen mit dem Video zu aktualisieren. Das Diagramm verwendet CMTime aus dem Video. Wenn ich also zu einem anderen Teil des Videos überspringe, stellt das Diagramm sofort diesen Zeitpunkt im Video ohne zusätzliche Arbeit dar.AVPlayerLayer - Das Rad neu programmieren?

Anywho, soweit ich weiß, wenn ich eine Schnittstelle ähnlich wie das MediaPlayer-Framework bekommen möchte, muss ich das selbst tun.

Ich frage mich, gibt es eine Möglichkeit, meinen AVPlayer mit dem MediaPlayer-Framework zu verwenden? (Nicht dass ich sehen kann.) Oder gibt es eine Möglichkeit, sich für inkrementelle Zeitaktualisierungen mit dem MediaPlayer-Framework zu registrieren.

Mein Code, wenn jemand interessiert ist, folgt:

[moviePlayer addPeriodicTimeObserverForInterval: CMTimeMake(1, 30) queue: dispatch_queue_create("eventQueue", NULL) usingBlock: ^(CMTime time) { 
loopCount = (int)(CMTimeGetSeconds(time) * 30); 
if(loopCount < [dataPointArray count]) { 
    dispatch_sync(dispatch_get_main_queue(), ^{ 
    [graphLayer setNeedsDisplay]; 
    }); 
} 
}]; 

Dank!

Antwort

0

Wenn Sie über das Fenster-Fenster sprechen, das von MPMoviePlayer angezeigt wird, dann haben Sie Angst, dass Sie selbst diese Benutzeroberfläche erstellen.

AFAIK gibt es keine Möglichkeit, das Timing-Verhalten zu erreichen, das Sie brauchen, wenn Sie das MediaPlayer-Framework verwenden, das sehr einfach ein "play media" -Framework ist. Sie tun das Richtige mit AVFoundation.

Was Sie verlassen müssen Sie die Benutzeroberfläche selbst erstellen. Mein Vorschlag wäre, mit einer XIB-Datei zu beginnen, um das allgemeine Layout zu erstellen; Symbolleiste am oberen Rand mit einer Schaltfläche "Fertig", einer großen Ansicht, die eine benutzerdefinierte Wiedergabeansicht darstellt (mit Ihrem AVPlayerLayer) und einer separaten Ansicht, die Ihre Steuerelemente enthält.

Sie müssen einen benutzerdefinierten Controller-Code schreiben, um die Wiedergabesteuerelemente und die Symbolleiste nach Bedarf automatisch ein-/auszublenden, wenn Sie die Benutzeroberfläche von MPMoviePlayer simulieren möchten.

+0

Woa. Diese Antwort ist fast ein Jahr später als die Frage und wurde trotzdem akzeptiert! Bravo. – Almo

0

Sie können https://bitbucket.org/brentsimmons/ngmovieplayer als Ausgangspunkt verwenden (wenn es zu der von Ihnen gewünschten Zeit existierte).

Von der Projektseite: "Repliziert einen Großteil des Verhaltens von MPMoviePlayerViewController - aber verwendet AVFoundation."

0

Sie könnten nach AVSynchronizedLayer Klasse suchen. Ich glaube nicht, dass es viel im offiziellen Programmführer gibt. Sie können hier und da Informationen finden: subfurther, Otter Software.

In O'Really Programming iOS 4 (oder 5) gibt es auch einen kurzen Hinweis darauf, wie man ein Quadrat entlang einer Linie synchron zur Animation bewegen/stoppen lässt. Eine weitere Demo (nicht viel Code) wird während der WWDC 2011-Sitzung Working with Media in AV Foundation angezeigt.