2010-12-17 8 views
9

Nach diesem What Techniques Are Best To Live Stream iPhone Video Camera Data To a Computer? ist es möglich, komprimierte Daten von iPhone-Kamera zu bekommen, aber wie ich in der AVFoundation-Referenz gelesen habe, erhalten Sie nur unkomprimierte Daten.Was ist die beste Art Live-Streaming von iPhone-Kamera zu einem Medienserver?

So sind die Fragen:

1) Wie komprimierten Rahmen und Audio von iPhone-Kamera zu bekommen?

2) Encoding unkomprimierte Frames mit ffmpegs API ist schnell genug für Echtzeit-Streaming?

Jede Hilfe wird wirklich geschätzt.

Danke.

+1

Wie haben Sie das gelöst? – DivineDesert

+0

Ich habe schließlich unkomprimierte Daten (Frames und Audio) von AVFoundation und Encoding + Streaming mit FFmpeg-API. Es funktioniert ziemlich gut im iPhone 4 und erreicht bis zu 30 FPS mit einer Auflösung von 192x240. In höheren Auflösungen werden zu viele Frames gelöscht. –

+0

@AlexandreOS Wie dies zu tun, bitte teilen Sie es, es hilfreich für uns, Danke – Ron

Antwort

8

Sie wahrscheinlich bereits wissen ....

1) Wie komprimierten Rahmen und Audio von iPhone-Kamera zu bekommen?

Sie können dies nicht tun. Die AVFoundation API hat dies aus jedem Blickwinkel verhindert. Ich habe sogar Named Pipes und einige andere hinterhältige Unix-Foo ausprobiert. Kein solches Glück. Sie haben keine andere Wahl, als es in die Datei zu schreiben. In Ihrem verknüpften Post schlägt ein Benutzer vor, den Rückruf einzurichten, um codierte Frames zu übermitteln. Soweit mir bekannt ist, ist dies für H.264-Streams nicht möglich. Der Erfassungsdelegat liefert Bilder, die in einem bestimmten Pixelformat codiert sind. Es sind die Movie Writer und AVAssetWriter, die die Codierung vornehmen.

2) Encoding unkomprimierte Frames mit ffmpegs API ist schnell genug für Echtzeit-Streaming?

Ja ist es. Allerdings müssen Sie libx264 verwenden, wodurch Sie in das GPL-Gebiet gelangen. Das ist nicht genau mit dem App Store kompatibel.

Ich würde AVfoundation und AVAssetWriter aus Effizienzgründen empfehlen.

+3

Eigentlich ist 1 teilweise falsch. Ich habe eine Bibliothek geschrieben, die H.264-Daten in Echtzeit liefert, während sie kodiert wird, ohne eine private API zu verwenden. –

+1

Könnten Sie diese Bibliothek mit uns teilen? Es wäre sehr gut, einen alternativen Weg zu haben, diese H.264-Streams zu bekommen, ohne libx264 zu benutzen. Deshalb habe ich am Ende MPEG-Codecs von FFmpeg verwendet. –

+0

@AlexandreOS Leider ist meine Bibliothek nur kommerziell lizenziert. Ich kann es in Zukunft unter einer doppelten Lizenz veröffentlichen. –

4

Ich stimme Steve zu. Ich würde hinzufügen, dass Sie beim Versuch, mit Apples API zu arbeiten, einige ernsthafte Hacking-Angriffe durchführen müssen. AVAssetWriter gibt standardmäßig eine Sekunde aus, bevor der Puffer in die Datei ausgelagert wird. Ich habe keine Möglichkeit gefunden, das mit Einstellungen zu ändern. Der Weg dahin scheint zu sein, kleine Dateischreibvorgänge und Datei mit der Verwendung von mehreren AVAssetWriters zu schließen. Aber das bringt viel Overhead. Es ist nicht schön.

Legen Sie definitiv eine neue Feature-Anfrage mit Apple (wenn Sie ein iOS-Entwickler sind). Je mehr von uns das tun, desto wahrscheinlicher werden sie einen Writer hinzufügen, der in einen Puffer und/oder in einen Stream schreiben kann.

Eine Ergänzung zu dem, was Steve über das GPL-Problem x264 sagte, ist, dass ich glaube, dass Sie eine kommerzielle Lizenz für das bekommen können, was besser ist als GPL, aber natürlich kostet Sie Geld. Aber das bedeutet, dass Sie es immer noch verwenden können und ziemlich gute Ergebnisse erzielen und nicht Ihre eigene App-Quelle öffnen müssen. Nicht so gut wie eine erweiterte Apple API mit ihren Hardware-Codecs, aber nicht schlecht.

Verwandte Themen