main.cc 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include <fstream>
  2. #include <iostream>
  3. #include "FlvParser.h"
  4. void Process(std::fstream &fin, char *filename);
  5. int main(int argc, char *argv[]) {
  6. if (argc < 3) {
  7. printf("flvparser [input file] [output file]\n");
  8. return -1;
  9. }
  10. std::fstream fin;
  11. fin.open(argv[1], std::ios_base::in | std::ios_base::binary);
  12. if (!fin) {
  13. std::cout << "fstream init error" << std::endl;
  14. return -1;
  15. }
  16. Process(fin, argv[1]);
  17. fin.close();
  18. return 0;
  19. }
  20. void Process(std::fstream &fin, char *filename) {
  21. FlvParser pParser;
  22. int nBufSize = 2 * 1024 * 1024;
  23. int nFlvPos = 0;
  24. uint8_t *pBuf, *pBak;
  25. pBuf = new uint8_t[nBufSize];
  26. pBak = new uint8_t[nBufSize];
  27. while (1) {
  28. int nReadNum = 0;
  29. int nUsedLen = 0;
  30. fin.read((char *)pBuf + nFlvPos, nBufSize - nFlvPos);
  31. nReadNum = fin.gcount();
  32. if (nReadNum == 0) break;
  33. pParser.Parse(pBuf + nFlvPos, nReadNum, nUsedLen);
  34. nFlvPos += nReadNum;
  35. if (nUsedLen != nFlvPos) {
  36. memcpy(pBak, pBuf + nUsedLen, nFlvPos - nUsedLen);
  37. memcpy(pBuf, pBak, nFlvPos - nUsedLen);
  38. }
  39. nFlvPos -= nUsedLen;
  40. }
  41. pParser.DumpH264("parser.h264");
  42. pParser.DumpAAC("parser.aac");
  43. pParser.DumpFlv("parser.flv");
  44. delete[] pBuf;
  45. delete[] pBak;
  46. }