gpt4 book ai didi

FFMPEG:AVPacket 的 FLV header

转载 作者:行者123 更新时间:2023-12-04 23:30:59 32 4
gpt4 key购买 nike

我在我的应用程序中使用了 FFMPEg 代码,我需要为我的程序获取 FLV 数据包。为此,我使用 avcodec_encode_video2()。我的问题是该函数创建了 AVPacket 数据包,它不保留完整的 FLV 格式,只有它的主体。但我仍然需要它的标题。通常另一个函数 (av_write_frame()) 可以做到这一点。我不能在我的应用程序中使用 av_write_frame(),因为它不符合我的要求。所以也许有人知道 ffmpeg 库中的一个函数,它可以将 FLV header 添加到通过 avcodec_encode_video2() 创建的数据包中。

最佳答案

FLV header 本身相对简单。

可以使用以下代码对其进行建模:

/* 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字段以大端编码,在小端平台上由值 150994944 表示。

如果你不想使用这样的结构,并且有办法直接写一个缓冲区,你可以这样创建它:
uint_8 buffer[9] = {0x46, 0x4c, 0x56, 0x01, 0x05, 0x00, 0x00, 0x00, 0x09};

关于FFMPEG:AVPacket 的 FLV header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10754047/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com