我在我的应用程序中使用了 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/