📄 flvdecoder.h
字号:
#ifndef __FLV_DECODER_H__
#define __FLV_DECODER_H__
#include <e32std.h>
#include <eikenv.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "avcodec.h"
#include "KeyFrameMan.h"
#include "NeoFile.h"
typedef int64_t offset_t;
#define AV_TIME_BASE 1000000
#define AMF_END_OF_OBJECT 0x09
#define FLV_AUDIO_CODECID_OFFSET 4
#define FLV_VIDEO_FRAMETYPE_MASK 0xf0
#define FLV_VIDEO_FRAMETYPE_OFFSET 4
enum {
FLV_HEADER_FLAG_HASVIDEO = 1,
FLV_HEADER_FLAG_HASAUDIO = 4,
};
enum {
FLV_TAG_TYPE_AUDIO = 0x08,
FLV_TAG_TYPE_VIDEO = 0x09,
FLV_TAG_TYPE_META = 0x12,
};
enum {
FLV_CODECID_PCM_BE = 0,
FLV_CODECID_ADPCM = 1 << FLV_AUDIO_CODECID_OFFSET,
FLV_CODECID_MP3 = 2 << FLV_AUDIO_CODECID_OFFSET,
FLV_CODECID_PCM_LE = 3 << FLV_AUDIO_CODECID_OFFSET,
FLV_CODECID_NELLYMOSER_8HZ_MONO = 5 << FLV_AUDIO_CODECID_OFFSET,
FLV_CODECID_NELLYMOSER = 6 << FLV_AUDIO_CODECID_OFFSET,
};
enum {
FLV_CODECID_H263 = 2,
FLV_CODECID_SCREEN = 3,
FLV_CODECID_VP6 = 4,
FLV_CODECID_VP6A = 5,
FLV_CODECID_SCREEN2 = 6,
};
enum {
FLV_FRAME_KEY = 1 << FLV_VIDEO_FRAMETYPE_OFFSET,
FLV_FRAME_INTER = 2 << FLV_VIDEO_FRAMETYPE_OFFSET,
FLV_FRAME_DISP_INTER = 3 << FLV_VIDEO_FRAMETYPE_OFFSET,
};
typedef enum {
AMF_DATA_TYPE_NUMBER = 0x00,
AMF_DATA_TYPE_BOOL = 0x01,
AMF_DATA_TYPE_STRING = 0x02,
AMF_DATA_TYPE_OBJECT = 0x03,
AMF_DATA_TYPE_NULL = 0x05,
AMF_DATA_TYPE_UNDEFINED = 0x06,
AMF_DATA_TYPE_REFERENCE = 0x07,
AMF_DATA_TYPE_MIXEDARRAY = 0x08,
AMF_DATA_TYPE_ARRAY = 0x0a,
AMF_DATA_TYPE_DATE = 0x0b,
AMF_DATA_TYPE_UNSUPPORTED = 0x0d,
} AMFDataType;
unsigned char get_byte(CNeoFILE* aNeoFile);
unsigned int get_be16(CNeoFILE* aNeoFile);
unsigned int get_be24(CNeoFILE* aNeoFile);
unsigned int get_be32(CNeoFILE* aNeoFile);
uint64_t get_be64(CNeoFILE* aNeoFile);
double av_int2dbl(int64_t v);
int filesize(CNeoFILE* aNeoFile);
int filesize_from_current(CNeoFILE* aNeoFile);
int flv_read_header(CNeoFILE* aNeoFile, unsigned char& flags);
int flv_read_metabody(CNeoFILE* aNeoFile, unsigned int next_pos);
int flv_read_next_packet(CNeoFILE* aNeoFile, unsigned char* &buff, int& size, int& pts, int& retType, int buff_null = 0);
int flv_read_next_packet_header(CNeoFILE* aNeoFile, int& retType, long& next, int& pts);
int flv_read_pts(CNeoFILE* aNeoFile, int& pts);
int flv_read_if_metabody(CNeoFILE* aNeoFile, int& retType);
int flv_find_next_keyframe(CNeoFILE* aNeoFile, int& duration, int& position);
int amf_get_string(CNeoFILE* aNeoFile, char *buffer, int buffsize);
int amf_parse_object(CNeoFILE* aNeoFile, const char *key, unsigned int max_pos, int depth);
// Keyframe Link List
struct TKeyFrameLinkListItem
{
long position;
double timestamp;
struct TKeyFrameLinkListItem* next;
};
struct TFLVGlobalVar {
double duration;
int width, height;
int audiocodecid, videocodecid;
double framerate;
struct TKeyFrameLinkListItem keyframes;
struct TKeyFrameLinkListItem* keyFramePointer;
};
void SetDuration(int duration);
TFLVGlobalVar& GetFLVGlobalVar();
int FLVCalculateFrameRate(CNeoFILE* aNeoFile);
double FLVGetDuration();
void ResetFrameRateAndCodecID();
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -