2013-06-10 5 views

Antwort

5

Update für 2017:

Sie können nun Streaming-Video und Audio tun, indem Sie die VideoToolbox API. Lesen Sie die Dokumentation hier: VTCompressionSession

Original-Antwort (ab 2013):

Kurz: Sie nicht können, der Probenpuffer erhalten Sie unkomprimiert ist.

Wie Sie sehen können beide schreiben in eine Datei, das Schreiben zu einem Rohr nicht funktionieren, wie der Encoder-Updates:

Methoden Hardware-beschleunigten h264 Kompression zu erhalten Header-Informationen nach einem Frame oder GOP wurde vollständig geschrieben. Sie sollten also die Datei nicht berühren, während der Encoder schreibt, da die Headerinformationen zufällig neu geschrieben werden. Ohne diese Header-Informationen ist die Videodatei nicht abspielbar (sie aktualisiert das Größenfeld, so dass der erste geschriebene Header angibt, dass die Datei 0 Byte groß ist). Das direkte Schreiben in einen Speicherbereich wird derzeit nicht unterstützt. Aber Sie können öffnen Sie die codierte Videodatei und demuxen um den Strom zu den h264 Daten zu erhalten (nach der Encoder die Datei natürlich geschlossen hat)

7

können Sie nur Rohvideos bekommen Bilder in entweder BGRA oder YUV-Farbformate von AVFoundation. Wenn Sie diese Frames jedoch über AVAssetWriter in einen mp4 schreiben, werden sie mit der H264-Codierung codiert.

Ein gutes Beispiel mit dem Code auf, wie das zu tun ist, RosyWriter

Beachten Sie, dass nach jedem AVAssetWriter schreiben, werden Sie wissen, dass ein kompletter H264 NAL auf eine mp4 geschrieben wurde. Sie könnten Code schreiben, der nach jedem Schreiben durch AVAssetWriter eine vollständige H264-NAL liest, die Ihnen Zugriff auf einen H264-codierten Rahmen geben wird. Es kann ein wenig dauern, um es mit anständiger Geschwindigkeit richtig zu machen, aber es ist machbar (ich habe es erfolgreich gemacht).

Übrigens, um diese codierten Videoframes erfolgreich zu decodieren, benötigen Sie H264 SPS- und PPS-Informationen, die sich an einer anderen Stelle in der mp4-Datei befinden. In meinem Fall erstelle ich tatsächlich einige Test-MP4-Dateien und extrahiere diese dann manuell heraus. Da sich diese nicht ändern, außer Sie ändern die H264-kodierten Spezifikationen, können Sie sie in Ihrem Code verwenden.

Überprüfen Sie meine Post zu SPS values for H 264 stream in iPhone, um einige der SPS/PPS zu sehen, die ich in meinem Code verwendete.

Nur eine letzte Anmerkung, in meinem Fall musste ich h264-kodierte Frames zu einem anderen Endpunkt für die Dekodierung/Betrachtung streamen; also musste mein Code das schnell machen.In meinem Fall war es relativ schnell; aber irgendwann wechselte ich zu VP8 für die Kodierung/Dekodierung, nur weil es viel schneller war, weil alles im Speicher ohne Datei lesen/schreiben gemacht wurde.

Viel Glück, und hoffentlich hilft diese Info.

Verwandte Themen