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