FFMPEG:AVPacket的FLV报头
我在我的应用程序中使用了FFMPEg代码,我需要为我的程序获取FLV数据包。为此,我使用avcodec_encode_video2()。我的问题是该函数创建的AVPacket数据包并没有保留完整的FLV格式,只有它的主体。但我仍然需要它的标题。通常由另一个函数(av_write_frame())实现。我不能在我的应用程序中使用av_write_frame(),因为它不符合我的要求。因此,也许有人知道ffmpeg库中的一个函数,它可以通过avcodec_encode_video2()将FLV头添加到创建的数据包中。FLV头本身相对简单 可以使用以下代码对其进行建模:FFMPEG:AVPacket的FLV报头,ffmpeg,flv,Ffmpeg,Flv,我在我的应用程序中使用了FFMPEg代码,我需要为我的程序获取FLV数据包。为此,我使用avcodec_encode_video2()。我的问题是该函数创建的AVPacket数据包并没有保留完整的FLV格式,只有它的主体。但我仍然需要它的标题。通常由另一个函数(av_write_frame())实现。我不能在我的应用程序中使用av_write_frame(),因为它不符合我的要求。因此,也许有人知道ffmpeg库中的一个函数,它可以通过avcodec_encode_video2()将FLV头添加
/* FLV file header */
#define FLV_SIGNATURE "FLV"
#define FLV_VERSION ((uint8)0x01)
#define FLV_FLAG_VIDEO ((uint8)0x01)
#define FLV_FLAG_AUDIO ((uint8)0x04)
typedef struct __flv_header {
uint8_t signature[3]; /* always "FLV" */
uint8_t version; /* should be 1 */
uint8_t flags;
uint32_t offset; /* always 9 */
} flv_header;
flags
字段是一个位掩码,用于告诉文件是包含视频流、音频流还是两个流。例如,如果文件包含音频和视频,则其值将为5
请注意,偏移量
字段是用大端单位编码的,在小端单位上,它由值150994944表示
如果您不希望使用这种结构,并且有一种直接写入缓冲区的方法,您可以这样创建它:
uint_8 buffer[9] = {0x46, 0x4c, 0x56, 0x01, 0x05, 0x00, 0x00, 0x00, 0x09};
谢谢,这个头是FLV文件,我需要FLV包:类型,BodyLength,Timestamp,TimestampExtended,StreamId,Body()。ffmpeg中有flv_write_packet(AVFormatContext*s,AVPacket*pkt),它创建了这个标题。很抱歉误解:)技术上,我描述了标题,你想要的是flv标签。