Насколько я знаю, на стороне сервера нет контроля над типом транспорта. Сервер должен быть универсальным, он должен поддерживать 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 (не идеальный случай).