aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-09-10 17:41:52 +0800
committerMistivia <i@mistivia.com>2025-09-10 17:41:52 +0800
commit8d089010b37ee193b2b8c809a4f317fa2b11a758 (patch)
treef2a671f9bcc8760983ab016d8d181f2630fe16a7 /main.c
rtmp server
Diffstat (limited to 'main.c')
-rw-r--r--main.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/main.c b/main.c
new file mode 100644
index 0000000..a1052fd
--- /dev/null
+++ b/main.c
@@ -0,0 +1,56 @@
+#include <stdio.h>
+
+#include "rtmpserver.h"
+#include "fileutils.h"
+
+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);
+}
+
+void on_rtmp_stop(void *ctx) {
+ FILE *fp = *(FILE**)ctx;
+ fclose(fp);
+ exit(0);
+}
+
+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);
+}
+
+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);
+}
+
+int main() {
+ 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);
+ return 0;
+} \ No newline at end of file