Używam api FFMpeg do kodowania obrazów do strumienia H.264, kod jest taki jak ten encode code. Kiedy zadzwoniłem do funkcji avcodec_encode_video2
otrzymałem jedno dane AVPacket, a następnie zapisałem je do pliku. Używam kilku obrazów, aby uzyskać kilka plików do testu. Na podstawie kodu startowego 00 00 00 01
lub , znalazłem, że dane pierwszego i drugiego pliku zawierają obie H.264 NAL Uints. Ale zacznij od trzeciego pliku, nie mogę znaleźć kodu początkowego. Podobnie jak obserwowany obraz. Jaki jest związek między AVPacket w FFMpeg i H.264 NAL Uint?
Czuję się zdezorientowany. Bazując na kodzie FFMpeg, uważam, że dane jednego pakietu AVPacket powinny zawierać co najmniej jedną NAL Uint, ale wynik jest nieoczekiwany. Czy to oznacza, że jeden NAL Uint może być podzielony na dwa dane AVPackets? Jaki jest związek między AVPacket a H.264 NAL Uint?
Czy możesz pokazać swój kod? Podejrzewam, że twoje wywołanie kodowania w rzeczywistości nie zwróciło pakietu (got_packet_ptr == 0) lub coś podobnego. –
Od [FFmpeg doxygen] (http://ffmpeg.org/doxygen/trunk/group__lavc__encoding.html#gaa2dc9e9ea2567ebb2801a08153c7306b) na 'avcodec_encode_video2': * Wprowadza wejściowe surowe dane wideo z ramki i zapisuje następny pakiet wyjściowy, jeśli jest dostępny, do avpkt . Pakiet wyjściowy ** niekoniecznie zawiera dane dla najnowszej ramki **, ponieważ kodery mogą wewnętrznie opóźniać i zmieniać kolejność ramek w razie potrzeby. * Prawdopodobnie jest on podzielony. Czy możesz połączyć dane i przekazać je do dekodera, aby sprawdzić, czy narzeka, czy nie? – incBrain
@ RonaldS.Bultje I debugować mój program, 'got_output' faktycznie tak naprawdę za każdym razem. – Ello