rtp_loss.cpp
上传用户:hjq518
上传日期:2021-12-09
资源大小:5084k
文件大小:3k
源码类别:

Audio

开发平台:

Visual C++

  1. // rtp_loss.cpp : Defines the entry point for the console application.
  2. //
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <memory.h>
  6. #ifdef WIN32
  7. #include <Winsock2.h>
  8. #else
  9. #include <netinet/in.h>
  10. #endif
  11. void print_usage(char *argv [])
  12. {
  13.   printf ("Usage: %s input_file output_file loss_percent <keep_leading_packets>n", argv[0]);
  14.   exit (-1);
  15. }
  16. int keep_packet(int loss_percent)
  17. {
  18.   int rnd;
  19.   if (loss_percent>100)
  20.     return 1;
  21.   if (loss_percent<=0)
  22.     return 0;
  23.   
  24.   rnd = int (100 * (((float) rand()) / RAND_MAX));
  25.   return (rnd >= loss_percent );
  26. }
  27. int main(int argc, char* argv[])
  28. {
  29.   unsigned int bufsize, pacno=0;
  30.   unsigned char buf[65000];
  31.   int i, intime;
  32.   FILE *fr;                                // file for reading
  33.   FILE *fw;                                // file for writing
  34.   if ((argc != 4) && (argc != 5))
  35.   {
  36.     print_usage (argv);
  37.   }
  38.   if (NULL == (fr = fopen (argv[1], "rb")))
  39.   {
  40.     printf ("%s: cannot open H.264 packet file %s for readingn", argv[0], argv[1]);
  41.     return -2;
  42.   }
  43.   if (NULL == (fw = fopen (argv[2], "wb")))
  44.   {
  45.     printf ("%s: cannot open H.264 packet file %s for readingn", argv[0], argv[1]);
  46.     fclose (fr);
  47.     return -2;
  48.   }
  49.   if (argc==5)
  50.   {
  51.     for (i=0; i< atoi (argv[4]); i++)
  52.     {
  53.       if (4 != fread (&bufsize, 1, 4, fr))
  54.         return 0;
  55.       if (4 != fread (&intime, 1, 4, fr))
  56.       {
  57.         printf ("Panic, cannot read timestamp, old software version file?n");
  58.         return -1;
  59.       }
  60.       if (bufsize != fread (buf, 1, bufsize, fr))
  61.       {
  62.         printf ("Problems while reading buffer, exitn");
  63.         return -3;
  64.       }
  65.       if (4 != fwrite (&bufsize, 1, 4, fw))
  66.       {
  67.         printf ("Problems while writing buffer size, exitn");
  68.         return -1;
  69.       }
  70.       if (4 != fwrite (&intime, 1, 4, fw))
  71.       {
  72.         printf ("Problems while writing timestamp, exitn");
  73.         return -1;
  74.       }
  75.       if (bufsize != fwrite (buf, 1, bufsize, fw))
  76.       {
  77.         printf ("Problems while writing buffer, exitn");
  78.         return -3;
  79.       }
  80.       pacno++;
  81.     }
  82.   }
  83.   while (1)
  84.   {
  85.     if (4 != fread (&bufsize, 1, 4, fr))
  86.       return 0;
  87.     if (4 != fread (&intime, 1, 4, fr))
  88.     {
  89.       printf ("Panic, cannot read timestamp, old software version file?n");
  90.       return -1;
  91.     }
  92.     if (bufsize != fread (buf, 1, bufsize, fr))
  93.     {
  94.       printf ("Problems while reading buffer, exitn");
  95.       return -3;
  96.     }
  97.     if (keep_packet(atoi (argv[3])))
  98.     {
  99.       if (4 != fwrite (&bufsize, 1, 4, fw))
  100.       {
  101.         printf ("Problems while writing buffer size, exitn");
  102.         return -1;
  103.       }
  104.       if (4 != fwrite (&intime, 1, 4, fw))
  105.       {
  106.         printf ("Problems while writing timestamp, exitn");
  107.         return -1;
  108.       }
  109.       if (bufsize != fwrite (buf, 1, bufsize, fw))
  110.       {
  111.         printf ("Problems while writing buffer, exitn");
  112.         return -3;
  113.       }
  114.     }
  115.     else
  116.     {
  117.       printf ("lost packet #%dn", pacno);
  118.     }
  119.     pacno++;
  120.   }
  121. }