Ich benutze FFMpeg's API, um Bilder in H.264-Stream zu kodieren, der Code ist wie folgt encode code. Als ich die Funktion avcodec_encode_video2
anrief, bekam ich die Daten eines AVPackets, dann speicherte ich es in der Datei. Ich benutze mehrere Bilder, um mehrere Dateien zum Test zu bekommen. Basierend auf dem Startcode 00 00 00 01
oder 00 00 01
, fand ich, dass die Daten der 1. und 2. Datei beide mehrere H.264 NAL Uints enthalten. Aber ab der dritten Datei kann ich den Startcode nicht finden. Wie das folgende Bild. Welche Beziehung besteht zwischen AVPacket in FFMpeg und H.264 NAL Uint?
Ich fühle mich verwirrt. Basierend auf dem Code von FFMpeg denke ich, dass die Daten eines AVPackets mindestens eine NAL Uint enthalten sollten, aber das Ergebnis ist unerwartet. Bedeutet das, dass eine NAL Uint in zwei AVPackets Daten aufgeteilt werden kann? Welche Beziehung besteht zwischen AVPacket und H.264 NAL Uint?
Können Sie Ihren Code anzeigen? Ich vermute, dass Ihr Encoding-Aufruf nicht wirklich ein Paket zurückgab (got_packet_ptr == 0) oder so ähnlich. –
Von [FFmpeg doxygen] (http://ffmpeg.org/doxygen/trunk/group__lavc__encoding.html#gaa2dc9e9ea2567ebb2801a08153c7306b) auf 'avcodec_encode_video2': * Nimmt rohe Videodaten aus dem Frame und schreibt das nächste Ausgabepaket, falls verfügbar, an avpkt . Das Ausgabepaket ** enthält nicht unbedingt Daten für den letzten Frame **, da Encoder interne Frames je nach Bedarf intern verzögern und neu anordnen können. * Wahrscheinlich ist es also aufgeteilt. Können Sie die Daten verketten und sie dem Decoder zuführen, um zu sehen, ob sie sich beschweren oder nicht? – incBrain
@ RonaldS.Bultje Ich debugge mein Programm, die 'got_output' tatsächlich jedes Mal wahr. – Ello