Można tylko dostać surowe obrazy wideo w dowolnym BGRA lub YUV formatów kolorów od AVFoundation. Jednakże, kiedy piszemy te klatki do mp4 przez AVAssetWriter, będą one kodowane przy użyciu kodowania H264.
Dobrym przykładem z kodem, w jaki sposób zrobić to RosyWriter
pamiętać, że po każdym zapisie AVAssetWriter, będziesz wiedzieć, że jeden kompletny H264 NAL został napisany do mp4. Mógłbyś napisać kod, który odczyta kompletny HN4 NAL po każdym zapisie przez AVAssetWriter, który da ci dostęp do zakodowanej ramki H264. Trochę może zająć trochę czasu, aby zrobić to dobrze z przyzwoitą prędkością, ale jest to wykonalne (zrobiłem to z powodzeniem).
Przy okazji, w celu pomyślnego odkodowania tych zakodowanych klatek wideo potrzebne będą informacje H264 SPS i PPS, które znajdują się w innym miejscu pliku mp4. W moim przypadku tworzę kilka testowych plików mp4, a następnie ręcznie je wyodrębniam. Ponieważ te nie zmieniają się, chyba że zmienisz specyfikacje kodowane w H264, możesz ich użyć w swoim kodzie.
Sprawdź mój post do SPS values for H 264 stream in iPhone aby zobaczyć niektóre z SPS/PPS użyłem w moim kodu.
Tylko ostatnia uwaga, w moim przypadku musiałem stream H264 zakodowanych ramek do innego punktu końcowego do dekodowania/wyświetlania; więc mój kod musiał to zrobić szybko.W moim przypadku był stosunkowo szybki; ale ostatecznie przełączyłem się na VP8 w celu kodowania/dekodowania tylko dlatego, że było o wiele szybciej, ponieważ wszystko zostało zrobione w pamięci bez odczytu/zapisu pliku.
Powodzenia i mam nadzieję, że te informacje pomogą.