Ich habe es geschafft, eine Videospur eines Films Bild für Bild in eine OpenGL
Textur mit AVFoundation
. Ich habe die Schritte befolgt, die in der Antwort hier beschrieben sind: iOS4: Wie kann ich eine Videodatei als OpenGL-Textur verwenden? und nahm etwas Code aus dem GLVideoFrame
Probe von WWDC2010
die heruntergeladen werden können aquí .
Wie kann ich die Audiospur des Films synchron zum Video abspielen? Ich denke, es wäre keine gute Idee, ihn in einem separaten Player abzuspielen, sondern die Tonspur desselben Films zu verwenden. AVAsset
.
AVAssetTrack* audioTrack = [[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
Ich rufe ein Videoframe und seinen Zeitstempel im CADisplayLink-Callback über
CMSampleBufferRef sampleBuffer = [self.readerOutput copyNextSampleBuffer];
CMTime timestamp = CMSampleBufferGetPresentationTimeStamp( sampleBuffer );
donde readerOutput
ist vom Typ AVAssetReaderTrackOutput*
Wie erhält man die entsprechenden Audio-Samples? Und wie kann man sie abspielen?
Edit :
Ich habe mich ein wenig umgesehen und denke, dass es am besten wäre, die AudioQueue
de la AudioToolbox.framework
mit dem hier beschriebenen Ansatz: AVAssetReader und Audio Queue Streaming Problem
Es gibt auch einen Audioplayer in der AVFoundation
: AVAudioPlayer
. Aber ich weiß nicht genau, wie ich die Daten an das System übergeben soll. initWithData
-Initialisierungsprogramm, das Folgendes erwartet NSData
. Außerdem glaube ich nicht, dass es die beste Wahl für meinen Fall ist, weil eine neue AVAudioPlayer
-Instanz müsste für jedes neue Stück Audio-Samples erstellt werden, so wie ich es verstehe.
Haben Sie noch andere Vorschläge? Wie kann ich die rohen Audiosamples, die ich von der Software erhalte, am besten abspielen? AVAssetReaderTrackOutput
?
0 Stimmen
Haben Sie damit jemals etwas erreicht?
0 Stimmen
Meine Lösung war, den Film mit AVAssetReader zu öffnen, um die Frames für OpenGL zu holen, und gleichzeitig die gleiche Filmdatei mit einem AVAudioPlayer zu öffnen und beide gleichzeitig starten zu lassen. Es ist keine schöne Lösung, aber Audio und Video sind ziemlich synchron. Seitdem hatte ich keine Zeit mehr, an einer besseren Lösung zu arbeiten.
0 Stimmen
Ich verwende auch AVAudioPlayer, aber die Audiosynchronisation ist nicht sehr gut. Eine echte Lösung zu haben, wäre besser.
0 Stimmen
Bei meiner Implementierung sind Video und Audio recht gut synchronisiert. Ich rufe prepare im AVAudioPlayer auf, und dann play im AVAudioPlayer zur gleichen Zeit, als ich anfange, Samples von der Videospur zu lesen. Aber eigentlich haben Sie Recht, das ist nicht Sync durch Design, obwohl es ganz gut für mich funktioniert.
0 Stimmen
Wenn Sie versuchen, mit dem iPhone 5 Aufnahmen bei gemischten Lichtverhältnissen zu machen, werden Sie sofort feststellen, dass es bei dieser Methode zu Problemen bei der Synchronisierung von Video und Audio kommt.
0 Stimmen
Warum gerät die Synchronisation bei Aufnahmen unter gemischten Lichtverhältnissen aus dem Takt?