RFC 7310

RTP Payload Format for Standard apt-X and Enhanced apt-X Codecs

๐Ÿ“… published July 2014, from ietf

RFC 7310: RTP Payload Format for Standard apt-X and Enhanced apt-X Codecs ๐ŸŽ€

okay bestie, this RFC is a Standards Track doc from the IETF (Internet Engineering Task Force) ๐Ÿ’…. It was written by J. Lindsay and H. Foerster, both from APT Ltd, and it's dated July 2014 ๐ŸŒธ. It's RFC number 7310 and has ISSN 2070-1721. The header doesn't list any RFCs it obsoletes or updates, so it stands on its own โœจ.

Abstract โœจ

okay so this doc explains how to pack Standard apt-X or Enhanced apt-X encoded audio into Real-time Transport Protocol (RTP) packets ๐Ÿ“ฆ. It describes a payload format that can carry several related audio channels in one RTP payload, and it also explains how to set up Standard apt-X and Enhanced apt-X connections using the Session Description Protocol (SDP) ๐ŸŽง. main character energy, honestly ๐Ÿฆ‹.

Status of This Memo ๐Ÿ“œ

this is an Internet Standards Track document ๐Ÿ”ฅ.

it's a product of the Internet Engineering Task Force (IETF) and it represents the consensus of the IETF community ๐Ÿซถ. it got public review and was approved for publication by the Internet Engineering Steering Group (IESG). if you want more on Internet Standards, check Section 2 of RFC 5741 ๐Ÿ’œ.

for the current status, any errata, and how to send feedback, go to http://www.rfc-editor.org/info/rfc7310 ๐ŸŒˆ.

copyright (c) 2014 IETF Trust and the persons identified as the document authors. all rights reserved ๐Ÿ’–.

this document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they stand on the date of publication. please read these carefully, bestie, because they explain your rights and restrictions for this document ๐Ÿ™ˆ. code components pulled out of this document must include Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions, and they come without warranty, as the Simplified BSD License describes ๐Ÿ”ฅ.

Table of Contents ๐Ÿงš

1. Introduction ....................................................2
2. Conventions .....................................................3
3. Standard apt-X and Enhanced apt-X Codecs ........................3
4. Payload Format Capabilities .....................................5
   4.1. Use of Forward Error Correction (FEC) ......................5
5. Payload Format ..................................................5
   5.1. RTP Header Usage ...........................................5
   5.2. Payload Structure ..........................................6
   5.3. Default Packetization Interval .............................7
   5.4. Implementation Considerations ..............................8
   5.5. Payload Example ............................................8
6. Payload Format Parameters ......................................10
   6.1. Media Type Definition .....................................10
   6.2. Mapping to SDP ............................................12
        6.2.1. SDP Usage Examples .................................13
        6.2.2. Offer/Answer Considerations ........................14
7. IANA Considerations ............................................14
8. Security Considerations ........................................14
9. Acknowledgements ...............................................14
10. References ....................................................15
   10.1. Normative References .....................................15
   10.2. Informative References ...................................15

1. Introduction ๐ŸŒธ

okay so this doc specifies the payload format for packing audio encoded with Standard apt-X or Enhanced apt-X audio coding algorithms into the Real-time Transport Protocol (RTP) [RFC3550] ๐ŸŽง.

it covers some conventions, a quick overview of how the audio codecs work, and what the payload format can do โœจ. the RTP payload format is laid out in detail, and there's a relevant example. the media type, how it maps to SDP [RFC4566], and how it's used in the SDP offer/answer model are also specified. and finally, some security considerations are outlined ๐Ÿ”.

this document registers a media type (audio/aptx) for the RTP payload format for the Standard apt-X and Enhanced apt-X audio codecs ๐Ÿ’….

2. Conventions ๐ŸŽ€

this doc uses the normal IETF bit-order representation ๐Ÿฆ‹. bit fields in figures are read left to right and then down. the leftmost bit in each field is the most significant one. numbering starts at 0 and goes up, so bit 0 is the most significant ๐Ÿ’œ.

the key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [RFC2119] ๐Ÿซถ.

3. Standard apt-X and Enhanced apt-X Codecs ๐Ÿ”ฅ

ngl, this section is a little spicy ๐ŸŒถ๏ธ. Standard apt-X and Enhanced apt-X are proprietary audio coding algorithms. you can license them from CSR plc., and they're widely deployed in all kinds of audio processing gear ๐ŸŽ›๏ธ. for commercial reasons, their detailed internal operations aren't described in standards or reference documents ๐Ÿ™ˆ. the good news is that their data interfaces are super simple, so you can do easy RTP packetization of data coded with them without knowing the exact syntax of the coded audio stream โœจ.

both algorithms are based on Adaptive Differential Pulse Code Modulation principles ๐Ÿ’–. they produce a constant coded bit rate that scales with the sample frequency of the uncoded audio. this constant rate is 1/4 of the bit rate of the uncoded audio, no matter how many bits represent each uncoded audio sample ๐ŸŒˆ. for example, a 1.536-Mbit/s stereo audio stream made of two channels of 16-bit Pulse Code Modulated (PCM) audio sampled at 48 kHz gets encoded at 384 kbit/s ๐Ÿ˜ญ.

Standard apt-X and Enhanced apt-X don't enforce a coded frame structure. the coded data is a continuous coded sample stream, and each coded sample can regenerate four PCM samples when decoded ๐Ÿงš. the Standard apt-X algorithm encodes four successive 16-bit PCM samples from each audio channel into a single 16-bit coded sample per audio channel. the Enhanced apt-X algorithm encodes four successive 16-bit or 24-bit PCM samples from each audio channel, and it produces a single 16-bit or 24-bit coded sample per channel respectively. the same RTP packetization rules apply to each of these variations ๐Ÿ’….

Standard apt-X and Enhanced apt-X coded data streams can optionally carry synchronization information and an auxiliary data channel inside the coded audio data, with no extra overhead ๐Ÿ“. this can be handy when the IP system is cascaded with another transport system and the decoder is acting as a simple bridge between the two. since the auxiliary data channel and synchronization info ride inside the coded audio with no extra overhead, the RTP payload format rules don't change when they're present โœจ. out-of-band signaling is still required, though, to tell the receiver when autosync and auxiliary data have been embedded in the apt-X stream ๐Ÿ””.

embedded auxiliary data is typically used to carry non-audio data and timecode info for syncing with video ๐ŸŽฌ.

the bit rate of the auxiliary data channel is 1/4 of the sample frequency. for example, with a single audio channel encoded at Fs = 48 kHz, an auxiliary data bit rate of 12 kbit/s can be embedded ๐Ÿ’œ.

apt-X also lets you stereo-pair apt-X channels, so the embedded autosync and auxiliary data channel can be shared across the pair ๐Ÿ‘ฏ. for a 1.536-Mbit/s stereo audio stream of two channels of 16-bit PCM audio sampled at 48 kHz, one byte of auxiliary data would typically be fed into the Standard apt-X or Enhanced apt-X encoder once every 32 uncoded left channel samples ๐ŸŒธ. apt-X channel-pairing is not enabled by default. out-of-band signaling is required to tell the receiver when the option is being used ๐Ÿ™ˆ.

Standard apt-X and Enhanced apt-X decoders that haven't been set up with the correct embedded autosync, auxiliary data, and stereo-pairing info will play out uncoded PCM samples, and the decoding quality will drop. with Standard apt-X, the quality loss can be significant ๐Ÿ˜ญ.

if you want more details on how the algorithm works, you can get them from CSR plc. here's their info ๐Ÿ“ฎ:

   Corporate HQ
   Churchill House
   Cambridge Business Park
   Cowley Road
   Cambridge
   CB4 0WZ
   UK
   Tel: +44 1223 692000
   Fax: +44 1223 692001
   <http://www.csr.com>

4. Payload Format Capabilities ๐Ÿฆ‹

this RTP payload format carries an integer number of Standard apt-X or Enhanced apt-X coded audio samples ๐Ÿ’–. when multiple related audio channels are conveyed in the payload, each channel contributes the same integer number of apt-X coded audio samples to the total carried by the payload ๐Ÿ‘‘.

4.1. Use of Forward Error Correction (FEC) ๐Ÿ›ก๏ธ

Standard apt-X and Enhanced apt-X don't inherently provide any mechanism for adding redundancy or error-control coding to the coded audio stream ๐Ÿ™ˆ. generic RTP schemes can add redundant info to Standard apt-X and Enhanced apt-X RTP packet streams, like forward error correction described in RFC 5109 [RFC5109] and RFC 2733 [RFC2733]. this makes the stream more resilient to packet losses, but at the expense of a higher bit rate ๐Ÿ’….

5. Payload Format ๐ŸŽ€

the Standard apt-X and Enhanced apt-X algorithms encode four successive PCM samples from each audio channel and produce a single compressed sample for each audio channel ๐Ÿงš. the encoder MUST be presented with an integer number S of input audio samples, where S is an arbitrary multiple of 4 โœจ. the encoder will produce exactly S/4 coded audio samples. each coded audio sample is either 16 or 24 bits, so the amount of coded audio data produced on each invocation of the encoding process will be an integer number of bytes ๐Ÿ’œ. RTP packetization of the encoded data SHALL be on a byte-by-byte basis ๐Ÿ”ฅ.

5.1. RTP Header Usage ๐Ÿ“ฆ

using the Standard apt-X and Enhanced apt-X coding algorithms doesn't create any special requirements for the contents of the RTP packet header ๐ŸŒˆ. the other RTP packet header fields are defined as follows:

  • V - As per [RFC3550]
  • P - As per [RFC3550]
  • X - As per [RFC3550]
  • CC - As per [RFC3550]
  • M - As per [RFC3550] and [RFC3551] Section 4.1
  • PT - A dynamic payload type; MUST be used [RFC3551]
  • SN (sequence number) - As per [RFC3550]
  • Timestamp - As per [RFC3550]. The RTP timestamp reflects the instant at which the first audio sample in the packet was sampled, that is, the oldest information in the packet โฐ.

header field abbreviations are defined as follows ๐Ÿ’–:

  • V - Version Number
  • P - Padding
  • X - Extensions
  • CC - Count of contributing sources
  • M - Marker
  • PT - Payload Type
  • PS - Payload Structure

5.2. Payload Structure โœจ

okay bestie, this part is all about how the bits actually get packed into the payload ๐Ÿ’… The RTP payload data for Standard apt-X and Enhanced apt-X MUST be structured as follows. no skipping this one ๐Ÿซถ

The coded samples get packed back to back into the payload octets in "network byte order", which is also called big-endian order, starting with the most significant bit ๐Ÿงš Samples go in time sequence, oldest first. And an integer number of coded samples MUST be within the same packet, so no sample gets split across packets ๐ŸŽ€

When you've got multiple channels (like a stereo program) multiplexed into one RTP stream, the coded samples from each channel at one sampling instant get interleaved into a coded sample block, following the standard audio channel ordering from [RFC3551] ๐ŸŒˆ Then those sample blocks get packed in time sequence too, oldest block first. It's giving organized ๐Ÿ’œ

      l left
      r right
      c center
      S surround
      F front
      R rear

      channels   description     channel
                                 1   2   3   4   5   6
      ___________________________________________________
      2          stereo          l   r
      3                          l   r   c
      4                          l   c   r   S
      5                          Fl  Fr  Fc  Sl  Sr
      6                          l   lc  c   r   rc  S

For the two-channel example, the sample order goes (left channel, first sample), (right channel, first sample), (left channel, second sample), (right channel, second sample) ๐Ÿฆ‹ Coded samples for all channels that belong to a single coded sampling instant MUST be contained in the same packet. And all channels in the same RTP stream MUST be sampled at the same frequency. no mixing rates in one stream, periodt ๐Ÿ”ฅ

5.3. Default Packetization Interval ๐ŸŒธ

The default packetization interval MUST have a duration of 4 milliseconds โฑ๏ธ If you can't fit a whole number of coded samples per channel into that 4-millisecond window, the default packet interval MUST be rounded down to the nearest packet interval that can hold a complete integer set of coded samples. For example, when encoding audio with either Standard apt-X or Enhanced apt-X at 11025 Hz, 22050 Hz, or 44100 Hz, the packetization interval MUST be rounded down to 3.99 milliseconds ๐Ÿ“

So why 4 ms? Packetization interval is basically the knob for end-to-end delay. Shorter packets cut the audio delay through a system but cost more bandwidth. Longer packets have less header overhead, but they add delay and make packet loss more noticeable ๐Ÿ˜ญ A default of 4 milliseconds keeps a nice ratio of payload to header bytes and keeps the delay low enough for interactive apps built on apt-X ๐Ÿ’– All implementations MUST support this default packetization interval. non-negotiable, bestie โœจ

5.4. Implementation Considerations ๐Ÿงšโ€โ™€๏ธ

An application that implements this payload format MUST understand all the payload parameters defined in this specification. Any mapping of these parameters to a signaling protocol MUST support all parameters ๐Ÿ’… Implementations can always decide whether they can talk to each other based on the entities defined in this specification. so the spec is the source of truth, iykyk ๐Ÿซถ

5.5. Payload Example ๐Ÿฆ‹

okay so here's a fun example ๐Ÿ‘‘ Imagine a 5.1 audio signal with six channels of 24-bit PCM data, sampled at 48 kHz and packetized on a 4 millisecond RTP packet interval. The total bit rate before audio coding is 6 * 24 * 48000 = 6.912 Mbit/s. Applying Enhanced apt-X coding with a coded sample size of 24 bits gives a transmitted coded bit rate of 1/4 of the uncoded bit rate, i.e., 1.728 Mbit/s ๐Ÿคฏ With 4 millisecond packet intervals, each packet holds 864 bytes of encoded data, which is 48 Enhanced apt-X coded samples per channel. ate ๐Ÿฐ

Next up, the diagram shows how the coded samples from each channel get packed into a sample block, and how sample blocks 1, 2, and 48 get packed into the RTP packet ๐Ÿ’œ Here's the legend first:

      C:
      Channel index: Left (l) = 1, left center (lc) = 2,
      center (c) = 3, right (r) = 4, right center (rc) = 5,
      and surround (S) = 6.

      T:
      Sample Block time index: The first sample block is 1; the final
      sample is 48.

      S(C)(T):
      The Tth sample from channel C.

And here's the packet layout for the first few blocks ๐ŸŽ€

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    S(1)(1)                    |    S(2)(1)    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    S(2)(1)    |            S(3)(1)            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    S(3)(1)    |                   S(4)(1)                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    S(5)(1)                    |    S(6)(1)    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    S(6)(1)    |            S(1)(2)            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    S(2)(2)    |                   S(3)(2)                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    S(4)(2)                    |    S(5)(2)    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    S(5)(2)    |            S(6)(2)            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    S(6)(2)    |                   S(1)(3)                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |            S(6)(47)           |            S(1)(48)           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    S(1)(48)   |                   S(2)(48)                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                    S(3)(48)                   |    S(4)(48)   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   S(4)(48)    |           S(5)(48)            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    S(5)(48)   |                   S(6)(48)                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Then there's a second diagram showing the order the coded bytes get packed into the payload, by byte significance for each 24-bit coded sample. The abbreviations are below ๐Ÿง 

      MSB:
      Most Significant Byte of a 24-bit coded sample

      MB:
      Middle Byte of a 24-bit coded sample

      LSB:
      Least Significant Byte of a 24-bit coded sample

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      MSB      |       MB      |      LSB      |               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

6. Payload Format Parameters ๐ŸŽ€

okay this is the registration part ๐Ÿ“ This RTP payload format is identified using the media type audio/aptx. It's registered in accordance with [RFC4855] and uses the template of [RFC6838] ๐Ÿ’–

6.1. Media Type Definition ๐Ÿ’œ

Here's the registration template, copied exactly as the spec has it:

   Type name: audio

   Subtype name: aptx

   Required parameters:
   ...

Okay, the full template is a little long, so here are the parameters explained in my own words, with the exact names kept ๐Ÿซถ

Required parameters:

  • rate: This is the RTP timestamp clock rate, which equals the sampling rate in Hz. RECOMMENDED values are 8000, 11025, 16000, 22050, 24000, 32000, 44100, and 48000 samples per second. Other values are permissible ๐ŸŒˆ
  • channels: The number of logical audio channels present in the audio stream ๐ŸŽง
  • variant: The variant of apt-X being used, either Standard or Enhanced. These can be signaled as:
variant=standard
variant=enhanced
  • bitresolution: The number of bits the algorithm uses to encode four PCM samples. This value MAY only be set to 16 for Standard apt-X, and 16 or 24 for Enhanced apt-X ๐Ÿ”ฅ

Optional parameters:

  • ptime: The recommended length of time (in milliseconds) represented by the media in a packet. It defaults to 4 milliseconds. See Section 6 of [RFC4566] โฑ๏ธ
  • maxptime: The maximum amount of media that can be encapsulated in each packet, expressed as time in milliseconds. See Section 6 of [RFC4566] ๐Ÿ“
  • stereo-channel-pairs: This defines which audio channels are stereo paired in the stream. See Section 3. Each pair is two comma-separated values that correspond to channel numbers in the range 1..channels. Each stereo pair is wrapped in { and }, and pairs are separated by a comma. A channel MUST NOT be paired with more than one other channel. If this parameter is absent, each channel has been independently encoded ๐Ÿ‘ฏ
  • embedded-autosync-channels: This defines the channels that carry embedded autosync, as a list of comma-separated channel numbers in the range 1..channels. When a channel is stereo paired, embedded autosync is shared across the pair. The first channel as defined in stereo-channel-pairs MUST be specified in the embedded-autosync-channels list ๐Ÿฆ‹
  • embedded-aux-channels: This defines the channels that carry embedded auxiliary data, as a list of comma-separated channel numbers in the range 1..channels. When a channel is stereo paired, embedded auxiliary data is shared across the pair. The second channel as defined in stereo-channel-pairs MUST be specified in the embedded-aux-channels list ๐ŸŒธ

And now the rest of the registration fields, verbatim ๐Ÿ“‹

   Encoding considerations: This media type is framed in RTP and
      contains binary data; see Section 4.8 of [RFC6838].

   Security considerations: See Section 5 of [RFC4855] and Section 4
      of [RFC4856].

   Interoperability considerations: none
   Published specification: RFC 7310

   Applications which use this media type: Audio streaming

   Fragment identifier considerations: None

   Additional information: none

   Person & email address to contact for further information:
      John Lindsay <Lindsay@worldcastsystems.com>

   Intended usage: COMMON

   Restrictions on usage: This media type depends on RTP framing,
      and hence is only defined for transfer via RTP [RFC3550].

   Author/Change controller: IETF Payload Working Group delegated
      from the IESG.

6.2. Mapping to SDP โœจ

okay so this part is where the media type details get mapped onto SDP ๐ŸŽ€ (the [RFC4566] stuff that most RTP sessions use to describe themselves). bestie, the mapping is very specific, so pay attention! When SDP describes a session, the media type pieces go like this:

  • The type name ("audio") goes in SDP "m=" as the media name. ๐Ÿฆ‹
  • The subtype name ("aptx") goes in SDP "a=rtpmap" as the encoding name. ๐Ÿ’–
  • The parameter "rate" also goes in "a=rtpmap" as the clock rate. โœจ
  • The parameter "channels" also goes in "a=rtpmap" as the channel count. ๐ŸŒธ
  • The parameter "maxptime", when present, MUST be included in the SDP "a=maxptime" attribute. ๐Ÿ”ฅ
  • The required parameters "variant" and "bitresolution" MUST be included in the SDP "a=fmtp" attribute. ๐Ÿ‘‘
  • The optional parameters "stereo-channel-pairs", "embedded-autosync-channels", and "embedded-aux-channels", when present, MUST be included in the SDP "a=fmtp" attribute. ๐Ÿ’…
  • The parameter "ptime", when present, goes in a separate SDP attribute field and is signaled as a=ptime:<value>, where <value> is the number of milliseconds of audio represented by one RTP packet. See Section 6 of [RFC4566]. ๐Ÿงš

6.2.1. SDP Usage Examples

okay the examples are the best part, no cap ๐Ÿ˜ญ these show apt-X encodings in actual SDP. The long "a=fmtp" lines are folded so they fit the column width of this document, so don't panic when you see a line break in the middle of one.

Example 1: a Standard apt-X stream that encodes two independent 44.1-kHz 16-bit PCM channels into a 4-millisecond RTP packet. ๐ŸŽ€

m=audio 5004 RTP/AVP 98
a=rtpmap:98 aptx/44100/2
a=fmtp:98 variant=standard; bitresolution=16;
a=ptime:4

Example 2: an Enhanced apt-X stream that encodes two 48-kHz 24-bit stereo channels into a 4-millisecond RTP packet and carries both an embedded autosync and auxiliary data channel. โœจ

m=audio 5004 RTP/AVP 98
a=rtpmap:98 aptx/48000/2
a=fmtp:98 variant=enhanced; bitresolution=24;
stereo-channel-pairs={1,2}; embedded-autosync-channels=1;
embedded-aux-channels=2
a=ptime:4

Example 3: an Enhanced apt-X stream that encodes six 44.1-kHz 24-bit channels into a 6-millisecond RTP packet. Channels 1,2 and 3,4 are stereo pairs. Both stereo pairs carry both an embedded autosync and auxiliary data channel. ๐ŸŒˆ

m=audio 5004 RTP/AVP 98
a=rtpmap:98 aptx/44100/6
a=fmtp:98 variant=enhanced; bitresolution=24;
stereo-channel-pairs={1,2},{3,4}; embedded-autosync-channels=1,3;
embedded-aux-channels=2,4
a=ptime:6

6.2.2. Offer/Answer Considerations

okay this one is about offers and answers ๐Ÿซถ and honestly it's giving very strict. The only negotiable parameter is the delivery method. Everything else is declarative, so it just states what's true and doesn't get bargained over. The offer, as described in [RFC3264], may contain a large number of delivery methods per single fmtp attribute. ngl that's a lot of options in one line ๐Ÿ’€

The answerer MUST remove every delivery method and configuration URI that is not supported. ๐Ÿ”ฅ Apart from this one exceptional case, all parameters MUST NOT be altered on answer. ๐Ÿ™…โ€โ™€๏ธ So the answerer only ever cuts out the stuff it can't handle, and that's it.

7. IANA Considerations ๐ŸŒธ

One media type (audio/aptx) has been registered in the "Media Types" registry. See Section 6.1. ๐Ÿ’œ

8. Security Considerations ๐Ÿ’€

okay bestie, this section is serious, so I'm keeping every bit of it. ๐Ÿ™ˆ

RTP packets using the payload format defined in this specification are subject to the security considerations discussed in the RTP specification [RFC3550] and any appropriate RTP profile (for example, [RFC3551]). This implies that confidentiality of the media streams is achieved by encryption. Because the audio coding used with this payload format is applied end to end, encryption may be performed after audio coding so there is no conflict between the two operations.

A potential denial-of-service threat exists for audio coding techniques that have non-uniform receiver-end computational load. The attacker can inject pathological datagrams into the stream that are complex to decode and cause the receiver to be overloaded. However, the Standard apt-X and Enhanced apt-X audio coding algorithms do not exhibit any significant non-uniformity. โœจ

As with any IP-based protocol, in some circumstances a receiver may be overloaded simply by the receipt of too many packets, either desired or undesired. Network-layer authentication may be used to discard packets from undesired sources, but the processing cost of the authentication itself may be too high. In a multicast environment, pruning of specific sources may be implemented in future versions of IGMP [RFC3376] and in multicast routing protocols to allow a receiver to select which sources are allowed to reach it.

[RFC6562] has highlighted potential security vulnerabilities of Variable Bit Rate (VBR) codecs using Secure RTP transmission methods. As the Standard apt-X and Enhanced apt-X codecs are Constant Bit Rate (CBR) codecs, this security vulnerability is therefore not applicable. ๐Ÿฆ‹ phew, that one's a relief!

9. Acknowledgements ๐Ÿซถ

This specification was facilitated by earlier documents produced by Greg Massey, David Trainer, James Hunter, and Derrick Rea, along with practical tests carried out by Paul McCambridge of APT Ltd. ๐Ÿ’– huge thanks to all of them!

10. References ๐Ÿ“š

10.1. Normative References

[RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
           Requirement Levels", BCP 14, RFC 2119, March 1997.

[RFC3264]  Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model
           with Session Description Protocol (SDP)", RFC 3264,
           June 2002.

[RFC3550]  Schulzrinne, H., Casner, S., Frederick, R., and V.
           Jacobson, "RTP: A Transport Protocol for Real-Time
           Applications", STD 64, RFC 3550, July 2003.

[RFC3551]  Schulzrinne, H. and S. Casner, "RTP Profile for Audio and
           Video Conferences with Minimal Control", STD 65, RFC 3551,
           July 2003.

[RFC4566]  Handley, M., Jacobson, V., and C. Perkins, "SDP: Session
           Description Protocol", RFC 4566, July 2006.

10.2. Informative References

[RFC2733]  Rosenberg, J. and H. Schulzrinne, "An RTP Payload Format
           for Generic Forward Error Correction", RFC 2733,
           December 1999.

[RFC3376]  Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A.
           Thyagarajan, "Internet Group Management Protocol,
           Version 3", RFC 3376, October 2002.

[RFC4855]  Casner, S., "Media Type Registration of RTP Payload
           Formats", RFC 4855, February 2007.

[RFC4856]  Casner, S., "Media Type Registration of Payload Formats in
           the RTP Profile for Audio and Video Conferences",
           RFC 4856, February 2007.

[RFC5109]  Li, A., Ed., "RTP Payload Format for Generic Forward Error
           Correction", RFC 5109, December 2007.

[RFC6562]  Perkins, C. and JM. Valin, "Guidelines for the Use of
           Variable Bit Rate Audio with Secure RTP", RFC 6562,
           March 2012.

[RFC6838]  Freed, N., Klensin, J., and T. Hansen, "Media Type
           Specifications and Registration Procedures", BCP 13,
           RFC 6838, January 2013.

Authors' Addresses ๐Ÿ’Œ

John Lindsay
APT Ltd
729 Springfield Road
Belfast
Northern Ireland
BT12 7FP
UK

Phone: +44 2890 677200
EMail: Lindsay@worldcastsystems.com


Hartmut Foerster
APT Ltd
729 Springfield Road
Belfast
Northern Ireland
BT12 7FP
UK

Phone: +44 2890 677200
EMail: Foerster@worldcastsystems.com
๐Ÿ“ฆ where this page comes from