LINUX.ORG.RU

ffplay и mpv игнорируют SDP от RTSP? Есть возможность не игнорировать? Или ЧЯДНТ?

 , , , sdp


0

1

Пытаюсь написать свой микро-RTSP-сервер.

Столкнулся с проблемой, что ffplay и mpv игнорируют SDP, которым отвечает RTSP-сервер.

  1. ffplay или mpv запрашивают OPTIONS, сервер отвечает OK.
  2. ffplay или mpv запрашивают DESCRIBE и Content-Type: application/sdp, сервер отвечает OK и отправляет минимальный SDP:
v=0                                                                             
o=- 0 0 IN IP4 0.0.0.0                                                          
s=myrtsp                                                                        
c=IN IP4 0.0.0.0                                                                
t=0 0                                                                           
m=video 9000 UDP 97
  1. ffplay или mpv шлют SETUP с Transport: RTP/AVP/UDP;unicast;client_port=<port>-<port+1> или Transport: RTP/AVP/TCP;unicast;interleaved=0-1, соответственно. Если ответить OK указав тот же транспорт, далее ffplay и mpv скажут PLAY…

Но на шаге 2 я же отправил SDP, в котором указано, что я хочу бомбить порт 9000 голыми UDP пакетами!

  • Сервер может как-то ответить в духе: «Не, не, никакого SETUP, давай по SDP работай!»?
  • При запуске ffplay или mpv есть какой-то секретный флажок, чтобы он отработал SDP полученный от RTSP-сервера?

Так, согласно RFC 4566 нужно писать udp, а не UDP. И это действительно повлияло на ffplay и mpv:

Transport: RAW/RAW/UDP;unicast;client_port=25126
Transport: RAW/RAW/TCP;unicast;interleaved=0-1
Jullyfish ★★
() автор топика

В общем, странная хрень. Я заранее сохранил видео в формате h265 и решил попробовать его транслировать. Получилось. Пока только через TCP. Для этого каждому отправленному куску видео, надо добавлять:

  • 4 байта RTSP заголовка;
  • 12 байт RTP заголовка;
  • 3 байта связанных с h265, которые wireshark не отличает от остального payload.
Jullyfish ★★
() автор топика
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария