我在我的应用程序中使用了 FFMPEg 代码,我需要为我的程序获取 FLV 数据包。为此,我使用 avcodec_encode_video2()。我的问题是该函数创建了 AVPacket 数据包,它不保留完整的 FLV 格式,只有它的主体。但我仍然需要它的标题。通常另一个函数 (av_write_frame()) 可以做到这一点。我不能在我的应用程序中使用 av_write_frame(),因为它不符合我的要求。所以也许有人知道 ffmpeg 库中的一个函数,它可以将 FLV 标头添加到通过 avcodec_encode_video2() 创建的数据包中。
问问题
1709 次
1 回答
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};
于 2012-05-25T12:45:27.510 回答