In AVFoundation, wie man Aufnahme und Wiedergabe synchronisiert

8

Ich bin daran interessiert, Medien mit AVCaptureSession in iOS aufzuzeichnen, während ich mit einem AVPlayer Medien wiedergebe (genauer gesagt, ich spiele Audio und Video auf, aber ich bin mir nicht sicher, ob das wichtig ist).

Das Problem ist, wenn ich die resultierenden Medien später wieder zusammenspiele, sind sie nicht mehr synchron. Ist es möglich, sie zu synchronisieren, indem Sie entweder sicherstellen, dass die Wiedergabe und die Aufnahme gleichzeitig beginnen, oder indem Sie herausfinden, wie der Abstand zwischen ihnen ist? Ich brauche wahrscheinlich die Synchronisierung in der Größenordnung von 10 ms. Es ist unvernünftig anzunehmen, dass ich immer Audio aufnehmen kann (da der Benutzer Kopfhörer verwenden kann), so dass die Synchronisierung über die Analyse von Original- und aufgezeichneten Audiodaten keine Option ist.

Diese Frage legt nahe, dass es möglich ist, die Wiedergabe und Aufnahme gleichzeitig zu beenden und den anfänglichen Offset zu bestimmen von den resultierenden Längen auf diese Weise, aber ich bin unklar, wie man sie gleichzeitig beenden kann. Ich habe zwei Fälle: 1) die Audiowiedergabe läuft aus, und 2), der Benutzer trifft den "stop recording" Knopf.

Diese Frage schlägt vor, das Priming und dann ein Fixed anzuwenden , aber möglicherweise geräteabhängige Verzögerung, die offensichtlich ein Hack ist, aber wenn es gut genug für Audio ist, ist es offensichtlich eine Überlegung wert für Video.

Gibt es eine andere Medienebene, die ich für die erforderliche Synchronisierung verwenden kann?

Related: diese Frage ist unbeantwortet.

    
Bjorn Roche 14.09.2013, 16:22
quelle

1 Antwort

0

Wenn Sie AVPlayer speziell zur Wiedergabe von Audio verwenden, würde ich vorschlagen, AudioQueueServices für dasselbe zu verwenden. Es ist nahtlos und schnell, da es Puffer für Puffer liest und Pause spielt, ist schneller als AVPLlayer

Es kann auch die Möglichkeit bestehen, dass Sie die ursprüngliche Anweisung von [avPlayer prepareToPlay] verpassen, die möglicherweise viel Overhead verursacht, bevor die Wiedergabe von Audio erfolgt. Hoffe es hilft dir.

    
Puneet Sharma 11.12.2013 15:31
quelle