Почему VLC не отправляет запрос rtsp PLAY на мой сервер?

Я реализую сервер RTSP в NodeJs, используя RFC (rtsp, rtp, sdp) и это руководство.

Я использую VLC для тестирования своей реализации, и он отлично работает для примера (ссылка внизу руководства), но останавливается на полпути для моего сервера. Я подозреваю некоторую проблему с соответствием RFC, но я не могу ее найти, и VLC на самом деле не предоставляет никакой полезной информации о том, что он делает.

Запуск wireshark и реализации сервера C++ и указание на него VLC показывает все шаги:

OPTIONS rtsp://192.168.10.151:8554/mjpeg/1 RTSP/1.0
CSeq: 2
User-Agent: LibVLC/2.2.1 (LIVE555 Streaming Media v2014.07.25)

RTSP/1.0 200 OK
CSeq: 2
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE

DESCRIBE rtsp://192.168.10.151:8554/mjpeg/1 RTSP/1.0
CSeq: 3
User-Agent: LibVLC/2.2.1 (LIVE555 Streaming Media v2014.07.25)
Accept: application/sdp

RTSP/1.0 200 OK
CSeq: 3
This should be date
Content-Base: rtsp://192.168.10.151:8554/mjpeg/1/
Content-Type: application/sdp
Content-Length: 90

v=0
o=- 6334 1 IN IP4 192.168.10.151
s=
t=0 0
m=video 0 RTP/AVP 26
c=IN IP4 0.0.0.0
SETUP rtsp://192.168.10.151:8554/mjpeg/1/ RTSP/1.0
CSeq: 4
User-Agent: LibVLC/2.2.1 (LIVE555 Streaming Media v2014.07.25)
Transport: RTP/AVP/TCP;unicast;interleaved=0-1

RTSP/1.0 200 OK
CSeq: 4
This should be date
Transport: RTP/AVP/TCP;unicast;interleaved=0-1
Session: -2144778205

PLAY rtsp://192.168.10.151:8554/mjpeg/1/ RTSP/1.0
CSeq: 5
User-Agent: LibVLC/2.2.1 (LIVE555 Streaming Media v2014.07.25)
Session: -2144778205
Range: npt=0.000-

RTSP/1.0 200 OK
CSeq: 5
This should be date
Range: npt=0.000-
Session: -2144778205
RTP-Info: url=rtsp://127.0.0.1:8554/mjpeg/1/track1

И сообщения VLC:

...
live555 debug: RTP subsession 'video/JPEG'
core debug: selecting program id=0
live555 debug: setup start: 0.000000 stop:0.000000
live555 debug: play start: 0.000000 stop:0.000000
core debug: using access_demux module "live555"
core debug: looking for decoder module matching "any": 43 candidates
...

Когда я запускаю свой собственный сервер, он никогда не отправляет запрос на воспроизведение:

OPTIONS rtsp://rasmus.axit.local:8554/mjpeg/1 RTSP/1.0
CSeq: 2
User-Agent: LibVLC/2.2.1 (LIVE555 Streaming Media v2014.07.25)

RTSP/1.0 200 OK
CSeq: 2
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE

DESCRIBE rtsp://rasmus.axit.local:8554/mjpeg/1 RTSP/1.0
CSeq: 3
User-Agent: LibVLC/2.2.1 (LIVE555 Streaming Media v2014.07.25)
Accept: application/sdp

RTSP/1.0 200 OK
CSeq: 3
Date: Fri, 09 Sep 2016 09:36:29 GMT
Content-Base: rtsp://rasmus.axit.local:8554/mjpeg/1
Content-Type: application/sdp
Content-Length: 91

v=0
o=- -12345678 1 IN IP4 192.168.10.71
s=
t=0 0
m=video 0 RTP/AVP 26
c=IN IP4 0.0.0.0

SETUP rtsp://rasmus.axit.local:8554/mjpeg/1/ RTSP/1.0
CSeq: 4
User-Agent: LibVLC/2.2.1 (LIVE555 Streaming Media v2014.07.25)
Transport: RTP/AVP/TCP;unicast;interleaved=0-1

RTSP/1.0 200 OK
CSeq: 4
Date: Fri, 09 Sep 2016 09:36:29 GMT
Transport: RTP/AVP/TCP;unicast;interleaved=0-1
Session: -12345678

И ВЛК:

...
live555 debug: RTP subsession 'video/JPEG'

Это не продолжается оттуда.

Я не могу понять, чего ему не хватает. Ранее он также не отправлял SETUP, и это оказалось недостающей пустой строкой в ​​ответе DESCRIBE. Следовательно, я пробовал добавлять различное количество новых строк, идентификаторов, разных дат и того, что не в разных местах, но без кубиков.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.


person DSPC    schedule 09.09.2016    source источник
comment
Вы пытались добавить \r\n в конце своего ответа SETUP? Как и в HTTP, разделение между заголовком и телом представляет собой пустую строку.   -  person mpromonet    schedule 17.09.2016


Ответы (1)


Ваш ответ на команды DESCRIBE кажется недействительным — вы отвечаете 96 символами, а в заголовке Content-Length указано 91. Не уверен, что это влияет на результат, но я предполагаю, что VLC может выйти из строя из-за этого (возможно, он не может проанализировать линия данных соединения). Также кажется, что в конце данных SDP в конце последней строки есть ненужная дополнительная новая строка.

person Rudolfs Bundulis    schedule 12.09.2016