With longer data chunks, the protocol thus carries only a one-byte header per fragment, so incurring very little overhead.
At a higher level, the RTMP encapsulates MP3 or AAC audio and FLV1 video multimedia streams, and can make remote procedure calls (RPCs) using the Action Message Format.
[5] A document accompanying the Adobe specification grants "non-exclusive, royalty-free, nontransferable, non-sublicensable, personal, worldwide" patent license to all implementations of the protocol, with two restrictions: one forbids use for intercepting streaming data ("any technology that intercepts streaming video, audio and/or data content for storage in any device or medium"), and another prohibits circumvention of "technological measures for the protection of audio, video and/or data content, including any of Adobe’s secure RTMP measures".
[2] In 2011, Adobe did sue Wowza Media Systems claiming, among other things, infringement of their RTMP patents.
They contain a header and a body which, in the case of connection and control commands, is encoded using the Action Message Format (AMF).
The Basic Header is the only constant part of the packet and is usually composed of a single composite byte, where the two most significant bits are the Chunk Type (fmt in the specification) and the rest form the Stream ID.
The client initialises the connection by sending the C0 packet with a constant value of 0x03 representing the current protocol version.
It follows straight with C1 without waiting for S0 to be received first which contains 1536 bytes, with the first four representing the epoch timestamp, the second four all being 0, and the rest being random (and which can be set to 0 in third party implementations).
At this point, the client, and server can negotiate a connection by exchanging AMF encoded messages.
As version 3 is the current default, the flash client has to be told explicitly in Action-script code to use AMF0 if that is requested.
Some values above are serialised into properties of a generic Action-script Object, which is then passed to the NetConnection event listener.
The server will then reply with a series of "onStatus" commands followed by the video data as encapsulated within RTMP messages.
After a connection is established, media is sent by encapsulating the content of FLV tags into RTMP messages of type 8 and 9 for audio and video, respectively.
It communicates over port 80 and passes the AMF data inside HTTP POST request and responses.
The client then sends an /open/1 request where the server must reply with a 200 ok appending a random number that will be used as the session identifier for the said communication.
RTMPdump runs on Linux, Android, Solaris, Mac OS X, and most other Unix-derived operating systems, as well as Microsoft Windows.
[12] The current version features greatly improved functionality, and has been rewritten to take advantage of the benefits of the C programming language.
The RTMPdump developers have also written support for librtmp for MPlayer, FFmpeg, XBMC, cURL, VLC and a number of other open source software projects.
Use of librtmp provides these projects with full support of RTMP in all its variants without any additional development effort.
FLVstreamer is a fork of RTMPdump, without the code, which Adobe claims violates the DMCA in the USA.
For this reason, The Veovera Software Organization, including Adobe, Google, Twitch, and Veriskope published the enhanced RTMP specification,[13] which adds support for VP9, H265 and AV1 codecs in the Flash Video container FLV.