2013-06-10 11 views

Odpowiedz

5

Aktualizacja 2017:

Można zrobić Streaming wideo i audio teraz za pomocą VideoToolbox API. Przeczytaj dokumentację tutaj: VTCompressionSession

oryginalny odpowiedź (od 2013 roku):

Krótki: Nie można bufor próbka pojawić się nieskompresowany.

Metody uzyskać sprzętową akcelerację kompresji H264:

Jak widać zarówno zapisu do pliku, pisząc do rury nie działa jak aktualizacje enkodera informacje nagłówka po pełnym zapisaniu ramki lub GOP. Lepiej więc nie dotykaj pliku, gdy koder zapisuje do niego, ponieważ losowo przepisuje informacje nagłówka. Bez tej informacji nagłówka plik wideo nie będzie możliwy do odtworzenia (aktualizuje pole rozmiaru, więc pierwszy napisany nagłówek mówi, że plik ma 0 bajtów). Bezpośrednie zapisywanie w obszarze pamięci nie jest obecnie obsługiwane. Ale można otworzyć zakodowane wideo plik i demuksowanie strumień aby dostać się do danych H264 (po enkoder został zamknięty plik oczywiście)

7

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ą.

Powiązane problemy