record.c
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:2k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. #include <sys/time.h>
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <strings.h>
  7. #include <sys/ioctl.h>
  8. #include <unistd.h>
  9. #include <time.h>
  10. #include <fcntl.h>
  11. #include <errno.h>
  12. #include "ixjuser.h"
  13. void closeall(void);
  14. int ixj1;
  15. int recfile;
  16. int main(int argc, char *argv[])
  17. {
  18.   char pname1[80], pname2[80], buff1[480], buff2[480];
  19.   unsigned long cnt, write1;
  20.   int size, codec, len;
  21.   struct timeval tv1, tv2;
  22.   time_t t1, t2;
  23.   if(argc<4)
  24.   {
  25.     printf("Use:  %s <ixj dev number> <filename> <codec number>n",argv[0]);
  26.     printf("      example:  %s 0 audio-file 3n",argv[0]);
  27.     exit(0);
  28.   }
  29.       
  30.   sprintf(pname1, "/dev/ixj%s", argv[1]);
  31.   sprintf(pname2, "%s", argv[2]);
  32.   printf("Reading from %s, Writing to %sn", pname1, pname2);
  33.   
  34.   ixj1 = open(pname1, O_RDONLY);
  35.   recfile = open(pname2, O_WRONLY|O_CREAT|O_TRUNC, 0666);
  36.   if(recfile<0)
  37.   {
  38.     printf("error opening file (%s)n",strerror(errno));
  39.     exit(-1);
  40.   } else printf("file handle %dn", recfile);
  41.   
  42.   atexit(closeall);
  43.   if(!ioctl(ixj1, IXJCTL_RING))
  44.   {
  45.     exit(0);
  46.   }
  47.   codec = atoi(argv[3]);
  48.   switch(codec)
  49.   {
  50.     case G723_63:
  51.       len = 24;
  52.       break;
  53.     case G723_53:
  54.       len = 20;
  55.       break;
  56.     case TS85:
  57.       len = 32;
  58.       break;
  59.     case TS48:
  60.       len = 18;
  61.       break;
  62.     case TS41:
  63.       len = 16;
  64.       break;
  65.     case G728:
  66.       len = 96;
  67.       break;
  68.     case G729:
  69.       len = 36;
  70.       break;
  71.     case ULAW:
  72.       len = 240;
  73.       break;
  74.     case ALAW:
  75.       len = 240;
  76.       break;
  77.     case LINEAR16:
  78.       len = 480;
  79.       break;
  80.     case LINEAR8:
  81.       len = 240;
  82.       break;
  83.     case WSS:
  84.       len = 240;
  85.       break;
  86.   }
  87.   cnt = write1 = 0;
  88.   ioctl(ixj1, IXJCTL_REC_CODEC, codec);
  89.   ioctl(ixj1, IXJCTL_REC_START);
  90.   t1 = time(NULL);
  91.   while(ioctl(ixj1, IXJCTL_HOOKSTATE))
  92.   {
  93.     size = read(ixj1, buff1, len);
  94.     if(size > 0)
  95.     {
  96.       write(recfile, buff1, size);
  97.       write1++;
  98.     }
  99.     t2 = time(NULL);
  100.     printf("Seconds %ldr", t2 - t1);
  101.     fflush(stdout);
  102.     if(t2 - t1 == 10)
  103.       break;
  104.   }
  105. }
  106. void closeall(void)
  107. {
  108.   ioctl(ixj1, IXJCTL_REC_STOP);
  109.   ioctl(ixj1, IXJCTL_PLAY_STOP);
  110.   ioctl(ixj1, IXJCTL_AEC_STOP);
  111.   close(ixj1);
  112.   close(recfile);
  113. }