기술나눔

[오디오 및 비디오 | RTSP] RTSP 프로토콜에 대한 자세한 설명 및 패킷 캡처 예시 분석(자세히 설명하지 않고 자세히 설명)

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C 、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍RTSP协议 🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭
⏰출시시간⏰: 2024-07-06 12:22:00

이 글은 무단으로 퍼갈 수 없습니다! ! !


여기에 이미지 설명을 삽입하세요.

🎄一、概述

RTSP, 전체 이름 Real Time Streaming Protocol실시간 스트리밍 프로토콜(Real-Time Streaming Protocol)은 TCP/IP 프로토콜 시스템의 애플리케이션 계층 프로토콜로 컬럼비아 대학, 넷스케이프, 리얼네트웍스가 제출한 IETF RFC 표준이다.

RTSP 프로토콜에 관한 공식 문서는 RFC2326입니다. 문서 링크는 다음과 같습니다.RFC2326-실시간 스트리밍 프로토콜(RTSP)

RTSP 프로토콜의 구문과 작동이 참조됩니다. HTTP/1.1, ISO10646 문자 집합과 UTF-8 인코딩을 사용하는 텍스트 기반 프로토콜이며 RTSP를 전달하는 전송 계층 프로토콜은 다음과 같습니다.TCP, 기본 포트554; RTSP-over-HTTP 터널링인 경우 기본 TCP 포트는 일반적으로 RTP/RTCP 프로토콜과 함께 사용되며 RTP 프로토콜은 실시간 스트림 데이터를 전송하고 RTCP 프로토콜은 데이터 스트림 전송을 완료합니다. 제어 명령.

여기에 이미지 설명을 삽입하세요.

RTP 프로토콜: 전체 이름Real-time Transport Protocol 실시간 전송 프로토콜인 는 IETF의 멀티미디어 전송 작업 그룹이 1996년 RFC 1889에서 발표했습니다. RTP 프로토콜은 인터넷을 통해 오디오 및 비디오를 전달하기 위한 표준 패킷 ​​형식을 자세히 설명합니다. UDP 프로토콜을 기반으로 구축되었습니다.

RTCP 프로토콜: 전체 이름Real-time Transport Control Protocol , RTP와 함께 사용되는 실시간 전송 제어 프로토콜. RTP는 짝수 번호의 UDP 포트를 사용하고, RTCP는 홀수 번호의 포트인 RTP의 다음 포트를 사용합니다. RTCP와 RTP는 함께 작동하며 RTP는 실제 데이터 전송을 구현하고 RTCP는 세션의 모든 사람에게 제어 패킷을 보내는 역할을 담당합니다. 주요 기능은 RTP가 제공하는 서비스 품질에 대한 피드백을 제공하는 것입니다.

RTSP 프로토콜과 HTTP 프로토콜의 차이점:
RTSP는 상태 저장형이며 해당 명령은 항상 순서대로 전송되며 한 명령은 항상 다른 명령보다 먼저 전송되어야 할 수도 있습니다. HTTP는 상태 비저장입니다. 프로토콜이 명령을 보낸 후에는 연결이 끊어지고 명령 간에 종속성이 없습니다.
rtsp 프로토콜은 포트 554를 사용하고 http는 포트 80을 사용합니다.
RTSP 요청은 서버와 클라이언트 모두에서 보낼 수 있지만 HTTP 요청은 클라이언트에서만 보낼 수 있습니다.


여기에 이미지 설명을 삽입하세요.

🎄二、RTSP 方法

일반적으로 사용되는 RTSP 방법에는 OPTIONS, DESCRIBE, SETUP, PLAY, PAUSE, TEARDOWN, ANNOUNCE, GET_PARAMETER 및 SET_PARAMETER 등이 포함됩니다. 자세한 사용방법은 다음과 같습니다.

  • OPTIONS : 클라이언트는 서버가 지원하는 메소드를 서버로부터 획득한다. 서버 상태에는 영향을 미치지 않습니다.
  • DESCRIBE: 클라이언트는 서버로부터 URL로 지정된 미디어 객체에 대한 설명을 얻습니다.Accept필드는 설명 형식을 지정합니다.
  • SETUP : 클라이언트는 서버에 세션 설정 및 전송 준비를 요청합니다. 요청 정보에는 주로 전송 프로토콜과 클라이언트의 포트 번호가 포함됩니다.
  • PLAY : 클라이언트는 SETUP에 지정된 메커니즘을 사용하여 데이터 전송을 시작하도록 서버에 적극적으로 알립니다.~에Range필드는 재생의 시작 및 종료 시간을 지정합니다(실시간 스트림 범위는 일반적으로Range: npt=0.000-), 여러 PLAY 요청이 도착하면 서버는 PLAY 요청을 대기열에 추가하고 순차적으로 실행합니다. 즉, 두 번째 PLAY 메시지를 계속 처리하기 전에 첫 번째 PLAY 시간이 완료될 때까지 기다려야 합니다.
  • PAUSE : 클라이언트가 서버의 미디어 스트리밍을 일시적으로 중단하도록 요청합니다.합격할 수 있다Range매개변수는 지정된 시점에서 일시중지되거나 일시중지할 스트림을 지정할 수 있습니다. 예를 들어 일시중지할 오디오 스트림을 지정하면 재생이 조용해집니다.
  • RECORD : RECORD는 이전 설명에 따라 클라이언트가 미디어 데이터 녹화를 시작함을 서버에 알립니다. ~에timestamp 필드에는 시작 및 종료 시간(UTC)이 반영됩니다. 이 필드가 없으면 미디어 설명의 시작 또는 종료 시간이 사용됩니다. 세션이 이미 시작된 경우 녹화가 즉시 시작됩니다.
    서버는 녹음된 데이터를 저장할지 여부를 결정합니다.request-URI 다음 또는 다른 URI. 서버가 요청-URI를 사용하지 않는 경우 응답은 201(생성됨)이어야 하며 요청 상태를 설명하고 새 리소스를 참조하는 엔터티 및 위치 헤더를 포함해야 합니다.
  • TEARDOWN: 클라이언트는 지정된 URL 스트림 전송을 중지하고 관련 리소스를 해제하도록 요청합니다.
  • REDIRECT : 요청을 리디렉션하려면 서버는 클라이언트에게 다른 서버 위치에 연결해야 한다고 알립니다. 여기에는 클라이언트가 이 URL을 요청해야 함을 나타내는 필수 Location 헤더가 포함되어 있습니다. 여기에는 리디렉션이 적용될 시기를 나타내는 매개변수 Range가 포함될 수 있습니다. 클라이언트가 이 URI에 대한 미디어를 계속 보내거나 받으려면 클라이언트는 현재 세션에 대한 TEARDOWN 요청을 발행하고 지정된 호스트의 새 세션에 대한 SETUP을 발행해야 합니다.
  • ANNOUNCE: 클라이언트가 서버에 전송할 때 이는 요청 URL로 식별되는 프리젠테이션 설명 또는 미디어 객체를 서버에 제출하는 것을 의미합니다.
    서버가 이를 클라이언트에 보낸다는 것은 세션 정보를 업데이트하도록 클라이언트에 알리는 것을 의미합니다.
  • GET_PARAMETER :GET_PARAMETER는 URI에 지정된 표현이나 스트림에 대한 매개변수 값을 검색하기 위한 요청입니다. 응답 및 응답의 내용은 구현에 달려 있습니다. 엔터티 본문이 없는 GET_PARAMETER를 사용하여 클라이언트 또는 서버의 활성 상태("ping")를 테스트할 수 있습니다.
  • SET_PARAMETER : 데모 또는 URL 지정 스트림의 매개변수 값을 설정하도록 요청하는 메소드입니다. 요청에는 클라이언트가 특정 요청이 실패한 이유를 결정할 수 있도록 하는 단일 매개변수만 포함되어야 합니다. 요청에 여러 매개변수가 포함된 경우 모든 매개변수를 성공적으로 설정할 수 있으며 서버는 이 요청에 대해서만 조치를 취해야 합니다. 서버는 매개변수가 동일한 값으로 반복적으로 설정되도록 허용해야 하지만 매개변수 값을 변경해서는 안 됩니다. 참고: 미디어 스트리밍 매개변수는 SETUP 명령을 사용하여 설정해야 합니다. 방화벽에서는 설정 전송 매개변수를 SETUP으로 제한하는 것이 좋습니다.

위에서 소개한 RTSP 방식은 총 11가지이며, 그 중SETUPPLAYTEARDOWN RTSP 프로세스에는 세 가지 명령이 필요하며 다른 방법은 필요하지 않습니다.그리고ANNOUNCEGET_PARAMETERSET_PARAMETER세 가지 명령은 클라이언트에서 서버로 전송되거나 서버에서 클라이언트로 전송될 수 있습니다.


여기에 이미지 설명을 삽입하세요.

🎄三、RTSP 的 请求报文 与 响应报文

RTSP에는 요청 메시지와 응답 메시지라는 두 가지 유형의 메시지가 있습니다. 요청 메시지는 클라이언트에서 서버로 보내는 요청 메시지를 의미하고, 응답 메시지는 서버에서 클라이언트로 보내는 응답을 의미합니다.

✨3.1, RTSP 요청 메시지

RTSP 요청 메시지는 요청 라인, 요청 헤더, 요청 본문의 세 부분으로 구성됩니다. 그 중 요청 라인은 필수이며, 요청 헤더와 요청 본문은 상황에 따라 선택 사항입니다.
여기에 이미지 설명을 삽입하세요.

  • 요청 라인: 요청 라인은 메서드, 요청 URI, 공백으로 구분되고 앞에 CRLF가 붙는 프로토콜 버전으로 구성됩니다(예:rn)마치다.
    方法 : 위에서 소개한 RTSP 방식입니다. OPTIONS, DESCRIBE, SETUP, PLAY, PAUSE, TEARDOWN 등을 포함합니다.
    请求URI: 운용할 미디어 자원을 식별하며, 일반적으로 rtsp://example.com/path/to/stream 형식입니다.
    协议版本: 일반적으로 요청이 따르는 RTSP 프로토콜 버전을 나타냅니다.RTSP/1.0또는RTSP/2.0
    다음은 전체 요청 라인의 예입니다.
    OPTIONS rtsp://192.168.3.225:554/wbc RTSP/1.0
    
  • 요청 헤더: 요청 헤더에는 CSeq(요청을 식별하는 데 사용되는 시퀀스 번호), 세션 ID(세션 식별자), 전송(전송 프로토콜) 등과 같은 몇 가지 추가 정보가 포함됩니다. 각 헤더 필드는 필드 이름, 콜론, 필드 값으로 구성되며 각 헤더 필드는 CRLF로 구분됩니다.
    다음은 전체 요청 헤더의 예입니다.
    CSeq: 2
    User-Agent: LibVLC/3.0.19 (LIVE555 Streaming Media v2016.11.28)
    
  • 요청 본문: 요청 본문은 추가 데이터를 전송하는 데 사용됩니다. 요청 본문의 구체적인 내용은 요청 라인에 사용된 RTSP 방법에 따라 다릅니다. 참고: 요청 헤더 뒤에 요청 본문과 요청 헤더를 구별하기 위해 빈 줄(CRLF)을 삽입해야 합니다. 대부분의 요청 메시지에는 요청 본문이 없습니다.

✨3.2, RTSP 응답 메시지

RTSP 요청 메시지는 상태 줄, 응답 헤더, 응답 본문의 세 부분으로 구성됩니다. 그 중 상태 라인은 필수이며, 응답 헤더와 응답 본문은 상황에 따라 선택 사항입니다.
여기에 이미지 설명을 삽입하세요.

  • 상태 줄: 상태 줄에는 프로토콜 버전, 상태 코드 및 상태 텍스트가 포함되어 있으며 공백으로 구분되고 CRLF(예: "rn")로 끝납니다.
    协议版本: 응답이 따르는 RTSP 프로토콜 버전을 나타냅니다(일반적으로 RTSP/1.0 또는 RTSP/2.0).
    状态码 : 요청 처리 결과를 나타내는 데 사용되는 200, 401, 500 등과 같은 세 자리 숫자입니다. 첫 번째 숫자는 응답 범주를 나타냅니다. 2xx는 성공을 나타내고, 4xx는 클라이언트 오류를 ​​나타내고, 5xx는 서버 오류를 나타냅니다.
    状态文本: OK, Unauthorized 등과 같은 해당 상태 코드의 구체적인 의미를 설명하는 간단한 텍스트 설명입니다.
    다음은 응답 줄의 예입니다.
    RTSP/1.0 200 OK
    
  • 응답 헤더: 응답 헤더에는 CSeq(요청을 식별하는 데 사용되는 시퀀스 번호), 세션 ID(세션 식별자), 전송(전송 프로토콜) 등과 같은 요청 헤더와 유사한 정보가 포함됩니다. 각 응답 헤더 필드의 형식은 요청 헤더의 형식과 동일하므로 여기서는 자세히 설명하지 않습니다.
    CSeq: 2
    Date: Wed, Feb 04 1970 03:25:10 GMT
    Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER
    
  • 응답 본문: 일부 RTSP 응답(예: DESCRIBE)에는 추가 데이터 전송을 위한 응답 본문이 포함될 수 있습니다.참고: 응답 헤더 뒤에 빈 줄(CRLF)을 삽입해야 합니다.응답 헤더와 응답 본문 구별
    다음은 완전한 응답 본문의 예입니다.
    v=0
    o=- 8913478 1 IN IP4 192.168.3.91
    s=LIVE555 Streaming Media v2016.07.19
    i=1080
    t=0 0
    a=tool:LIVE555 Streaming Media v2016.07.19
    a=type:broadcast
    a=control:*
    a=range:npt=0-
    a=x-qt-text-nam:LIVE555 Streaming Media v2016.07.19
    a=x-qt-text-inf:1080
    m=video 0 RTP/AVP 96
    c=IN IP4 0.0.0.0
    b=AS:5000
    a=rtpmap:96 H264/90000
    a=fmtp:96 packetization-mode=1;profile-level-id=64002A;sprop-parameter-sets=Z2QAKq2EAQwgCGEAQwgCGEAQwgCEO1A8ARPyoA==,aO48sA==
    a=control:track1
    m=audio 0 RTP/AVP 97
    c=IN IP4 0.0.0.0
    b=AS:768
    a=rtpmap:97 PCMA/48000/2
    a=control:track2
    

여기에 이미지 설명을 삽입하세요.

🎄四、RTSP 报文的常用字段

RTSP 메시지의 응답 헤더에는 몇 가지 필드가 포함됩니다. 다음은 일반적으로 사용되는 필드입니다.

  • 수용하다 : 클라이언트가 서버에 수락하도록 알리는 엔터티 데이터 구조의 유형을 지정하는 데 사용됩니다. 예를 들어 Accept: application/sdp이면 서버는 Content-Type 필드를 통해 엔터티 데이터 구조 유형을 반환합니다.
  • Accept-Encoding: 클라이언트가 허용할 수 있는 데이터 압축 형식을 서버에 알리기 위해 사용됩니다. 예: Accept-Encoding: gzip, 압축, br 서버는 Content-Encoding을 통해 클라이언트에게 선택한 내용을 알립니다. 필드.
  • Accept-Language: 클라이언트가 이해할 수 있는 언어와 해당 언어의 수락을 서버에 알리기 위해 사용됩니다. 예: Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q =0.7, * q=0.5, 그 후 서버는 Content-Language 필드를 통해 클라이언트에게 선택 사항을 알립니다.
  • 인증: 클라이언트 요청 헤더에는 서버가 사용자 에이전트를 인증하는 데 사용하는 자격 증명이 포함되어 있습니다.
  • 대역폭: 클라이언트가 사용할 수 있는 대역폭 값을 설명하는 데 사용됩니다. 예: 대역폭: 4000
  • Blocksize: 이 필드는 클라이언트가 서버에 특정 미디어 패킷 크기를 요청하기 위해 미디어 서버로 전송하며, 서버는 요청한 것보다 더 작은 블록 크기를 자유롭게 사용할 수 있습니다. 이 패킷 크기에는 IP, UDP 또는 RTP와 같은 하위 수준 헤더가 포함되지 않습니다.
  • C시크 : RTSP 요청 응답의 시퀀스 번호를 지정합니다. 각 RTSP 요청에는 서버가 요청을 올바르게 식별하고 처리할 수 있도록 고유한 CSeq 값이 포함되어야 합니다. 이 시퀀스 번호는 요청 메시지와 함께 증가됩니다. 서버 응답에는 응답할 요청을 나타내는 CSeq 값이 있어야 합니다.
  • Cache-Control: 지침을 지정하여 캐싱 메커니즘을 구현합니다.캐싱 지시문은 단방향입니다. 즉, 요청에 설정된 지시문이 반드시 응답에 포함될 필요는 없습니다.
  • 컨퍼런스: 동일한 RTSP 세션의 컨퍼런스 ID가 변경되어서는 안 된다는 것을 서버에 알립니다.
  • 연결: 이 필드는 현재 트랜잭션이 완료된 후 네트워크 연결을 닫을지 여부를 결정합니다. 값이 "keep-alive"이면 네트워크 연결이 지속되고 닫히지 않으므로 동일한 서버에 대한 요청이 해당 연결 또는 Connection:close에서 계속 완료될 수 있습니다.
  • 콘텐츠 길이 : 이 필드는 RTSP 프로토콜의 마지막 헤더 다음에 오는 이중 CRLF 이후의 콘텐츠 길이를 나타냅니다.예를 들어 서버 응답 DESCRIBE에서 SDP 정보 길이를 지정합니다.
  • 컨텐츠 타입: 클라이언트에게 반환된 실제 콘텐츠의 콘텐츠 유형을 알려줍니다.
  • 날짜 : 서버가 응답을 생성한 날짜와 시간을 제공하여 클라이언트가 응답의 최신성을 확인하거나 시간 동기화를 수행하는 데 도움이 됩니다. 날짜 필드의 형식은 RFC 1123을 준수합니다(예: Sat, 06 Apr 2024 11:15:00 GMT).
  • 사용자 에이전트: 이 필드는 네트워크 프로토콜의 피어가 요청을 시작한 사용자 에이전트 소프트웨어의 애플리케이션 유형, 운영 체제, 소프트웨어 개발자 및 버전 번호를 식별할 수 있도록 하는 데 사용됩니다.
  • 만료: 만료 시간을 지정합니다.
  • : 시간 범위를 지정하는 데 사용되며 SMPTE, NTP 또는 시계 시간 단위를 사용할 수 있습니다.
  • 세션 : 세션 헤더 필드는 RTSP 세션을 식별합니다. 세션 ID는 서버에 의해 결정됩니다.SETUP응답에서 선택하면 클라이언트가 세션 ID를 얻으면 세션에 대한 향후 작업 요청 메시지에 세션 ID가 포함됩니다. 예: Session: 4581E0AE;
  • 수송 : Transport 헤더 필드에는 전송 프로토콜, 주소 포트, TTL 등을 포함하여 클라이언트가 허용하는 전송 옵션 목록이 포함됩니다. 서버는 또한 이 헤더 필드를 통해 실제로 선택된 특정 옵션을 반환합니다. 예: 전송: RTP/AVP/TCPunicast;destination=192.168.31.222;source=192.168.31.222;interleaved=0-1

여기에 이미지 설명을 삽입하세요.

🎄五、RTSP 流程抓包解析

Wireshark를 사용하여 RTSP 스트리밍 미디어의 네트워크 패킷을 캡처하면 일반적인 프로세스는 다음과 같습니다.
1. 클라이언트가 보냅니다.OPTIONS방법, 서버 응답;
2. 클라이언트가 전송합니다.DESCRIBE방법, 서버 응답;
3. 클라이언트가 전송합니다.SETUP방법, 서버 응답;
2. 클라이언트가 전송합니다.PLAY방법, 서버 응답;
2. 클라이언트가 전송합니다.TEARDOWN방법, 서버 응답;
여기에 이미지 설명을 삽입하세요.
전체 흐름 패킷은 다음과 같습니다.

OPTIONS rtsp://192.168.3.225:554/wbc RTSP/1.0
CSeq: 2
User-Agent: LibVLC/3.0.19 (LIVE555 Streaming Media v2016.11.28)

RTSP/1.0 200 OK
CSeq: 2
Date: Wed, Jul 03 2024 14:42:11 GMT
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER

DESCRIBE rtsp://192.168.3.225:554/wbc RTSP/1.0
CSeq: 3
User-Agent: LibVLC/3.0.19 (LIVE555 Streaming Media v2016.11.28)
Accept: application/sdp

RTSP/1.0 200 OK
CSeq: 3
Date: Wed, Jul 03 2024 14:42:11 GMT
Content-Base: rtsp://192.168.3.225/wbc/
Content-Type: application/sdp
Content-Length: 472

v=0
o=- 1720014950032000 1 IN IP4 192.168.3.225
s=LIVE555 Streaming Media v2016.07.19
i=wbc
t=0 0
a=tool:LIVE555 Streaming Media v2016.07.19
a=type:broadcast
a=control:*
a=range:npt=0-
a=x-qt-text-nam:LIVE555 Streaming Media v2016.07.19
a=x-qt-text-inf:wbc
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:5000
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=640029;sprop-parameter-sets=Z2QAKawsaoHgCJ WbgoCCgQ=,aO4xshs=
a=control:track1
SETUP rtsp://192.168.3.225/wbc/track1 RTSP/1.0
CSeq: 4
User-Agent: LibVLC/3.0.19 (LIVE555 Streaming Media v2016.11.28)
Transport: RTP/AVP;unicast;client_port=55320-55321

RTSP/1.0 200 OK
CSeq: 4
Date: Wed, Jul 03 2024 14:42:11 GMT
Transport: RTP/AVP;unicast;destination=192.168.2.180;source=192.168.3.225;client_port=55320-55321;server_port=6970-6971
Session: 4581E0AE;timeout=65

PLAY rtsp://192.168.3.225/wbc/ RTSP/1.0
CSeq: 5
User-Agent: LibVLC/3.0.19 (LIVE555 Streaming Media v2016.11.28)
Session: 4581E0AE
Range: npt=0.000-

RTSP/1.0 200 OK
CSeq: 5
Date: Wed, Jul 03 2024 14:42:11 GMT
Range: npt=0.000-
Session: 4581E0AE
RTP-Info: url=rtsp://192.168.3.225/wbc/track1;seq=7880;rtptime=3548171463

TEARDOWN rtsp://192.168.3.225/wbc/ RTSP/1.0
CSeq: 6
User-Agent: LibVLC/3.0.19 (LIVE555 Streaming Media v2016.11.28)
Session: 4581E0AE

RTSP/1.0 200 OK
CSeq: 6
Date: Wed, Jul 03 2024 14:42:19 GMT

다음은 이전 메시지에서 사용된 각 RTSP 방법과 응답을 분석합니다.

✨5.1, OPTION 방식

서버에서 사용 가능한 메서드를 가져옵니다.
여기에 이미지 설명을 삽입하세요.
클라이언트는 OPTIONS 메소드를 보내고 다음을 사용합니다.CSeq 요청 시퀀스 번호를 지정하려면 다음을 사용하세요.User-Agent 자신의 대리인을 식별합니다.
서버는 다음을 사용하여 요청에 응답합니다.CSeq 어떤 요청이 응답되고 있는지 표시하려면 다음을 사용하세요.Date날짜를 지정하고,Public제공되는 방법을 지정합니다.


✨5.2, DESCRIBE 방법

서버에서 가져오기rtsp://192.168.3.225:554/wbc미디어 객체에 대한 설명, 여기서Accept필드는 설명 형식을 지정합니다.

여기에 이미지 설명을 삽입하세요.
클라이언트는 DESCRIBE 메소드를 보내고 다음을 사용합니다.CSeq 요청 시퀀스 번호를 지정하려면 다음을 사용하세요.User-Agent 귀하의 대리인을 식별하고,Accept필드는 설명 형식을 SDP로 지정합니다.

서버는 다음을 사용하여 이 요청에 응답합니다. CSeq 어떤 요청이 응답되고 있는지 표시하려면 다음을 사용하세요.Date날짜를 지정하고,Content-Type콘텐츠 유형이 SDP임을 나타냅니다.Content-Length콘텐츠 길이를 지정하세요.

알아채다
1. 사용자 이름과 비밀번호가 필요한 일부 경우 서버는 인증을 위해 DESCRIBE 방법을 처리합니다. Authorization 인증 정보가 전달되지 않거나 인증에 실패하면 서버는 오류 번호 401과 함께 응답을 반환합니다. 클라이언트는 401 응답을 받으면 알려진 사용자 인증 정보를 기반으로 Authorization을 생성하고 설명을 다시 보내야 합니다. 인증이 성공하면 서버는 SDP를 담은 응답 정보를 반환한다.
2. 서버에서 반환된 SDP 정보는 이후 기사에서 분석됩니다.


✨5.3, SETUP 방법

클라이언트는 서버에 세션을 설정하고 전송을 준비하도록 요청합니다. 요청 정보에는 주로 전송 프로토콜과 클라이언트의 포트 번호가 포함됩니다.

여기에 이미지 설명을 삽입하세요.
클라이언트는 SETUP 메소드를 보내고 다음을 사용합니다.CSeq 요청 시퀀스 번호를 지정하려면 다음을 사용하세요.User-Agent 귀하의 대리인을 식별하고,Transport필드는 허용되는 전송 프로토콜 RTP/AVP 및 포트를 지정합니다(여기서 RTP 포트는 55320이고 RTCP 포트는 55321입니다).

서버는 다음을 사용하여 이 요청에 응답합니다. CSeq 어떤 요청이 응답되고 있는지 표시하려면 다음을 사용하세요.Date날짜를 지정하고,Transport전송 프로토콜 RTP/AVP, 대상 주소, 소스 주소, 클라이언트 포트(RTP는 55320, RTCP는 55321), 서버 포트(RTP는 6970, RTCP는 6971)를 지정합니다.Session세션 ID를 지정합니다.

알아채다
이 예에서는 RTP가 UDP 프로토콜을 통해 전송되는 경우도 있고, TCP를 통해 전송되는 경우도 있습니다.Transport 분야는 다양합니다. 다음과 같을 수 있습니다.

客户端请求:Transport: RTP/AVP/TCP;unicast;interleaved=0-1
服务器响应:Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=24e4e500;mode="play"

RTP/AVP/TCPRTP 스트림이 TCP를 통해 전송됨을 나타냅니다. 이 값이 나타나면 메시지에 client_port 필드가 없음을 나타냅니다.
interleaved=0-1RTP streamid=0을 식별하는 streamid를 나타냅니다.
코드 스트림이 TCP를 통해 전송되면 RTSP와 TCP 링크를 공유하므로 RTP, RTCP 및 RTSP 프로토콜을 구별하기 위해 TCPHEAD 헤더 식별자를 추가해야 합니다. 여기서는 헤더 필드가 사용되며 tcphead는 4단어 섹션이며 형식은 다음과 같습니다.

| magic number | channel number | embedded data length | data |

magic number: 1바이트, 고정0x24, 문자입니다$, 전송되는 데이터가 rtsp 프로토콜이 아님을 나타냅니다.
channel number: 1바이트, 채널 ID, 앞서 언급한 스트림 ID인 스트림 유형을 식별합니다.
embedded data length : 스트림 길이를 나타내는 2바이트
data: RTP/RTCP 패킷 데이터를 나타냅니다.


✨5.4, PLAY 메소드

클라이언트는 SETUP에 지정된 메커니즘을 사용하여 데이터 전송을 시작하도록 서버에 적극적으로 알립니다.

여기에 이미지 설명을 삽입하세요.
클라이언트는 PLAY 메소드를 보내고 다음을 사용합니다.CSeq 요청 시퀀스 번호를 지정하려면 다음을 사용하세요.User-Agent 귀하의 대리인을 식별하고,Session필드는 세션 ID를 지정합니다.Range필드는 재생 시작 및 종료 시간을 지정합니다.

서버는 다음을 사용하여 이 요청에 응답합니다. CSeq 어떤 요청에 응답하는지 표시합니다.Date날짜를 지정하십시오;Range필드는 재생 시작 및 종료 시간을 지정합니다.Session필드는 세션 ID를 지정합니다.RTP-Info이 필드는 첫 번째 RTP 패킷의 seq 및 rtptime과 같은 전송될 코드 스트림의 RTP 정보를 설명합니다. 클라이언트는 이 필드를 기반으로 역다중화를 수행할 수 있습니다.


✨5.5, TEARDOWN 방법

클라이언트는 지정된 URL 스트림 전송을 중지하고 관련 리소스를 해제하도록 요청합니다.
여기에 이미지 설명을 삽입하세요.
클라이언트는 TEARDOWN 메소드를 보내고 다음을 사용합니다.CSeq 요청 시퀀스 번호를 지정하려면 다음을 사용하세요.User-Agent 귀하의 대리인을 식별하고,Session필드는 세션 ID를 지정합니다.

서버는 다음을 사용하여 이 요청에 응답합니다. CSeq 어떤 요청에 응답하는지 표시합니다.Date날짜를 지정하세요.


여기에 이미지 설명을 삽입하세요.

🎄六、RTSP 响应错误码

RTSP 응답 내용에는 일반적으로 3자리 정수 응답 코드와 이유 문구가 포함되어 있습니다. 이 문구의 목적은 상태 코드에 대한 짧은 텍스트 설명을 제공하는 것입니다. 클라이언트는 이유 문구를 확인하거나 표시할 필요가 없습니다. 응답 코드의 첫 번째 숫자의 차이에 따라 다음과 같은 5가지 범주로 나눌 수 있습니다.

  • 1xx: 팁 - 요청이 수신되었으며 처리 중입니다.
  • 2xx: 성공 - 요청이 성공적으로 처리되었습니다.
  • 3xx: 리디렉션 - 요청을 완료하려면 추가 조치를 취해야 합니다.
  • 4xx: 클라이언트 오류 - 요청에 잘못된 매개변수 또는 구문이 포함되어 있어 요청을 이행할 수 없습니다.
  • 5xx: 서버 오류 - 서버가 클라이언트의 올바른 요청을 이행할 수 없습니다.

물론 RTSP 오류 코드와 RTSP 방법은 밀접한 관련이 있습니다. 일부 오류는 특정 방법에서만 발생할 수 있습니다. 자세한 오류 코드 정보는 다음과 같습니다.

에러 코드이유 문구응답 방법
100계속하다모두
200성공모두
201만들어진기록
250저장 공간 부족기록
300다중 선택모두
301영구적으로 이동됨모두
302일시적으로 이동됨모두
303다른 것을 보세요모두
305프록시 사용모두
400잘못된 요청모두
401허가받지 않음모두
402지불이 필요합니다모두
403금지됨모두
404찾을 수 없음모두
405비 허가 된 방식모두
406받아 드릴 수없는모두
407프록시 인증이 필요합니다모두
408요청 시간 초과모두
410다 쓴모두
411필요한 길이모두
412전제 조건 실패 설명설정
413요청 엔터티가 너무 큽니다모두
414요청 URI가 너무 깁니다모두
415지원되지 않는 미디어 유형모두
451잘못된 매개 변수설정
452불법 회의 식별자설정
453대역폭이 충분하지 않습니다설정
454세션을 찾을 수 없습니다모두
455이 상태에서는 메서드가 유효하지 않습니다.모두
456헤더 필드가 유효하지 않습니다모두
457잘못된 범위놀다
458매개변수는 읽기 전용입니다매개변수 설정
459집계 작업이 허용되지 않습니다.모두
460집계 작업만 허용됨모두
461지원되지 않는 운송모두
462목적지 도달 불가모두
500인터넷 서버 오류모두
501구현되지 않음모두
502나쁜 게이트웨이모두
503서비스 이용 불가모두
504게이트웨이 시간 초과모두
505RTSP 버전이 지원되지 않습니다모두
551옵션이 지원되지 않습니다모두

여기에 이미지 설명을 삽입하세요.
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

인용하다:
실시간 스트리밍 프로토콜 - RTSP [자세한 설명]
처음부터 마스터 RTSP 요청 및 응답 1
RTSP 스트리밍 미디어 프로토콜에 대한 자세한 설명