2012-04-04 5 views

Antwort

7

Es ist nicht Core Media, die Sie suchen, es ist AVFoundation. Insbesondere würden Sie einen AVAssetReader verwenden, um von Ihrem Film zu laden und durch die Rahmen zu iterieren. Sie können diese Frames dann als OpenGL ES-Texturen entweder mit glTexImage2D() oder (unter iOS 5.0) hochladen, indem Sie die viel schnelleren Textur-Caches verwenden.

Wenn Sie nicht möchten, dass Ihre eigene Implementierung von diesem rollen, ich habe AVFoundation-basierten Film laden und Verarbeitung über OpenGL ES innerhalb meiner GPUImage Rahmen. Die GPUImageMovie-Klasse kapselt das Lesen von Filmen und den Prozess des Hochladens in eine Textur ein. Wenn Sie diese Textur für die Verwendung in Ihrer eigenen Szene extrahieren möchten, können Sie ein GPUImageTextureOutput damit verketten. Beispiele für diese beiden Klassen finden Sie in den Beispielanwendungen SimpleVideoFileFilter und CubeExample in der Framework-Verteilung.

Sie können dies direkt verwenden, oder sehen Sie sich einfach den Code an, den ich geschrieben habe, um dieselben Aktionen innerhalb der GPUImageMovie-Klasse auszuführen.

+0

Ich habe versucht, AVAssetReader und es funktioniert gut, wenn ich versuche, eine lange Datei zu spielen, aber ich muss Sequenz von kleinen Videodateien vom Server heruntergeladen werden. Es ist etwas meine eigene Implementierung von HTTP Live Streaming. Ich habe versucht, eine Datei zu spielen, einen neuen Leser zu erstellen und die nächste Datei abzuspielen, aber die AVAsset/AVAssetReader-Initialisierung benötigt etwas Zeit und ich habe eine Verzögerung zwischen den Segmenten. Ich dachte zuerst darüber nach, neue mp4-Dateien anzuhängen, aber ich finde nicht den richtigen Weg. Hast du eine Idee, wie es geht? Oder wie kann man AVAsset/AVAssetReader starten? –

+0

10 Auch ich benutze Ihre Bibliothek GPUImage für einige Video-Effekte. Danke für die gute Arbeit, Mann! –

+0

Sorry, habe nicht mit mehreren Filmeingaben herumgespielt, wie du es beschreibst. Ich habe festgestellt, dass AVFoundation hauptsächlich darauf ausgerichtet ist, einzelne Mediendateien zu spielen oder aufzuzeichnen, nicht mehrere. –