Holen Sie sich PTS aus der von iOS AVAssetWriter generierten H264-Rohdatei

Ich versuche, gleichzeitig eine von AVAssetWriter geschriebene H.264-MOV-Datei zu lesen und zu schreiben. Ich habe es geschafft, einzelne NAL-Einheiten zu extrahieren, sie in die AVPackets von ffmpeg zu packen und sie mit ffmpeg in ein anderes Videoformat zu schreiben. Es funktioniert und die resultierende Datei wird gut abgespielt, außer die Wiedergabegeschwindigkeit stimmt nicht. Wie berechne ich die richtigen PTS / DTS-Werte aus H.264-Rohdaten? Oder gibt es vielleicht einen anderen Weg, um sie zu bekommen?

Folgendes habe ich versucht:

Begrenzen Sie die minimale / maximale Bildrate für die Aufnahme auf 30 und gehen Sie davon aus, dass die Ausgabedatei 30 fps beträgt. Tatsächlich sind die fps immer geringer als die von mir eingestellten Werte. Und außerdem denke ich, dass die fps nicht von Paket zu Paket konstant sind.

Erinnern Sie sich an den Präsentations-Zeitstempel jedes geschriebenen Samples und nehmen Sie an, dass die Samples NALUs eins zu eins zuordnen und den gespeicherten Zeitstempel auf das Ausgabepaket anwenden. Das geht nicht.

Setzen Sie PTS auf 0 oder AV_NOPTS_VALUE. Funktioniert nicht

Wenn ich darüber google, verstehe ich, dass rohe H.264-Daten normalerweise keine Timing-Informationen enthalten. Es kann manchmal einige Timing-Informationen in SEI geben, aber die Dateien, die ich verwende, haben diese nicht. Auf der anderen Seite gibt es einige Anwendungen, die genau das tun, was ich versuche, also denke ich, dass es irgendwie möglich ist.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage