서버 응답의 RTSP Nonmatching Transport: 카메라 SETUP 응답 및 RTP 모드 불일치 디버깅
카메라가 다른 RTP 전송 모드, 잘못된 interleaved 채널, 누락된 포트, 또는 호환되지 않는 SETUP 응답으로 회신할 때 RTSP nonmatching transport 오류를 디버깅하는 방법.
일부 RTSP 실패는 깔끔한 461 Unsupported Transport을 반환하지 않습니다. 대신 클라이언트는 "nonmatching transport in server reply", "invalid transport header", "server replied with different transport", 또는 "RTP transport mismatch"를 보고합니다. 이는 카메라가 SETUP은 받아들이지만 클라이언트가 요청한 것이나 파싱할 수 있는 것과 일치하지 않는 Transport 헤더로 응답할 때 종종 발생합니다.
사용자들은 "RTSP nonmatching transport in server reply", "ffmpeg nonmatching transport", "RTSP SETUP transport mismatch", "camera Transport header invalid"를 검색합니다. 한 플레이어에서는 스트림이 작동하고 다른 플레이어에서는 실패하기 때문입니다. 카메라는 단순히 접근할 수 없는 것이 아닙니다. RTSP 전송 협상이 일관되지 않습니다.
요청과 응답 헤더를 직접 비교해야 하기 때문에 RTSP Inspector가 유용합니다.
일치하는 SETUP 교환의 형태
클라이언트가 TCP interleaved를 요청:
Transport: RTP/AVP/TCP;unicast;interleaved=0-1
서버가 호환되는 TCP interleaved 전송으로 응답:
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=12345678
클라이언트가 UDP를 요청:
Transport: RTP/AVP;unicast;client_port=50000-50001
서버가 UDP 포트로 응답:
Transport: RTP/AVP;unicast;client_port=50000-50001;server_port=6970-6971
서버가 전송 모드를 변경하거나, 필수 필드를 생략하거나, 잘못된 형식의 값을 반환하면 엄격한 클라이언트는 실패할 수 있습니다.
일반적인 불일치 사례
일반적인 예시는 다음과 같습니다:
- 클라이언트는 TCP를 요청했지만 서버는 UDP로 응답합니다.
- 클라이언트는 UDP를 요청했지만 서버는 TCP로 응답합니다.
- 서버가
interleaved=를 생략합니다. - 서버가 잘못된 채널 번호를 반환합니다.
- 서버가 요청과 다른
client_port값을 반환합니다. - 서버가 UDP에 대해
server_port를 생략합니다. - 클라이언트가 유니캐스트를 요청했는데 서버가 멀티캐스트를 반환합니다.
- 서버가 지원되지 않는 형식으로 여러 Transport 대안을 반환합니다.
- 프록시가 요청은 다시 작성했지만 응답은 다시 작성하지 않습니다.
일부 클라이언트는 이러한 특이점을 허용합니다. 다른 클라이언트는 거부합니다.
한 플레이어는 작동하고 다른 플레이어는 실패하는 이유
RTSP 구현은 다양합니다. 허용적인 플레이어는 잘못 형식화되었거나 예상치 못한 전송 응답을 받아들이고 계속 진행할 수 있습니다. 더 엄격한 도구는 응답이 기대치를 위반하기 때문에 실패할 수 있습니다.
이는 자동으로 엄격한 클라이언트가 틀렸다는 것을 의미하지는 않습니다. 카메라 또는 프록시 동작을 검사해야 한다는 의미입니다.
전문 진단을 위해 다음을 보존하세요:
- 요청된 Transport 헤더.
- 서버의 Transport 응답.
- 트랙 URL.
- 세션 ID.
- 그 후 RTP 패킷이 도착했는지 여부.
프록시와 릴레이 재작성
RTSP 인식 릴레이는 UDP와 TCP 경로를 연결하기 위해 전송 헤더를 다시 작성할 수 있습니다. 재작성이 불완전하면 다운스트림 클라이언트는 자신의 요청과 일치하지 않는 응답을 봅니다.
예시:
- 클라이언트가 릴레이에 TCP를 요청합니다.
- 릴레이가 카메라에 UDP를 요청합니다.
- 릴레이가 실수로 카메라의 UDP Transport 응답을 다운스트림으로 전달합니다.
카메라와 릴레이가 각각 부분적으로 유효한 작업을 수행했음에도 클라이언트는 nonmatching transport를 보고합니다.
디버그 체크리스트
다음 과정을 사용하세요:
SETUP요청을 캡처합니다.SETUP응답을 캡처합니다.- 전송 프로토콜을 비교합니다: UDP, TCP interleaved, 멀티캐스트.
- 유니캐스트/멀티캐스트를 비교합니다.
- 클라이언트 포트, 서버 포트, interleaved 채널을 비교합니다.
- 경로에 프록시/리스트리머가 있는지 확인합니다.
- 이후의 RTP 패킷이 응답 매핑을 따르는지 확인합니다.
- 패킷 증거를 사용하여 허용적인 플레이어와 엄격한 클라이언트를 비교합니다.
- 가능하다면 직접 카메라 URL을 테스트합니다.
- 정확한 Transport 쌍을 벤더에 보고합니다.
최종 진단
"Nonmatching transport in server reply"는 SETUP 협상이 호환되지 않거나 잘못 형식화된 Transport 응답을 생성했음을 의미합니다. 카메라나 릴레이가 RTP 모드를 변경하거나, 필드를 생략하거나, 클라이언트가 안전하게 사용할 수 없는 값을 반환하고 있을 수 있습니다.
RTSP Inspector는 전송 요청/응답 쌍을 가시화하여 이 클래스의 RTSP 실패를 진단할 수 있는 유일한 신뢰할 수 있는 방법을 제공합니다.