Если клиент хочет наблюдать поток, который находится на моем сервере RTSP, он сначала пытается установить поток через протокол UDP. Как я могу сказать этому, что мой сервер только поддерживает RTP/AVP/TCP и что это должно переключить транспорты?
Я хочу завершить поддержку UDP на своем сервере, но все клиенты сначала пытаются УСТАНОВИТЬ сессию по UDP, и позже они делают так по TCP..., и я хочу переключить их на TCP как можно скорее в протоколе RTSP.
Как я могу сделать это?
Хорошо, один из способов - отправить «400 Bad Request» в качестве ответа на клиентский запрос SETUP ... и он автоматически переключается на протокол TCP. Это для RealOne и QuickTime.
Но я не уверен, что это сработает на всех остальных игроках, так как это взлом.
Есть другие идеи? = |
Какой клиент подключается к вашему серверу? Некоторые клиенты могут запускаться с помощью метода URI в URL-адресе. Например, вы можете указать rtspt: //myhost/path.sdp.
Если у вас есть контроль над клиентом / серверами, вы можете использовать заголовок Require на клиентах и Unsupported на серверах, чтобы указать, что UDP не поддерживается; но большинство клиентов, которых я видел, не используют это.
Вы можете попробовать передать заголовок "транспорт" в ответ на запрос Describe и указать там, что ваш сервер поддерживает только транспорт RTP / AVP / TCP, и клиент должен знать, что UDP не поддерживается.
Насколько мне известно, на стороне сервера нет никакого контроля для предпочтения типа транспорта. Сервер должен быть универсальным, он должен поддерживать RTP через UDP, RTP через TCP, RTP через RTSP и RTP через RTSP через HTTP (S). И его клиенты выбирают, какой транспорт выбрать. Транспортное поле сначала отправляется в запросе SETUP
1) UDP
C->A: SETUP rtsp://audio.example.com/twister/audio.en RTSP/1.0
CSeq: 1
Transport: RTP/AVP/UDP;unicast;client_port=3056-3057
2) TCP
C->A: SETUP rtsp://audio.example.com/twister/audio.en RTSP/1.0
CSeq: 1
Transport: RTP/AVP/TCP;unicast;client_port=3056-3057
3) RTP через RTSP и RTP через RTSP через HTTP (S)
S->C: RTSP/1.0 200 OK
CSeq: 2
Date: 05 Jun 1997 18:57:18 GMT
Transport: RTP/AVP/TCP;interleaved=0-1
Как мы видим, запрос «Тип транспорта» имеет вид отправлено клиентской стороной.
Если вы хотите поддерживать только TCP-сервер, вы можете отправить «400 Bad Request» или «461 Unsupported transport» в ответ на запрос SETUP, как предложено вами, или другой способ - отправить 200 OK, но не передавать какие-либо RTP-пакеты. Клиент будет тайм-аут и узнает, что он находится за прокси-сервером, и он снова отправит запрос SETUP с параметром RTP / AVP / TCP (не идеальный случай).