Real-time Transport Protocol
실시간 전송 프로토콜(영어: Real-time Transport Protocol, RTP)은 IP 네트워크를 통해 오디오와 비디오를 전달하기 위한 표준화된 패킷 포맷을 정의한다. RTP는 스트리밍 미디어를 포함한 커뮤니케이션 및 엔터테인먼트 시스템에 널리 쓰이고 있다.
RTP는 국제 인터넷 표준화 기구(IETF)의 오디오 비디오 트랜스포트 워킹 그룹이 개발하였으며 RTC 1889로 1996년 처음 출판되었으며 2003년에 RFC 3550 가 RTP를 대신하게 되었다.
패킷 헤더
비트 오프셋 | 0-1 | 2 | 3 | 4-7 | 8 | 9-15 | 16-31 | |||||||||||||||||||||||
0 | 버전 | P | X | CC | M | PT | 일련 번호 | |||||||||||||||||||||||
32 | 타임스탬프 | |||||||||||||||||||||||||||||
64 | SSRC 식별자 | |||||||||||||||||||||||||||||
96 | CSRC 식별자들 | |||||||||||||||||||||||||||||
96+32×CC | 프로파일에 따른 확장 헤더 ID | 확장 헤더 길이 | ||||||||||||||||||||||||||||
128+32×CC | 확장 헤더 |
Parameters
SDP - H.264 sprop-parameter-sets
sprop-parameter-sets contains information about sequence and picture parameters set for the incoming NAL stream. The value are Base64 encoded. A comma is used to separate any pair of parameter set in the list. For example, sprop-parameter-sets=Z2ASEW12 , AsaR3QD
In general, sprop-parameter-sets are the SPS and PPS of NAL unit needed to initialize the decoder. If you want to parse the sprop-parameter-sets, they are separated by a comma. The left hand side of the comma is SPS and the right hand side of the comma is PPS.
H264 frame type
- Stackoverflow - How to detect I/P/B frame from H264 RTP packet
- [추천] Stackoverflow - Possible Locations for Sequence/Picture Parameter Set(s) for H.264 Stream
- [추천] Stackoverflow - Detect MPEG4/H264 I-Frame (IDR) in RTP stream
RTP의 Payload 길이는 어떻게 계산하나?
RFC 3550 Section 11 에 설명된 것처럼 RTP가 외부 프레이밍 메커니즘을 필요로 하는 상황이 있지만 UDP를 통한 RTP의 일반적인 사용에는 이것이 필요하지 않습니다. 일반적으로 패킷의 UDP 길이 필드는 페이로드 데이터의 끝을 결정하는 데 사용할 수 있으며 페이로드 데이터의 시작은 고정 크기 RTP 헤더 직후입니다.
다음과 같은 몇 가지 사항이 영향을 줄 수 있습니다.
- "padding" 비트가 RTP 헤더에 설정되어 있으면 RTP 페이로드 데이터가 아닌 UDP 패킷 끝에 일부 패딩 바이트가 존재할 수 있습니다. 이 경우 UDP 패킷 데이터의 마지막 옥텟은 패딩 옥텟(자신을 포함)의 수를 포함합니다. 이렇게 하면 페이로드 데이터의 끝이 지정된 패딩 양만큼 뒤로 이동합니다. 이와 같은 패딩은 일반적으로 고정 블록 크기를 사용하는 알고리즘으로 RTP 페이로드 데이터를 암호화할 때 사용됩니다. 이에 대한 자세한 내용은 RFC 3550의 섹션 5.1을 참조하세요.
- RTP 헤더에 "extension" 비트가 설정되어 있으면 RFC 3550의 섹션 5.3.1에 설명된 대로 고정 RTP 헤더 뒤에 헤더 확장이 옵니다. 헤더 확장에는 추가 바이트 수를 나타내는 길이 필드가 있습니다. RTP 페이로드 데이터의 시작 부분으로 건너뛰었습니다. 헤더 확장자는 드물어야 합니다.
- UDP 패킷 길이, 패딩 길이(있는 경우) 및 확장 헤더 길이(있는 경우)의 조합을 사용하여 외부 프레이밍 메커니즘 없이 RTP 페이로드 데이터의 위치와 길이를 결정할 수 있어야 합니다. 프로파일 또는 페이로드 형식은 여러 RTP 패킷을 단일 UDP 패킷으로 결합하지 않기 때문입니다.
Examples
- Github - ireader/media-server/librtp/source/rtp.c
- https://github.com/ireader/media-server/blob/master/librtp/source/rtp.c
- Windows C++ RTP Streaming from Cam using FFMPEG and OpenCV
- https://lazymankook.tistory.com/9
Libraries
- JRTPLIB
- oRTP
- Github - RTSP parser written in C
- PJSIP
- Github - cisco - Library for SRTP (Secure Realtime Transport Protocol)
Client player
- Github - yellowstone - The RTP/RTSP client for node.js
- Github - html5_rtsp_player - html5 player for rtsp stream
- Broadway.js
Local Download
- RFC 3550 - RTP: A Transport Protocol for Real-Time Applications
- https://tools.ietf.org/html/rfc3550
-
Rfc3550.txt - Rfc3550-ko.txt.zip (Google translate: en -> ko)
- RFC 4103 - RTP Payload for Text Conversation
- https://tools.ietf.org/html/rfc4103
- RFC 3984 - RTP Payload Format for H.264 Video
- https://tools.ietf.org/html/rfc3984
- Rfc3984-ko.txt.zip (Google translate: en -> ko)
- RFC 6184 - RTP Payload Format for H.264 Video
- https://tools.ietf.org/html/rfc6184
See also
- RTCP
- RTSP
- SDP
- SRTP: RFC 3711 - The Secure Real-time Transport Protocol (SRTP)
- FFmpeg
- gStreamer
- live555
- JRTPLIB
- WebRTC
- GStreamer:RTP_RTSP
- rtpklvdepay - Extracts KLV (SMPTE ST 336) metadata from RTP packets
- rtpklvpay - Payloads KLV (SMPTE ST 336) metadata as RTP packets
Favorite site
- Wikipedia (en) RTP에 대한 설명
- bcknightt - RTP(Real Time Protocol)
- 정보통신기술용어해설 - RTP 헤더 포멧, RTP 패킷
- 네트워크 RTP 패킷 헤더
- KLDP: 공개용 RTP/RTSP 라이브러리중에 쓸만한 소스 추천좀 부탁합니다
- RTSP/RTP스트리밍 미디어 서버
- Slideshare - 스트리밍 프로토콜
- RTP 프로토콜 2
- 사람사는세상: RTP(Real Time Protocol)
- [추천] NExpert :: RTP의 이해
- RTP의 이해 (패킷분석)
- Mint & Latte_. :: RTP (Real-time Transport Protocol)
- Linux Streaming Server Project(LSSP) 최종 보고서
- [추천] RTP 헤더 포멧 (정보통신기술용어해설)
References
-
Rtp-parameters.txt.zip ↩