aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c78
1 files changed, 47 insertions, 31 deletions
diff --git a/main.c b/main.c
index a1052fd..a659fc9 100644
--- a/main.c
+++ b/main.c
@@ -1,56 +1,72 @@
#include <stdio.h>
#include "rtmpserver.h"
-#include "fileutils.h"
+#include "ringbuf.h"
+#include "transmuxer.h"
+
+typedef struct {
+ RingBuffer *ringbuf;
+ Transmuxer transmuxer;
+} MainCtx;
void on_rtmp_start(void *ctx) {
- *(FILE**)ctx = fopen("test.flv", "wb");
- FILE *fp = *(FILE**)ctx;
- fwrite_char(fp, 'F');
- fwrite_char(fp, 'L');
- fwrite_char(fp, 'V');
- fwrite_char(fp, 1);
- fwrite_char(fp, 5);
- fwrite_word32be(fp, 9);
- fwrite_word32be(fp, 0);
+ MainCtx *main_ctx = ctx;
+ main_ctx->ringbuf = malloc(sizeof(RingBuffer));
+ RingBuffer_init(main_ctx->ringbuf, 4096);
+ RingBuffer *rb = main_ctx->ringbuf;
+ Transmuxer_new_stream(&main_ctx->transmuxer, rb);
+
+ RingBuffer_write_char(rb, 'F');
+ RingBuffer_write_char(rb, 'L');
+ RingBuffer_write_char(rb, 'V');
+ RingBuffer_write_char(rb, 1);
+ RingBuffer_write_char(rb, 5);
+ RingBuffer_write_word32be(rb, 9);
+ RingBuffer_write_word32be(rb, 0);
}
void on_rtmp_stop(void *ctx) {
- FILE *fp = *(FILE**)ctx;
- fclose(fp);
- exit(0);
+ MainCtx *main_ctx = ctx;
+ RingBuffer_end(main_ctx->ringbuf);
}
void on_rtmp_video(void *ctx, int64_t timestamp, char *buf, size_t size) {
- FILE *fp = *(FILE**)ctx;
- fwrite_char(fp, 9);
- fwrite_word24be(fp, size);
- fwrite_word24be(fp, timestamp);
- fwrite_char(fp, timestamp >> 24);
- fwrite_word24be(fp, 0);
- fwrite(buf, 1, size, fp);
- fwrite_word32be(fp, size + 11);
+ MainCtx *main_ctx = ctx;
+ RingBuffer *rb = main_ctx->ringbuf;
+ RingBuffer_write_char(rb, 9);
+ RingBuffer_write_word24be(rb, size);
+ RingBuffer_write_word24be(rb, timestamp);
+ RingBuffer_write_char(rb, timestamp >> 24);
+ RingBuffer_write_word24be(rb, 0);
+ RingBuffer_write(rb, (const uint8_t *)buf, size);
+ RingBuffer_write_word32be(rb, size + 11);
}
void on_rtmp_audio(void *ctx, int64_t timestamp, char *buf, size_t size) {
- FILE *fp = *(FILE**)ctx;
- fwrite_char(fp, 8);
- fwrite_word24be(fp, size);
- fwrite_word24be(fp, timestamp);
- fwrite_char(fp, timestamp >> 24);
- fwrite_word24be(fp, 0);
- fwrite(buf, 1, size, fp);
- fwrite_word32be(fp, size + 11);
+ MainCtx *main_ctx = ctx;
+ RingBuffer *rb = main_ctx->ringbuf;
+ RingBuffer_write_char(rb, 8);
+ RingBuffer_write_word24be(rb, size);
+ RingBuffer_write_word24be(rb, timestamp);
+ RingBuffer_write_char(rb, timestamp >> 24);
+ RingBuffer_write_word24be(rb, 0);
+ RingBuffer_write(rb, (const uint8_t *)buf, size);
+ RingBuffer_write_word32be(rb, size + 11);
}
int main() {
+ MainCtx main_ctx;
RtmpCallbacks rtmp_cbs = {
.on_audio = &on_rtmp_audio,
.on_video = &on_rtmp_video,
.on_start = &on_rtmp_start,
.on_stop = &on_rtmp_stop,
};
- FILE* fp = NULL;
- start_rtmpserver(rtmp_cbs, &fp);
+
+ Transmuxer_init(&main_ctx.transmuxer);
+ pthread_t transmux_thread;
+ pthread_create(&transmux_thread, NULL, &Transmuxer_main, &main_ctx.transmuxer);
+
+ start_rtmpserver(rtmp_cbs, &main_ctx);
return 0;
} \ No newline at end of file