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

📄 flvfile.h

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 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 + -