2012-11-27 11 views
7

Ich möchte eine iPhone-App schreiben, die kontinuierlich Video erfassen, h.264 kodieren sie in 10 Sekunden Intervall und auf einen Speicherserver hochladen. Dies kann mit Avassetwriter geschehen, und ich kann die alten Dateien löschen, während ich neue erstelle. Da Flash-Speicher jedoch begrenzte Schreibzyklen haben, wird dieses Schema den Flash nach einigen tausend Schreibzyklen durch den Flash zerstören. Gibt es eine Möglichkeit, Avassetwriter in den Speicher umzuleiten oder ein RAM-Laufwerk auf dem iPhone zu erstellen?ist es möglich für Avassetwriter in den Speicher

Danke!

+1

"Da Flash-Speicher jedoch nur begrenzte Schreibzyklen haben, wird das Flash nach einigen tausend Schreibzyklen durch den Flash-Speicher zerstört." Ich bin mir ziemlich sicher, dass die Speicherverwaltung nicht so funktioniert, wie es viele gibt von Prozessen, die temporäre Dateien erstellen und überschreiben. was du sagst, wäre wahr, wenn du ständig in den gleichen Bereich geschrieben hättest, aber es wird so in einem OS implementiert. –

+0

hast du einen Weg gefunden, das zu tun? – user1244109

+0

Ich versuche das Gleiche zu implementieren. Ich habe eine fast funktionierende Lösung, bei der ich zwischen zwei AVAssetWriters umschalte. Ich laufe auf Probleme, da ich Audio-Samples puffern muss, wenn ich zwischen den Writern wechsle. Ich erstelle eine Kopie des SampleBuffer mit CMSampleBufferCreateCopy. user1244109 - jeder Fortschritt? – user331244

Antwort

-1

Warum schreiben Sie die Daten überhaupt in eine Datei? Könnten Sie die Capture-Daten nicht einfach in den Speicher kopieren und dann aus dem Speicher auf den Server übertragen?

+0

Ich wünschte, ich kann das tun, aber Avassetwriter API von Apple zur Verfügung gestellt kann nur in Datei-URL schreiben. –

+0

Ich meine, warum überhaupt Avassetwriter? Da Sie die Daten sicher von irgendwoher bekommen und sie Avassetwriter geben, warum umgehen Sie nicht den Zwischenhändler und laden die Daten direkt von dort hoch? – bloopletech

+8

Da AVAssetWriter nicht nur Daten schreibt, sondern diese auch mithilfe der Hardware-Videocodierung effizient komprimiert. – kolyuchiy

1

Ja avassetwriter ist der einzige Weg, um zum Hardware-Decoder zu gelangen. und einfach das Zurücklesen der Datei, während es geschrieben wird, gibt Ihnen die Moov-Atome nicht, so dass avfoundation oder mpmediaplayer-basierte Spieler es nicht zurücklesen können. Sie haben nur ein paar Auswahlmöglichkeiten, stoppen Sie regelmäßig den Asassetwriter und schreiben Sie in die Datei in einem Hintergrundthread, um Ihren Film effektiv in kleinere vollständige Dateien zu segmentieren. oder Sie könnten mit dem unvollständigen MP4 auf der Server-Seite umgehen, müssen Sie die Raw Nalu entschlüsseln und die fehlenden Moov Atome neu erstellen. Wenn du ffmpeg mov.c als Quelle verwendest, schaue nach. Dies ist auch, wenn eine unvollständige mp4-Datei fehlschlagen würde.

+0

Bitte sehen Sie meine Antwort auf diese Frage http://StackOverflow.com/Questions/13851481/http-live-streaming-Server-on-Iphone/13889048#13889048 –