- Published on
RTMP 심화 - 헤더 구조 및 데이터 청크
- Authors
- Name
- 치우
오늘은 저번에 대략적으로 살펴본 RTMP 를 조금 더 심화해서 공부한 내용을 포스팅해 보겠습니다.
네트워크 7 계층, 기본적인 데이터 비트 구조에 대해 이해하고 있으셔야 이해가 원활합니다. 굳이 기록용 포스팅에 쉽고 자세한 부현설명은 붙이지 않겠습니다.
공식 어도비 스팩 문서에 있는 용어 정의 복붙
- Definitions Payload: The data contained in a packet, for example audio samples or compressed video data. The payload format and interpretation are beyond the scope of this document.
Packet: A data packet consists of fixed header and payload data. Some underlying protocols may require an encapsulation of the packet to be defined.
Port: The “abstraction that transport protocols use to distinguish among multiple destinations within a given host computer. TCP/IP protocols identify ports using small positive integers.” The transport selectors (TSEL) used by the OSI transport layer are equivalent to ports.
Transport address: The combination of a network address and port that identifies a transport-level endpoint, for example an IP address and a TCP port. Packets are transmitted from a source transport address to a destination transport address.
Message stream: A logical channel of communication in which messages flow.
Message stream ID: Each message has an ID associated with it to identify the message stream in which it is flowing.
Chunk: A fragment of a message. The messages are broken into smaller parts and interleaved before they are sent over the network. The chunks ensure timestamp-ordered end-to-end delivery of all messages, across multiple streams.
Chunk stream: A logical channel of communication that allows flow of chunks in a particular direction. The chunk stream can travel from the client to the server and reverse.
Chunk stream ID: Every chunk has an ID associated with it to identify the chunk stream in which it is flowing.
Multiplexing: Process of making separate audio/video data into one coherent audio/video stream, making it possible to transmit several video and audio simultaneously.
DeMultiplexing: Reverse process of multiplexing, in which interleaved audio and video data are assembled to form the original audio and video data.
Remote Procedure Call (RPC): A request that allows a client or a server to call a subroutine or procedure at the peer end.
Metadata: A description about the data. The metadata of a movie includes the movie title, duration, date of creation, and so on.
Application Instance: The instance of the application at the server with which the clients connect by sending the connect request.
Action Message Format (AMF): A compact binary format that is used to serialize ActionScript object graphs. AMF has two versions: AMF 0 [AMF0] and AMF 3 [AMF3].
청크?
작게 나눈 데이터 조각 여럿을 한 단위로 묶어 식별함으로서 송/수신, 저장 또는 기타 데이터 처리에 효율성을 높이는 정보 처리 방법론, 여기서는 메시지 스트림의 분할 단위를 의미한다.
RTMP 에서의 청크 스트림 구조
tcp/udp 레이어 통신들이 그렇듯 앞선 핸드쉐이크와 통신 방식 교환을 마친 후 RTMP 는 오디오 및 비디오 스트림을 스트림 별로 식별할 수 있도록 id 부여 및 스트림 별 청크 생성르 통해 원본 데이터를 작은 단위로 나눕니다. -> 청크 스트림
청크 스트림 ?
기본 청크 페이로드 크기는 128 바이트이며, 추가 설정을 통해 변경할 수 있습니다. 이 청크 패킷들이 송/수신되는 하나의 논리적 채널?(직역해서 알맞은 표현인지 모르겠다)을 청크 스트림이라고 합니다 . 서버에서 클라이언트로, 클라이언트에서 서버로의 양방향 통신을 모두 지원합니다.
식별자
rtmp 는 여러 스트림을 처리합니다. 각각의 스트림은 고유한 스트림 id 를 갖기 때문에 동시의 여러 개의 스트림을 전송할 수 있습니다.
하나의 청크에는 두 종류의 헤더가 포함될 수 있으며 각각의 구조는 다음과 같습니다.
1 청크 기본 헤더
청크 스트림 id 스트림 단위의 고유 식별자이며, 어떤 청크 조각이 어떤 스트림의 포함된 데이터인지 알 수 있게 하여 수신자가 스트림 재조립을 할 수 있게 합니다.
메시지 헤더 포멧 뒤에 붙어 전송될 청크 메시지 헤더의 유형 (어떤 값이 생략 또는 포함되었는지 식별) 명시합니다.
청크 메시지 헤더
타임스템프 청크의 상대적 시간을 밀리초 단위로 포함합니다. 같은 스트림의 다른 청크들과의 순서를 수신자가 식별하고 재조립할 수 있게 해 줍니다.
메시지 스트림 is 해당 데이터가 속한 메시지 스트림의 식별자입니다. 아마도 청크 스트림과는 별개의 속성으로 논리적 처리를 하는 다른 종류의 스트림에 필요한 식별자 같습니다. 더 정확히는 어도비에 공식 문서를 더 읽어봐야 할 듯
메시지 타입 id 해당 청크 메시지 원본 데이터의 종류 (video, audio, reserved, acknowledgement, set pandwidth 등 ) 을 명시해 수신자가 정확한 데이터 처리를 할 수 있도록 합니다.
여기서 청크 메시지 헤더는 전부 생략될 수도, 전부 들어갈수도 , 일부만 생략될 수도 있으며, 0 ~ 11 바이트의 크기를 가질 수 있습니다.
위의 헤더와 실제 데이터가 분할된 메시지가 들어가는 페이로드가합쳐져서 한 단위의 패킷이 구성됩니다.
오늘은 여기까지만
끝