⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flvdecoder.h

📁 symbian下的FLV播放视频源码 可以快速便捷的播放FLV格式的视频
💻 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 + -