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, ×tamp, &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; }
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, ×tamp); // for the last pulse, always sleep. re_cleanup(re, starttime, timestamp); return ret; }
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; }