test.cpp
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:1k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. #include "systems.h"
  2. #include "mpeg2_transport.h"
  3. int main (int argc, char **argv)
  4. {
  5.   FILE *ifile, *ofile;
  6.   uint8_t buffer[16*188], *ptr;
  7.   uint32_t buflen, readfromfile;
  8.   uint32_t offset;
  9.   int done_with_buf;
  10.   mpeg2t_t *mpeg2t;
  11.   mpeg2t_es_t *es_pid;
  12.   //  int lastcc, ccset;
  13.   mpeg2t_set_loglevel(LOG_DEBUG);
  14.   mpeg2t = create_mpeg2_transport();
  15.   argc--;
  16.   argv++;
  17.   ifile = fopen(*argv, FOPEN_READ_BINARY);
  18.   ofile = fopen("raw.mp3", FOPEN_WRITE_BINARY);
  19.   buflen = 0;
  20.   readfromfile = 0;
  21.   //lastcc = 0;
  22.   while (!feof(ifile)) {
  23.     if (buflen > 0) {
  24.       memmove(buffer, buffer + readfromfile - buflen, buflen);
  25.     }
  26.     readfromfile = buflen = fread(buffer + buflen, 1, 16*188 - buflen, ifile);
  27.     ptr = buffer;
  28.     done_with_buf = 0;
  29.     while (done_with_buf == 0) {
  30.       es_pid = mpeg2t_process_buffer(mpeg2t, ptr, buflen, &offset);
  31.       ptr += offset;
  32.       buflen -= offset;
  33.       if (buflen < 188) {
  34. done_with_buf = 1;
  35.       }
  36.       if (es_pid != NULL) {
  37. mpeg2t_frame_t *mp3, *p;
  38. mp3 = es_pid->list;
  39. es_pid->list = NULL;
  40. while (mp3 != NULL) {
  41.   printf("Wrote %d frame psts len %d %d %llu %llxn", 
  42.  es_pid->stream_type,
  43.  mp3->frame_len,
  44.  mp3->have_ps_ts, mp3->ps_ts, mp3->ps_ts);
  45.   //fwrite(mp3->frame, mp3->frame_len, 1, ofile);
  46.   p = mp3;
  47.   mp3 = mp3->next_frame;
  48.   free(p);
  49. }
  50.       }
  51.     }
  52.   }
  53.   fclose(ifile);
  54.   fclose(ofile);
  55.   return 0;
  56. }