1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > FLV文件格式解析部分代码

FLV文件格式解析部分代码

时间:2022-01-11 08:36:18

相关推荐

FLV文件格式解析部分代码

转自:/blog/article.asp?id=856

前面在FLV文件格式大揭秘中介绍了FLV文件格式,其中也谈到了曾经编写的代码解析flv文件。应网友要求,现在把代码贴出来,仅供大家参考。因为这代码还是在写的,现在看来有些地方还不够准确,解析的也不够完全,所以仅供参考。

flvheadpacket.h #include"packet.h" classCFlvHeadPacket:publicCPacket { public: CFlvHeadPacket(void); CFlvHeadPacket(UInt8*pContent,UInt32nLength); ~CFlvHeadPacket(void); }; flvheadpacket.cpp #include"stdafx.h" #include"flvheadpacket.h" CFlvHeadPacket::CFlvHeadPacket(void) { m_nType=FLV_HEAD; } CFlvHeadPacket::CFlvHeadPacket(UInt8*pContent,UInt32nLength) { m_nType=FLV_HEAD; m_pContent=pContent; m_nLength=nLength; } CFlvHeadPacket::~CFlvHeadPacket(void) { } flvmetapacket.h #include"packet.h" classCFlvMetaPacket:publicCPacket { public: CFlvMetaPacket(void); CFlvMetaPacket(UInt8*pContent,UInt32nLength); ~CFlvMetaPacket(void); }; flvmetapacket.cpp #include"stdafx.h" #include"flvmetapacket.h" CFlvMetaPacket::CFlvMetaPacket(void) { m_nType=FLV_META; } CFlvMetaPacket::CFlvMetaPacket(UInt8*pContent,UInt32nLength) { m_nType=FLV_META; m_pContent=pContent; m_nLength=nLength; } CFlvMetaPacket::~CFlvMetaPacket(void) { } flvdatapacket.h #include"packet.h" enum{ FLV_UNKNOWN_FRAME, FLV_VIDEO_FRAME, FLV_AUDIO_FRAME }; classCFlvDataPacket:publicCPacket { public: CFlvDataPacket(void); CFlvDataPacket(UInt8*pContent,UInt32nLength); ~CFlvDataPacket(void); voidPrint(); UInt8m_nDataType; UInt32m_nTime; UInt8m_nFlag; }; flvdatapacket.cpp #include"stdafx.h" #include"flvdatapacket.h" CFlvDataPacket::CFlvDataPacket(void) { m_nType=FLV_DATA; m_nDataType=FLV_UNKNOWN_FRAME; } CFlvDataPacket::CFlvDataPacket(UInt8*pContent,UInt32nLength) { m_nType=FLV_DATA; m_pContent=pContent; m_nLength=nLength; if(m_pContent[0]==8) m_nDataType=FLV_AUDIO_FRAME; elseif(m_pContent[0]==9) m_nDataType=FLV_VIDEO_FRAME; else m_nDataType=FLV_UNKNOWN_FRAME; m_nTime=FOUR_CHARS_TO_INT(0,m_pContent[4],m_pContent[5],m_pContent[6]); m_nFlag=m_pContent[11]; } CFlvDataPacket::~CFlvDataPacket(void) { } voidCFlvDataPacket::Print() { printf("Type:%d,DataType=%d,Time=%d,Flag=%d,Length=%d/n",m_nType,m_nDataType,m_nTime,m_nFlag,m_nLength); }flvreader.h #ifndef__FLVREADER_H__ #define__FLVREADER_H__ #defineFLV_HEAD_LENGTH13 #defineFLV_DATA_HEAD_LENGTH11 classCFlvDataPacket; classCFlvHeadPacket; classCFlvMetaPacket; classCFlvReader { public: CFlvReader(void); ~CFlvReader(void); public: SInt8*m_sFile; FILE*m_pFile; UInt32m_nOffset; BOOLSetFile(SInt8*sFile); FILESTAT64GetFileStat64(); FILESTATGetFileStat(); CFlvHeadPacket*ReadHeader(); CFlvMetaPacket*ReadMeta(); CFlvDataPacket*GetNextDataPacket(); }; #endif flvreader.cpp #include"stdafx.h" #include"flvreader.h" #include"flvdatapacket.h" #include"flvheadpacket.h" #include"flvmetapacket.h" CFlvReader::CFlvReader(void) { m_sFile=NULL; m_pFile=NULL; m_nOffset=0; } CFlvReader::~CFlvReader(void) { if(m_pFile!=NULL) { fclose(m_pFile); m_pFile=NULL; } } BOOLCFlvReader::SetFile(SInt8*sFile) { if(m_pFile!=NULL) { fclose(m_pFile); m_pFile=NULL; } m_sFile=sFile; m_pFile=fopen(m_sFile,"rb"); returnm_pFile!=NULL; } CFlvHeadPacket*CFlvReader::ReadHeader() { UInt8*pContent=newUInt8[FLV_HEAD_LENGTH]; UInt32nRead=fread(pContent,sizeof(SInt8),FLV_HEAD_LENGTH,m_pFile); if(nRead==FLV_HEAD_LENGTH) { returnnewCFlvHeadPacket(pContent,FLV_HEAD_LENGTH); } else { deletepContent; returnNULL; } } CFlvMetaPacket*CFlvReader::ReadMeta() { UInt8buf[FLV_DATA_HEAD_LENGTH]; UInt32nRead=fread(buf,sizeof(UInt8),FLV_DATA_HEAD_LENGTH,m_pFile); if(nRead==FLV_DATA_HEAD_LENGTH) { if(buf[0]==18)//meta { UInt32nSize=FOUR_CHARS_TO_INT(0,buf[1],buf[2],buf[3]); UInt8*pContent=newUInt8[nSize+FLV_DATA_HEAD_LENGTH+4]; memcpy(pContent,buf,FLV_DATA_HEAD_LENGTH); nRead=fread(&pContent[FLV_DATA_HEAD_LENGTH],sizeof(UInt8),nSize+4,m_pFile); if(nRead=(nSize+4)) { returnnewCFlvMetaPacket(pContent,nSize+FLV_DATA_HEAD_LENGTH+4); } else { deletepContent; returnNULL; } } } returnNULL; } CFlvDataPacket*CFlvReader::GetNextDataPacket() { UInt8buf[FLV_DATA_HEAD_LENGTH]; UInt32nRead=fread(buf,sizeof(UInt8),FLV_DATA_HEAD_LENGTH,m_pFile); if(nRead==FLV_DATA_HEAD_LENGTH) { if(buf[0]==8||buf[0]==9) { UInt32nSize=FOUR_CHARS_TO_INT(0,buf[1],buf[2],buf[3]); UInt8*pContent=newUInt8[nSize+FLV_DATA_HEAD_LENGTH+4]; memcpy(pContent,buf,FLV_DATA_HEAD_LENGTH); nRead=fread(&pContent[FLV_DATA_HEAD_LENGTH],sizeof(UInt8),nSize+4,m_pFile); if(nRead=(nSize+4)) { returnnewCFlvDataPacket(pContent,nSize+FLV_DATA_HEAD_LENGTH+4); } else { deletepContent; returnNULL; } } } returnNULL; } FILESTATCFlvReader::GetFileStat() { FILESTATfileStat; memset(&fileStat,0,sizeof(FILESTAT)); if(m_pFile!=NULL) { if(_stat(m_sFile,&fileStat)!=0) { printf("/nGetFileStatError!/n"); } } returnfileStat; } FILESTAT64CFlvReader::GetFileStat64() { FILESTAT64fileStat; memset(&fileStat,0,sizeof(FILESTAT64)); if(m_pFile!=NULL) { if(_stat64(m_sFile,&fileStat)!=0) { printf("/nGetFileStat64Error!/n"); } } returnfileStat; }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。