PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVI nach H.263 encodieren???


SeveQ
09.02.2006, 12:06
Hi Leute,

hat hier jemand Ahnung davon, wie man mit FFMPEG unter Windows ein Video im AVI Format (24bit, 25fps, 176x144 Pixel, unkomprimierte Vollbilder) in einen H.263 encodierten RTP Stream umwandelt? Der RTP soll dann statt auf's Netzwerk roh in einer Datei abgespeichert werden.

Ich hab das ganze unter Linux schon erfolgreich gemacht, die Sourcen jetzt nach Windows portiert und übersetze das ganze erfolgreich mit MS Visual Studio 8 (FFMPEG wird mit MSYS & MinGW & gcc 3.4.2 übersetzt, dessen Umgebung beim Start die VCVARS32.BAT von MS VS8 aufruft). Es gibt keine Unterschiede im Ablauf zwischen meinem Windows-Programm und meinem Linux-Programm, aber das Ergebnis könnte unterschiedlicher kaum sein.

Unter Linux bekomme ich einen RTP Stream, den ich mir im MPlayer sauber anschauen kann. Allerdings fehlen am Ende einige Bilder, was mich wundert, da das Programm behauptet, es hätte alle Frames des AVI erfolgreich encodiert.

Unter Windows bekomme ich einen RTP Stream, den man sich zwar auch anschauen kann, der allerdings nur inakzeptabel verzerrtes und verfärbtes Bildmaterial enthält.

Ich habe mir auf beiden Systemen die ersten 10 Bytes jeder RTP Payload ausgeben lassen. Die Payload ist das, was die Callback Funktion von avcodec_encode_video mir zurückliefert. Das ganze sieht dann so aus:


Linux:
First 10 Bytes of Payload #140: 0x0 0x0 0x82 0x2e 0x1c 0xac 0x83 0x4 0x92 0x0
First 10 Bytes of Payload #141: 0x0 0x0 0x82 0x32 0x1c 0xac 0x83 0x0 0x12 0x0
First 10 Bytes of Payload #142: 0x0 0x0 0x82 0x36 0x1c 0xac 0x83 0x4 0x92 0x0
First 10 Bytes of Payload #143: 0x0 0x0 0x82 0x3a 0x1c 0xac 0x83 0x4 0x12 0x0
First 10 Bytes of Payload #144: 0x0 0x0 0x82 0x3e 0x1c 0xac 0x83 0x4 0x92 0x0
First 10 Bytes of Payload #145: 0x0 0x0 0x82 0x42 0x1c 0xac 0x83 0x4 0x12 0x0
First 10 Bytes of Payload #146: 0x0 0x0 0x82 0x46 0x1c 0xac 0x83 0x4 0x92 0x0
First 10 Bytes of Payload #147: 0x0 0x0 0x82 0x4a 0x1c 0xac 0x83 0x4 0x12 0x0
First 10 Bytes of Payload #148: 0x0 0x0 0x82 0x4e 0x1c 0xac 0x83 0x4 0x92 0x0
First 10 Bytes of Payload #149: 0x0 0x0 0x82 0x52 0x1c 0xac 0x83 0x4 0x12 0x0



Windows:
First 10 Bytes of Payload #140: 0x0 0x0 0x82 0x2e 0x1c 0xac 0x83 0x4 0x93 0x0
First 10 Bytes of Payload #141: 0x0 0x0 0x82 0x32 0x1c 0xac 0x83 0x0 0x13 0x0
First 10 Bytes of Payload #142: 0x0 0x0 0x82 0x36 0x1c 0xac 0x83 0x4 0x93 0x0
First 10 Bytes of Payload #143: 0x0 0x0 0x82 0x3a 0x1c 0xac 0x83 0x4 0x13 0x0
First 10 Bytes of Payload #144: 0x0 0x0 0x82 0x3e 0x1c 0xac 0x83 0x4 0x93 0x0
First 10 Bytes of Payload #145: 0x0 0x0 0x82 0x42 0x1c 0xac 0x83 0x4 0x13 0x0
First 10 Bytes of Payload #146: 0x0 0x0 0x82 0x46 0x1c 0xac 0x83 0x4 0x93 0x0
First 10 Bytes of Payload #147: 0x0 0x0 0x82 0x4a 0x1c 0xac 0x83 0x4 0x13 0x0
First 10 Bytes of Payload #148: 0x0 0x0 0x82 0x4e 0x1c 0xac 0x83 0x4 0x93 0x0
First 10 Bytes of Payload #149: 0x0 0x0 0x82 0x52 0x1c 0xac 0x83 0x4 0x13 0x0

Kann mir jetzt mal einer erklären, wieso bei Windows das Byte an 9. Stelle immer um 1 höher ist, als unter Linux???

Und kann mir einer erklären, wieso unter Linux die Payloads bei jedem Aufruf die gleiche Größe haben, bei Windows die Größen der Payloads stark variieren? Beispielsweise ist unter Linux Payload #140 immer 1204 Bytes lang. Unter Windows variiert die Größe zwischen 2000 und 2200 Bytes (!).

Ich hab das Gefühl, das hängt in irgendeiner Weise damit zusammen, wie bzw. womit man FFMPEG übersetzt. Das ist der einzige Unterschied, der mir jetzt gerade einfällt. Aber das war's dann auch, da habe ich keine andere Möglichkeit.

Ich brauche hierbei äußerst dringend Unterstützung!!!