FFMPEG:AVPacket的FLV标头

时间:2012-05-25 12:00:28

标签: ffmpeg flv

我在我的应用程序中使用了FFMPEg代码,我需要为我的程序获取FLV数据包。为此,我使用avcodec_encode_video2()。我的问题是函数创建AVPacket数据包,它不保持完整的FLV格式,只保留其正文。但我还需要它的标题。通常另一个函数(av_write_frame())成功。我不能在我的应用程序中使用av_write_frame(),因为它不符合我的要求。所以也许任何人都知道ffmpeg库中的一个函数,它可以通过avcodec_encode_video2()将FLV头添加到创建的数据包中。

1 个答案:

答案 0 :(得分:0)

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。

请注意offset字段是用big-endian编码的,在little-endian平台上用值150994944表示。

如果你不想使用这样的结构,并且有办法直接写缓冲区,你可以像这样创建它:

uint_8 buffer[9] = {0x46, 0x4c, 0x56, 0x01, 0x05, 0x00, 0x00, 0x00, 0x09};