📄 flvfile.h
字号:
/********************************************************************************************
Copyright (C), 2007, Fuzhou Rockchip Co.,Ltd.
File:
FlvFile.h
Description:
Flv File demmux.
Note:
None.
Author:
ljn
$Log: FlvFile.h,v $
********************************************************************************************/
#ifndef FLVFILE_H
#define FLVFILE_H
#ifdef _IN_FLVFILE_H
#undef EXT
#define EXT
#else
#define EXT extern
#endif
#define ON_RKFS
#ifdef ON_RKFS
#define FlvFopen FS_fopen
#define FlvFClose FS_fclose
#define FLVFILE FS_FILE
#define FlvFseek FS_fseek
#define FlvFread FS_fread
#define FlvFtell FS_ftell
#define FlvFastFseek FSFileSeekEx
#else
#define FlvFread fread
#define FlvFseek fseek
#define FlvFopen fopen
#define FlvFtell ftell
#define FLVFILE FILE
#endif
#ifndef DWORD
typedef unsigned long int DWORD;
#endif
typedef DWORD FOURCC;
#ifndef LONG
typedef unsigned long int LONG;
#endif
#ifndef BYTE
typedef unsigned char BYTE;
#endif
#ifndef WORD
typedef short int WORD;
#endif
#ifndef uint32
typedef unsigned int uint32;
#endif
#define FLV_STATE_PLAYING 0
#define FLV_STATE_FFD 1
#define FLV_STATE_FFW 2
#define FLV_STATE_PAUSE 3
#define FLV_STATE_STOP 4
#define FLV_STATE_INITIALIZING 5
#define STRIDE_16_ALIGN(len) ((len + 15)/16)*16
#define IS_FLV_VIDEO_INDEX(nType) ((nType&0x2) == 0x0)
#define IS_FLV_VIDEO_TYPE(nType) (((nType&0x1) == 0x0)? FLV_I_FRAME : FLV_P_FRAME)
#define IS_FLV_AUDIO_INDEX(nType) ((nType&0x2) == 0x2)
#define IS_FLV_INDEX_END(nType) ((nType&0xF) == 0xF)
#define _X_BE_32(x) (((unsigned long)(((unsigned char*)(x))[0]) << 24) | \
((unsigned long)(((unsigned char*)(x))[1]) << 16) | \
((unsigned long)(((unsigned char*)(x))[2]) << 8) | \
((unsigned long)((unsigned char*)(x))[3]))
#define FLV_SKIP_FLAG_NONE 0
#define FLV_SKIP_FLAG_FFD 1
#define FLV_SKIP_FLAG_FFW 2
#define FLV_SKIP_FLAG_END 3
#define FLV_TAG_TYPE_AUDIO 0x08
#define FLV_TAG_TYPE_VIDEO 0x09
#define FLV_TAG_TYPE_SCRIPT 0x12
#define FLV_SOUND_FORMAT_PCM_BE 0x00
#define FLV_SOUND_FORMAT_ADPCM 0x01
#define FLV_SOUND_FORMAT_MP3 0x02
#define FLV_SOUND_FORMAT_PCM_LE 0x03
#define FLV_SOUND_FORMAT_NELLY8 0x05 /* Nellymoser 8KHz */
#define FLV_SOUND_FORMAT_NELLY 0x06
#define FLV_VIDEO_FORMAT_FLV1 0x02 /* H.263 */
#define FLV_VIDEO_FORMAT_SCREEN 0x03
#define FLV_VIDEO_FORMAT_VP6 0x04
#define FLV_VIDEO_FORMAT_VP6A 0x05
#define FLV_VIDEO_FORMAT_SCREEN2 0x06
#define FLV_FILE_PARSING_OK 0
#define FLV_FILE_FORMAT_ERR -1
#define FLV_FILE_INDX_ERR -2
#define FLV_FILE_NO_MOVI_CHUNK -3
#define FLV_FILE_RESOLUTION_ERR -4
#define FLV_FILE_VIDEO_CODEC_ERR -5
#define FLV_FILE_AUDIO_CODEC_ERR -6
#define FLV_FILE_OPEN_ERR -7
#define FLV_HEADER_SIZE 8
#define FLV_I_FRAME 0
#define FLV_P_FRAME 1
/* Packet Info struct by ljn @2008-1-8 15:12:08 */
typedef struct
{
DWORD read; /* size read out. */
DWORD type;
DWORD size;
DWORD time;
}PacketInfo;
typedef struct
{
DWORD offset;
DWORD frmID;
}FlvKeyFrame;
/* Flv Demux struct by ljn @2008-1-8 15:07:50 */
typedef struct
{
FLVFILE *videoStr;
FLVFILE *audioStr;
FlvKeyFrame *keyFrm;
PacketInfo curVideo;
PacketInfo curAudio;
DWORD audioFlag; /* audio flag. if audio stream is not exist or not supported, its value will be 0. */
DWORD videoFlag; /* video flag. if video stream is not exist or not supported, its value will be 0. */
DWORD aFormat;
DWORD vFormat;
DWORD start; /* in bytes */
DWORD size; /* in bytes */
DWORD length; /* in ms */
DWORD width;
DWORD height;
DWORD frameRate; /* */
DWORD totalKeyFrm; /* total I frame number */
DWORD videoFrmNum; /* current video frame number */
DWORD keyFrmNum; /* current video frame number */
DWORD hdrRemain;
DWORD destTime;
DWORD seekTime;
DWORD skipFlag; /* skip flag for fill video buffer */
DWORD lastSkipPos; /* last skip position. */
} FlvDemux;
EXT FlvDemux flv;
EXT unsigned int flvPlayState;
EXT int FlvFileParsing(FlvDemux *flv);
EXT int FlvVideoGetDataToSDRAM(FlvDemux *flv, char *buffer, DWORD *size);
EXT int FlvAudioGetDataToSDRAM(FlvDemux *flv, char *buffer, DWORD *size);
EXT int FlvAudioSeek(FlvDemux *flv, long offset, int origin);
EXT int FlvFileOpen(FlvDemux *flv, char *path);
EXT void FlvFileClose(FlvDemux *flv);
EXT int FlvSynAudio2Video(FlvDemux *flv);
EXT int FlvSeek(FlvDemux *flv, unsigned int time);
EXT int FlvVideoGetNextKeyFrm(FlvDemux *flv, PacketInfo *frmInfo);
EXT int FlvVideoGetPreKeyFrm(FlvDemux *flv, PacketInfo *frmInfo);
EXT int FlvVideoGetNextFrmInfo(FlvDemux *flv);
EXT int FlvAudioGetNextFrmInfo(FlvDemux *flv);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -