#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DEBUG_INFO
typedef struct FileHeader {
unsigned char type[4]; // UI8 * 3 "FLV"
unsigned char versions; // UI8 版本号
unsigned char stream_info;//UI8 流信息
unsigned int length; // UI32 文件长度
}_FileHeader;
typedef struct TagHeader {
unsigned char type; // UI8 tag类型
unsigned int data_size; // UI24 数据区长度
unsigned int timestemp; // UI24 时间戳
unsigned char time_stamp_extended; //UI8 扩展时间戳
unsigned int stream_id; //UI24 流id
}_TagHeader;
typedef struct Tag {
_TagHeader *header;
unsigned char *data;
}_Tag;
_Tag *malloc_tag()
{
_Tag *tag = malloc(sizeof(_Tag));
if (tag == NULL) {
fprintf(stderr, "malloc tag error\n");
perror("malloc error:");
return NULL;
}
tag->header = NULL;
tag->data = NULL;
return tag;
}
void free_tag(_Tag **tag)
{
if(tag != NULL){
if(*tag == NULL){
return;
}
if ((*tag)->header != NULL) {
free((*tag)->header);
(*tag)->header = NULL;
}
if ((*tag)->data != NULL) {
free((*tag)->data);
(*tag)->data = NULL;
}
*tag = NULL;
}
}
int reverse_32(unsigned int a)
{
union {
int i;
char c[4];
} u, r;
u.i = a;
r.c[0] = u.c[3];
r.c[1] = u.c[2];
r.c[2] = u.c[1];
r.c[3] = u.c[0];
return r.i;
}
int reverse_24(unsigned int a)
{
union {
int i;
char c[4];
} u, r;
u.i = a;
r.c[0] = u.c[2];
r.c[1] = u.c[1];
r.c[2] = u.c[0];
r.c[3] = 0;
return r.i;
}
int read_file_header(FILE *pf, _FileHeader **p_header)
{
int ret = 0;
_FileHeader *header = malloc(sizeof(_FileHeader));
if (header == NULL) {
fprintf(stderr, "malloc file header error\n");
perror("malloc error:");
return -1;
}
memset(header, 0, sizeof(_FileHeader));
//read file type
if ((ret = fread(header->type, 3, 1, pf)) <= 0) {
goto __err_exit;
}
// read version, Usually 1
if ((ret = fread(&(header->versi
flv 解封装
最新推荐文章于 2024-07-09 11:27:31 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)