#include #include #include "FlvParser.h" void Process(std::fstream &fin, char *filename); int main(int argc, char *argv[]) { if (argc < 3) { printf("flvparser [input file] [output file]\n"); return -1; } std::fstream fin; fin.open(argv[1], std::ios_base::in | std::ios_base::binary); if (!fin) { std::cout << "fstream init error" << std::endl; return -1; } Process(fin, argv[1]); fin.close(); return 0; } void Process(std::fstream &fin, char *filename) { FlvParser pParser; int nBufSize = 2 * 1024 * 1024; int nFlvPos = 0; uint8_t *pBuf, *pBak; pBuf = new uint8_t[nBufSize]; pBak = new uint8_t[nBufSize]; while (1) { int nReadNum = 0; int nUsedLen = 0; fin.read((char *)pBuf + nFlvPos, nBufSize - nFlvPos); nReadNum = fin.gcount(); if (nReadNum == 0) break; pParser.Parse(pBuf + nFlvPos, nReadNum, nUsedLen); nFlvPos += nReadNum; if (nUsedLen != nFlvPos) { memcpy(pBak, pBuf + nUsedLen, nFlvPos - nUsedLen); memcpy(pBuf, pBak, nFlvPos - nUsedLen); } nFlvPos -= nUsedLen; } pParser.DumpH264("parser.h264"); pParser.DumpAAC("parser.aac"); pParser.DumpFlv("parser.flv"); delete[] pBuf; delete[] pBak; }