Желаемый результат
Я пытаюсь прокси-поток RTMP, используя nginx, читаю в этом потоке сценарий python, и в этом же сценарии пишем то же самое данные в другой поток RTMP.
Проблема
Получение ошибки сегментации. По словам обработчика ошибок, segfault происходит на RTMP_Write
Setup
У меня есть nginx и nginx -rtmp-модуль с nginx .conf
worker_processes auto;
rtmp_auto_push on;
events {}
rtmp {
server {
listen 1935;
listen [::]:1935 ipv6only=on;
application live {
live on;
wait_video on;
interleave on;
record off;
}
application learn {
live on;
wait_video on;
interleave on;
record off;
}
}
}
Примечание: Я могу транслировать http://0.0.0.0:1935/live/test
с VL C очень хорошо.
У меня есть * Сервер 1045 * подписался на два приложения:
self.recv_conn = librtmp.RTMP("rtmp://0.0.0.0:1935/live/test", live=True)
self.recv_conn.connect()
self.recv_stream = self.recv_conn.create_stream()
self.write_conn = librtmp.RTMP("rtmp://0.0.0.0:1935/learn/test", live=True)
self.write_conn.connect()
self.write_stream = self.write_conn.create_stream(writeable=True)
В моем l oop все, что я делаю, это простой перенаправления:
while True:
data = self.recv_stream.read(4096)
self.write_stream.write(data)
time.sleep(1 / 30)
Как я уже сказал, / Живой поток работает просто отлично, но поток / learn (записываемый в python) запускается очень медленно, сильно буферизуется и всегда неизбежно вызывает сбои.
У меня такое чувство, что это нужно сделать с тегами FLV, установленными неправильно из-за того, что это два разных потока. Но я не уверен. Читал документацию и исходный код около 24 часов, но не повезло. Надеясь, что кто-то здесь, более знакомый с протоколом, может дать мне несколько советов здесь.
К вашему сведению: причина, по которой я не просто перенаправляю один поток в другой прямо из * 1049, заключается в том, что я хочу читать в первый поток, манипулируйте кадрами с помощью opencv и направляйте измененные кадры в поток /learn
.