Was die "Key Frames" (oder Intra-Frames) angeht habe ich etwas gefunden.
Die function ac_read_package liefert einen Zeiger zurück, der mehr enthält als die Deklaration TAc_Package hergibt.
Ich habe wie folgt deklariert
Delphi-Quellcode:
const
AV_PKT_FLAG_KEY = $0001;
type
PAVPacket = ^TAVPacket;
TAVPacket =
packed record {56}
pts: int64;
///< presentation time stamp in time_base units
dts: int64;
///< decompression time stamp in time_base units
data: PByte;
size: integer;
stream_index: integer;
flags: integer;
duration: integer;
///< presentation duration in time_base units (0 if not available)
destruct:
procedure (p: PAVPacket);
priv: pointer;
pos: int64;
///< byte position in stream, -1 if unknown
end;
PAc_package_Overload = ^TAc_package_Overload;
TAc_package_Overload =
packed record
{The stream the package belongs to.}
stream_index: integer;
_offset1 : integer;
AVPacket: TAVPacket;
end;
Dann kann das Ergebnis mittels typecast wie folgt verwendet werden
Delphi-Quellcode:
pack := ac_read_package(inst);
...
iskeyframe := ((PAc_package_Overload(pack)^.AVPacket.flags and AV_PKT_FLAG_KEY) <> 0);
die Boolsche Variable "iskeyframe" wird True wenn ein Startbild decodiert wurde. Funktioniert bei meinem H.264 HD test strom fast (selten ist das erste Frame nur grau) immer.
Gruß Ekkehard