Перенаправить поток RTMP, используя python librtmp и nginx - PullRequest
0 голосов
/ 03 февраля 2020

Желаемый результат

Я пытаюсь прокси-поток 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...