diff options
| author | Mistivia <i@mistivia.com> | 2025-09-13 14:17:36 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-09-13 14:17:36 +0800 |
| commit | 7540ded75ee07b026950486172aca08cd0686a4e (patch) | |
| tree | 6512c70b3216d32f2eeb030e7b14f40b740d7b66 | |
| parent | ae14c862d2a3a4ce38c6fbc6ae317b56f8ff4d92 (diff) | |
transcode talker
| -rw-r--r-- | main.c | 10 | ||||
| -rw-r--r-- | ringbuf.c | 2 | ||||
| -rw-r--r-- | transcode_talker.c (renamed from transmuxer.c) | 12 | ||||
| -rw-r--r-- | transcode_talker.h | 20 | ||||
| -rw-r--r-- | transmuxer.h | 20 |
5 files changed, 33 insertions, 31 deletions
@@ -2,11 +2,11 @@ #include "rtmpserver.h" #include "ringbuf.h" -#include "transmuxer.h" +#include "transcode_talker.h" typedef struct { RingBuffer *ringbuf; - Transmuxer transmuxer; + TranscodeTalker transcode_talker; } MainCtx; void on_rtmp_start(void *ctx) { @@ -14,7 +14,7 @@ void on_rtmp_start(void *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); + TranscodeTalker_new_stream(&main_ctx->transcode_talker, rb); RingBuffer_write_char(rb, 'F'); RingBuffer_write_char(rb, 'L'); @@ -63,9 +63,9 @@ int main() { .on_stop = &on_rtmp_stop, }; - Transmuxer_init(&main_ctx.transmuxer); + TranscodeTalker_init(&main_ctx.transcode_talker); pthread_t transmux_thread; - pthread_create(&transmux_thread, NULL, &Transmuxer_main, &main_ctx.transmuxer); + pthread_create(&transmux_thread, NULL, &TranscodeTalker_main, &main_ctx.transcode_talker); start_rtmpserver(rtmp_cbs, &main_ctx); return 0; @@ -1,5 +1,6 @@ #include "ringbuf.h" +#include <pthread.h> #include <string.h> void RingBuffer_init(RingBuffer *self, size_t size) { @@ -46,6 +47,7 @@ void RingBuffer_end(RingBuffer *self) { pthread_mutex_lock(&self->mutex); self->finished_flag = true; pthread_mutex_unlock(&self->mutex); + pthread_cond_signal(&self->not_empty_cond); } size_t RingBuffer_write(RingBuffer *self, const uint8_t *data, size_t len) { diff --git a/transmuxer.c b/transcode_talker.c index e2f60fc..9dd9ae1 100644 --- a/transmuxer.c +++ b/transcode_talker.c @@ -1,4 +1,4 @@ -#include "transmuxer.h" +#include "transcode_talker.h" #include "ringbuf.h" #include <bits/pthreadtypes.h> @@ -10,7 +10,7 @@ #include <stdlib.h> -static int wait_for_new_stream(Transmuxer *self) { +static int wait_for_new_stream(TranscodeTalker *self) { while (pthread_cond_wait(&self->streaming_cond, &self->lock)) { if (self->quit) { return 0; @@ -90,8 +90,8 @@ static void finalize_output_file(AVFormatContext *out_fmt_ctx) { #define SEGMENT_DURATION 5 -void* Transmuxer_main (void *vself) { - Transmuxer *self = vself; +void* TranscodeTalker_main (void *vself) { + TranscodeTalker *self = vself; pthread_mutex_lock(&self->lock); while (wait_for_new_stream(self)) { AVFormatContext *in_fmt_ctx = avformat_alloc_context(); @@ -187,14 +187,14 @@ void* Transmuxer_main (void *vself) { return NULL; } -void Transmuxer_init(Transmuxer *self) { +void TranscodeTalker_init(TranscodeTalker *self) { pthread_mutex_init(&self->lock, NULL); pthread_cond_init(&self->streaming_cond, NULL); self->stream = NULL; self->quit = false; } -void Transmuxer_new_stream(Transmuxer *self, RingBuffer *ringbuf) { +void TranscodeTalker_new_stream(TranscodeTalker *self, RingBuffer *ringbuf) { pthread_mutex_lock(&self->lock); self->stream = ringbuf; pthread_mutex_unlock(&self->lock); diff --git a/transcode_talker.h b/transcode_talker.h new file mode 100644 index 0000000..312ae8c --- /dev/null +++ b/transcode_talker.h @@ -0,0 +1,20 @@ +#ifndef TRANSCODE_TALKER_H_ +#define TRANSCODE_TALKER_H_ + +#include "ringbuf.h" +#include "pthread.h" +#include <bits/pthreadtypes.h> + +typedef struct { + pthread_mutex_t lock; + pthread_cond_t streaming_cond; + RingBuffer *stream; + bool quit; +} TranscodeTalker; + +void TranscodeTalker_init(TranscodeTalker *self); + +void* TranscodeTalker_main(void *vself); +void TranscodeTalker_new_stream(TranscodeTalker *self, RingBuffer *ringbuf); + +#endif diff --git a/transmuxer.h b/transmuxer.h deleted file mode 100644 index 9bcbf1b..0000000 --- a/transmuxer.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef TRANSMUXER_H_ -#define TRANSMUXER_H_ - -#include "ringbuf.h" -#include "pthread.h" -#include <bits/pthreadtypes.h> - -typedef struct { - pthread_mutex_t lock; - pthread_cond_t streaming_cond; - RingBuffer *stream; - bool quit; -} Transmuxer; - -void Transmuxer_init(Transmuxer *self); - -void* Transmuxer_main(void *vself); -void Transmuxer_new_stream(Transmuxer *self, RingBuffer *ringbuf); - -#endif |
