Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : mit ffmpeg avi -> h.263 -> avi (avcodec, avformat)



7.e.Q
31-01-2006, 08:08
Hi Leute,

ich möchts gern nochmal versuchen. Also ich möchte in C/C++ unter Linux ffmpeg und die libavcodec und libavformat dazu verwenden, eine AVI Datei in H.263 RTP Payloads zu verpacken und wieder zurück. Das AVI liegt als unkomprimiertes Video mit 24bit RGB vor. AVCodec ruft ja dann eine Callback Funktion des CodecContext auf, die die RTP Payloads übergeben erhält. In dieser Callback speichere ich die RTP Payloads in ein paar Listen, die ich später dazu verwende, um die darin enthaltenen Daten in eine Datei zu schreiben, die ich dann <Videoname>.rtp nenne. Die RTP Payloads daraus lese ich noch später wieder ein und möchte sie wieder zurück in ein AVI File desselben Formats wie das der Ursprungsdaei verwandeln. Auflösung ist 352x288 (CIF), Pixelformat für H263 ist YUV420P. Der komplette Durchlauf hat auch insofern schon geklappt, daß ich am Ende wieder ein AVI File herausbekomme. Allerdings ist darauf nichts mehr vom Ursprungsvideo zu erkennen. Das Ursprungsvideo ist eine Aufnahme einer Formel1 Szene. Das Video, was da bis jetzt am Ende herauskommt, ist nur grüner Linien-Matsch mit ein paar Blitzen zwischendrin.

Also... Wenn mir jemand zeigen könnte, wie man mit AVCodec und AVFormat ein Video nach H263 kodiert und wieder zurück, wäre ich suuuuuper dankbar!

Gruß,
Hendrik

EDIT: Also ums nochmal vereinfacht zu sagen:

Ich verwende libavcodec dafür, aus einem AVI File eines bestimmten Formats (s.o.) einen UDP/RTP Stream zu machen. AVCodec kann das auch schon ganz alleine. Man überführt "einfach" die aus dem AVI File geladenen Bilder an die Funktion avcodec_encode_video. Selbige ruft intern eine als Callback an den CodecContext gegebene Funktion auf, die dann als Parameter die generierten RTP Payloads bekommt. Ich denke, normalerweise werden diese dann in dieser Funktion auf's Netz geschickt. Ich speichere sie allerdings in einer Datei auf der Festplatte.

Jetzt geht es aber darum, aus dieser RTP Payload Datei im ersten Schritt erstmal die Einzelbilder wieder herauszuholen. Und das bereitet mir Probleme.

Vielleicht will sich ja mal jemand mein Test-Programm anschauen. Es liegt auf http://7eq.ath.cx/repos/H263TEST