DIITHiTech
@DIITHiTech
Fullstack javascript developer

Как заставить работать RTSP поток с IP камеры через проброс портов?

Здравствуйте!
Немогу заставить VLC Player с инета показывать RTSP поток с IP камеры MISECU 720p, проброшенный через роутер. Сам RTSP на 554 порту проброшен, плеер якобы подключается, но картинки нет, т.к сам видео поток, судя по дампу пакетов, транслируется по UDP на портах, о которых сервер договаривается с клиентом в процессе SETUP, PLAY в RTSP запросах.
31 2e 73 64  70 2f 74 72 61 63 6b 49  eam=1.sd p/trackI
0090: 44 3d 31 20 52 54 53 50  2f 31 2e 30 0d 0a 43 53  D=1 RTSP /1.0..CS
00a0: 65 71 3a 20 34 0d 0a 55  73 65 72 2d 41 67 65 6e  eq: 4..U ser-Agen
00b0: 74 3a 20 4c 69 62 56 4c  43 2f 32 2e 32 2e 36 20  t: LibVL C/2.2.6 
00c0: 28 4c 49 56 45 35 35 35  20 53 74 72 65 61 6d 69  (LIVE555  Streami
00d0: 6e 67 20 4d 65 64 69 61  20 76 32 30 31 36 2e 30  ng Media  v2016.0
00e0: 32 2e 32 32 29 0d 0a 54  72 61 6e 73 70 6f 72 74  2.22)..T ransport
00f0: 3a 20 52 54 50 2f 41 56  50 3b 75 6e 69 63 61 73  : RTP/AV P;unicas
0100: 74 3b 63 6c 69 65 6e 74  5f 70 6f 72 74 3d 35 38  t;client _port=58
0110: 38 39 30 2d 35 38 38 39  31 0d 0a 0d 0a           890-5889 1....

 74 3b 6d  TP/AVP;u nicast;m
00a0: 6f 64 65 3d 50 4c 41 59  3b 73 6f 75 72 63 65 3d  ode=PLAY ;source=
00b0: 31 39 32 2e 31 36 38 2e  32 2e 32 35 30 3b 63 6c  192.168. 2.250;cl
00c0: 69 65 6e 74 5f 70 6f 72  74 3d 35 38 38 39 30 2d  ient_por t=58890-
00d0: 35 38 38 39 31 3b 73 65  72 76 65 72 5f 70 6f 72  58891;se rver_por
00e0: 74 3d 34 30 30 30 30 2d  34 30 30 30 31 3b 73 73  t=40000- 40001;ss
00f0: 72 63 3d 30 30 30 30 31  42 43 43 0d 0a 43 61 63  rc=00001 BCC..Cac
0100: 68 65 2d 43 6f 6e 74 72  6f 6c 3a 20 70 72 69 76  he-Contr ol: priv
0110: 61 74 65 0d 0a 78 2d 44  79 6e 61 6d 69 63 2d 52  ate..x-D ynamic-R
0120: 61 74 65 3a 20 31 0d 0a  0d 0a                    ate: 1.. ..

Кроме 554, пробросил также 40000- 40001(UDP), похоже у камеры они постоянные, но картинки все ровно нет, а плеер никаких ошибок не выводит. Несколько пакетов на эти порты таки прилетает в процессе подключения, но не заводится.
С локальной сети все работает, и массивный трафик идет с 40000 порта камеры, иногда что то пролетает на 40001 на каждый раз разные пары UDP портов клиента. Что не так?
  • Вопрос задан
  • 763 просмотра
Решения вопроса 1
  • DIITHiTech
    @DIITHiTech
    Fullstack javascript developer
    После курения гугла и танцев с бубнами все таки решил проблему, с небольшой оговоркой.
    Как известно, в RTSP существует 2 режима:
    • Non-Interleaved Mode (2хUDP + 1TCP);
    • Interleaved Mode (TCP). Non-Interleaved Mode

    В Non-Interleaved Mode клиент и камера использует по 2 UDP порта с каждой стороны. Клиент сообщает случайных 2 соседних UDP порта, куда камера сможет отправлять поток.
    Порты камеры статичны, и мы их можем легко пробросить (и их нужно пробрасывать, на них клиент шлет несколько пакетов в 32 байта перед посылкой потока камерой), однако если и клиент находится за своим NAT, то пробросить со своей стороны заранее неизвестные порты невозможно для простых роутеров- нужно иметь возможность как в Mikrotik делать выборку по порту источнику Src. Port (а не Dst. Port), так как мы его знаем, в данном случае в моей камеры это 40000-40001 UDP порты.
    Проснифил весь трафик от камеры через оба NAT до процесса VCL Player и все завелось, хоть почему то нестабильно, иногда включаешь play, но картинки нет, хотя трафик стабильно идет, однако если запустилось уже то все ок. Почему так не знаю. Вообщем, хорошо небольшая нагрузка на сеть, малые задержки, но сложно, особенно, если удаленных камер больше одной.

    В Interleaved Mode используется только одно tcp соединение на 554 порту, и для потока и для управления. Выбор режима лежит на клиенте (конечно если сервер/камера поддерживает).
    VCL Player успешно играет поток с камеры в этом режиме, если:
    On the VLC media player Tools menu, click Preferences.
    In the Simple Preferences dialog box, click Input / Codecs in the contents panel.
    In Input & Codecs Settings, in the Network area, change the Live555 stream transport option from HTTP (default) to RTP over RTSP (TCP).
    Click Save.

    Соответственно пробросить камеру тут очень просто и нужен проброс только со стороны камеры. Несколько больше накладные расходы, выше задержка, но все банально просто как с одной камерой, так и с десятками.
    Ответ написан
Пригласить эксперта
Ответы на вопрос 1
  • fzfx
    @fzfx
    18,5 дм
    в первом приближении не так то, что перенаправлены не все требующиеся порты для работы, вы это и сами поняли. поищите в вашем роутере упоминание ALG RTSP и активируйте эту опцию. в более-менее современных и не самых дешманских роутерах имеются реализации шлюзов прикладного уровня (ALG) для более-менее попоулярных протоколов, в т. ч. и RTSP. после активации достаточно будет оставить проброс порта RTSP на нужную машину, остальное, относящееся к RTSP, роутер настроит и пробросит сам.
    как альтернатива - исследуйте, какие диапазоны портов дополнительно задействованы при потоковой передаче и перенаправляйте также и их. но этого может оказаться мало, если окажется, что требуется замена данных внутри поступающих пакетов - этого вы ничем не сделаете с наскоку.
    Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы