aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-09-13 14:17:36 +0800
committerMistivia <i@mistivia.com>2025-09-13 14:17:36 +0800
commit7540ded75ee07b026950486172aca08cd0686a4e (patch)
tree6512c70b3216d32f2eeb030e7b14f40b740d7b66
parentae14c862d2a3a4ce38c6fbc6ae317b56f8ff4d92 (diff)
transcode talker
-rw-r--r--main.c10
-rw-r--r--ringbuf.c2
-rw-r--r--transcode_talker.c (renamed from transmuxer.c)12
-rw-r--r--transcode_talker.h20
-rw-r--r--transmuxer.h20
5 files changed, 33 insertions, 31 deletions
diff --git a/main.c b/main.c
index a659fc9..9839ad5 100644
--- a/main.c
+++ b/main.c
@@ -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;
diff --git a/ringbuf.c b/ringbuf.c
index 29301e5..2c58752 100644
--- a/ringbuf.c
+++ b/ringbuf.c
@@ -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