int proxy(int flv_fd, srs_rtmp_t ortmp)
{
    int ret = 0;
    
    // packet data
    int type, size;
    u_int32_t timestamp = 0;
    char* data = NULL;
    // re
    int64_t re = re_create();
    
    if ((ret = flv_open_ic(flv_fd)) != 0) {
        return ret;
    }
    if ((ret = connect_oc(ortmp)) != 0) {
        return ret;
    }
    
    trace("start ingest flv to RTMP stream");
    for (;;) {
        if ((ret = flv_read_packet(flv_fd, &type, &timestamp, &data, &size)) != 0) {
            trace("irtmp get packet failed. ret=%d", ret);
            return ret;
        }
        verbose("irtmp got packet: type=%s, time=%d, size=%d", 
            srs_type2string(type), timestamp, size);
        
        if ((ret = srs_write_packet(ortmp, type, timestamp, data, size)) != 0) {
            trace("irtmp get packet failed. ret=%d", ret);
            return ret;
        }
        verbose("ortmp sent packet: type=%s, time=%d, size=%d", 
            srs_type2string(type), timestamp, size);
        
        re = re_update(re, timestamp);
    }
    
    return ret;
}
Example #2
0
int proxy(srs_flv_t flv, srs_rtmp_t ortmp) {
    int ret = 0;
    u_int32_t timestamp = 0;
    int32_t starttime = -1;

    char header[13];
    if ((ret = srs_flv_read_header(flv, header)) != 0) {
        return ret;
    }
    if ((ret = connect_oc(ortmp)) != 0) {
        return ret;
    }

    int64_t re = re_create();

    ret = do_proxy(flv, ortmp, re, &starttime, &timestamp);

    // for the last pulse, always sleep.
    re_cleanup(re, starttime, timestamp);

    return ret;
}
Example #3
0
int main(int argc, char *argv[]) {
   LinkedList *ll = NULL;
   TreeSet *ts = NULL;
   char *sp;
   char pattern[4096];
   RegExp *reg;
   Iterator *it;

   if (argc < 2) {
      fprintf(stderr, "Usage: ./fileCrawler pattern [dir] ...\n");
      return -1;
   }
   /*
    * convert bash expression to regular expression and compile
    */
   cvtPattern(pattern, argv[1]);
   if ((reg = re_create()) == NULL) {
      fprintf(stderr, "Error creating Regular Expression Instance\n");
      return -1;
   }
   if (! re_compile(reg, pattern)) {
      char eb[4096];
      re_status(reg, eb, sizeof eb);
      fprintf(stderr, "Compile error - pattern: `%s', error message: `%s'\n",
              pattern, eb);
      re_destroy(reg);
      return -1;
   }
   /*
    * create linked list and treeset
    */
   if ((ll = ll_create()) == NULL) {
      fprintf(stderr, "Unable to create linked list\n");
      goto done;
   }
   if ((ts = ts_create(scmp)) == NULL) {
      fprintf(stderr, "Unable to create tree set\n");
      goto done;
   }
   /*
    * populate linked list
    */
   if (argc == 2) {
      if (! processDirectory(".", ll, 1))
         goto done;
   } else {
      int i;
      for (i = 2; i < argc; i++) {
         if (! processDirectory(argv[i], ll, 1))
            goto done;
      }
   }
   /*
    * for each directory in the linked list, apply regular expression
    */
   while (ll_removeFirst(ll, (void **)&sp)) {
      int stat = applyRe(sp, reg, ts);
      free(sp);
      if (! stat)
         break;
   }
   /*
    * create iterator to traverse files matching pattern in sorted order
    */
   if ((it = ts_it_create(ts)) == NULL) {
      fprintf(stderr, "Unable to create iterator over tree set\n");
      goto done;
   }
   while (it_hasNext(it)) {
      char *s;
      (void) it_next(it, (void **)&s);
      printf("%s\n", s);
   }
   it_destroy(it);
/*
 * cleanup after ourselves so there are no memory leaks
 */
done:
   if (ll != NULL)
      ll_destroy(ll, free);
   if (ts != NULL)
      ts_destroy(ts, free);
   re_destroy(reg);
   return 0;
}