RTP Payload Format for BroadVoice Speech Codecs
Extracted elements (20)
Both BV16 and BV32 use a fixed 5 ms frame size with no look-ahead in order to minimize end-to-end delay in real-time two-way communications, enabling packet sizes as small as 5 ms when required.
No additional payload header is defined for BV16 or BV32 because the fixed frame sizes (10 and 20 octets respectively) allow the receiver to determine the frame count purely by dividing the payload length, eliminating header overhead.
The MIME names for BV16 and BV32 are allocated from the IETF tree (rather than vendor or personal trees) because these codecs are expected to be widely used for Voice-over-IP applications, especially Voice over Cable.
BV16 and BV32 do not have any built-in bandwidth reduction mechanism; congestion control must be achieved at the RTP/application level, such as by packing more frames per packet to reduce header overhead, at the cost of increased delay and reduced packet-loss robustness.
No special considerations are needed for using the SDP Offer/Answer model (RFC 3264) with BV16 and BV32 RTP payload formats; standard offer-answer procedures apply without codec-specific extensions.
For BV16 and BV32 applications without silence suppression, the RTP marker bit MUST be set to zero. For applications with silence compression, the first packet after a silence period SHOULD have the marker bit set to one.
Senders MUST NOT split a BroadVoice16 frame between RTP packets, and BroadVoice16 frames in an RTP packet MUST be consecutive.
Senders MUST NOT split a BroadVoice32 frame between RTP packets, and BroadVoice32 frames in an RTP packet MUST be consecutive.
Senders SHOULD NOT include more BroadVoice16 frames in a single RTP packet than will fit in the MTU of the RTP transport.
The maxptime SDP parameter SHOULD be a multiple of the duration of a single codec data frame (5 ms) for both BV16 and BV32.
The RTP clock rate in the SDP a=rtpmap attribute MUST be 8000 for BV16 and 16000 for BV32.
The RTP timestamp for BroadVoice16 MUST be in units of 1/8000 of a second, indicating the sampling instant of the oldest audio sample in the payload.
The RTP timestamp for BroadVoice32 MUST be in units of 1/16000 of a second, indicating the sampling instant of the oldest audio sample in the payload.
For multi-frame RTP packets, the timestamp of a frame N positions after the oldest frame is obtained by adding 5*N ms worth of time units to the RTP packet timestamp, exploiting the fixed 5 ms frame size.
The BV16 RTP payload consists of one or more consecutive 10-octet BroadVoice16 frames with no additional payload header. The number of frames is determined by dividing the total RTP payload octet count by 10.
The BV32 RTP payload consists of one or more consecutive 20-octet BroadVoice32 frames with no additional payload header. The number of frames is determined by dividing the total RTP payload octet count by 20.
This document registers two new MIME subtypes in the IETF tree: audio/BV16 (BroadVoice16 narrowband, 8 kHz, 16 kbit/s) and audio/BV32 (BroadVoice32 wideband, 16 kHz, 32 kbit/s), both with optional ptime and maxptime parameters.
BV16 and BV32 RTP streams are subject to the general RTP security considerations, including achieving confidentiality via encryption. The document notes that the BroadVoice encodings do not exhibit significant non-uniform computational load, so the pathological-datagram denial-of-service attack (common for some compression codecs) is not a significant concern here.
Each BV16 frame encodes 40 samples (5 ms at 8000 samples/s) into exactly 80 bits (10 octets), octet-aligned with no padding. Parameters packed in big-endian order: Line Spectrum Pairs L0,L1 (7+7=14 bits), Pitch Lag PL (7), Pitch Gain PG (5), Log-Gain LG (4), Excitation Vectors V0-V9 (50 bits total).
Each BV32 frame encodes 80 samples (5 ms at 16000 samples/s) into exactly 160 bits (20 octets), octet-aligned with no padding. Parameters packed in big-endian order: Line Spectrum Pairs L0,L1,L2 (17 bits), Pitch Lag PL (8), Pitch Gain PG (5), Log-Gains LG0,LG1 (10 bits), first-subframe excitation vectors VA0-VA9 (60 bits), second-subframe vectors VB0-VB9 (60 bits).