AVAssetWriter Wie schreibt man downsamplierte / komprimierte m4a / mp3 Dateien auf

8

Ich versuche, eine lokale M4A- oder MP3-Datei zu erstellen und diese Datei zu komprimieren / herunterzuspielen (um eine kleinere Datei zu erstellen).

Ursprünglich benutzte ich die AVAssetExportSession, um ein AVAsset in ein temporäres Verzeichnis zu exportieren, aber ich hatte keinerlei Kontrolle über die Komprimierung / das Downsampling (Sie können nur Presets verwenden, die nur .wav Dateiformate unterstützen Qualitätsverlust).

Dann, nachdem ich einige Beispiele hier auf SO verfolgt habe, habe ich versucht, mit AVAssetReader / AVAssetWriter diesen 'Export' zu erzeugen.

Ich erstelle meinen Leser / Schreiber als solchen:

%Vor%

Und dann fange ich an zu schreiben ...

%Vor%

Wenn ich mit dem Schreiben fertig bin, sind die Daten, die ich angeblich in exportURL geschrieben habe, null und der Writer meldet einen erfolgreichen Abschluss. Irgendwelche Ideen, was schief gehen könnte?

Update Der Writer-Status nach dem Aufruf von appendSampleBuffer: lautet AVAssetWriterStatusFailed, obwohl der Leserstatus erfolgreich ist und die gesamte Datei zu lesen scheint.

    
Dfowj 24.10.2012, 20:14
quelle

1 Antwort

5

Ich bin auf die Lösung gestoßen:

Die Verwendung von NSHomeDirectory () in NSString *exportPath = [NSHomeDirectory() stringByAppendingPathComponent:@"out.m4a"] hat dazu geführt, dass der Writer die Datei nicht erstellen konnte. Nicht genau, warum oder was ich tun müsste, damit dies funktioniert, aber das Ändern von NSHomeDirectiory() zu NSTemporaryDirectory() hat meine Probleme in der Zwischenzeit gelöst.

    
Dfowj 25.10.2012, 16:47
quelle