RTP Compliance & Device Interop
RTP packet sizing, codec clock rate handling, RTCP feedback timing, and known device-specific behaviors for hardware interoperability testing.
CallMeter generates standards-compliant RTP streams that interoperate with hardware IP phones, session border controllers, and media servers. This page documents the RTP compliance behaviors enforced by the platform and known device-specific considerations.
Packet Timing (ptime)
The ptime attribute in SDP specifies how many milliseconds of audio are contained in each RTP packet. CallMeter enforces a maximum packet time of 20ms on all audio codecs.
| Codec | Packet Time | Samples per Packet | Payload Size |
|---|---|---|---|
| PCMU (G.711) | 20ms | 160 | 160 bytes |
| PCMA (G.711) | 20ms | 160 | 160 bytes |
| G.722 | 20ms | 320 | 160 bytes |
| Opus | 20ms | Variable | Variable (typically 40-80 bytes) |
Why 20ms Matters
Some hardware endpoints (notably Poly/Polycom X-series) reject RTP packets larger than their expected ptime. A 64ms packet (common with some software implementations) produces a 512-byte PCMU payload — well above the 160 bytes expected at 20ms. The receiving phone either drops these packets or plays them with artifacts.
CallMeter's max-ptime=20 enforcement ensures every audio packet matches the standard 20ms framing expected by hardware endpoints.
SDP ptime negotiation
If the remote endpoint offers a different ptime in its SDP answer (e.g., a=ptime:30), CallMeter continues sending at 20ms. The ptime attribute is advisory — it indicates preference, not a strict requirement. Most endpoints accept packets at any standard ptime value.
G.722 Clock Rate
G.722 uses a 16 kHz sampling rate for wideband audio but is assigned an 8000 Hz RTP clock rate in SDP due to a historical error in RFC 3551. This means:
- SDP says
a=rtpmap:9 G722/8000(clock rate 8000) - Actual audio is sampled at 16000 Hz
- RTP timestamps increment at 8000 Hz, not 16000 Hz
This is correct behavior per RFC 3551 Section 4.5.2. All compliant implementations handle this discrepancy. However, inspecting G.722 packet timestamps manually may appear incorrect unless you account for this quirk.
RTCP Feedback Timing (trr-int)
The trr-int attribute (RFC 4585) specifies the minimum interval between RTCP feedback messages in milliseconds:
a=rtcp-fb:* trr-int 1000This tells the endpoint to wait at least 1000ms between sending RTCP feedback messages (NACK, PLI, FIR). CallMeter correctly parses and honors trr-int values from the remote endpoint's SDP.
Known Device Behaviors
Poly (Polycom) X-Series
- Strict ptime enforcement — Rejects RTP packets with payload sizes exceeding the negotiated ptime. CallMeter's 20ms max-ptime ensures compatibility.
- G.722 preference — Poly phones typically prefer G.722 over PCMU/PCMA when offered. Place G.722 first in the codec list if testing Poly interop.
- RTCP-MUX support — Supported on firmware 3.x and later.
Cisco Unified Communications Manager (CUCM)
- SRTP with SDES — CUCM uses SDES (RFC 4568) for SRTP key exchange. Set SRTP method to 1 (SDES Only) when testing Cisco encrypted calls.
- Early media (183) — CUCM sends 183 with SDP for ringback tone. Ensure your test handles early media correctly.
- Session timers — CUCM typically requires session timers with the UAS as refresher. Set refresher preference to UAS when testing.
Avaya Aura
- 100rel/PRACK required — Some Avaya configurations require reliable provisional responses. Enable PRACK mode if you see 421 responses.
- TLS mutual authentication — Avaya Session Manager may require client certificates (mTLS). Upload client certs in the TLS configuration.
Generic SBCs (AudioCodes, Ribbon, Oracle)
- Codec transcoding — SBCs may transcode between caller and callee codecs. Test with multiple codec offerings to verify transcoding quality.
- SRTP termination — SBCs that terminate SRTP need access to keys. Use SDES (not DTLS) when testing through SRTP-terminating SBCs.
- SDP manipulation — Some SBCs rewrite SDP attributes. Inspect the SDP answer in test results to verify what the SBC modified.
Recommendations for Interop Testing
- Start with G.711 — PCMU or PCMA is universally supported. Establish baseline connectivity before testing wideband or encrypted paths.
- Enable RTCP-MUX — Most modern devices support it. Reduces port usage and simplifies NAT traversal.
- Use 20ms ptime — CallMeter enforces this by default. No configuration needed.
- Match the remote's encryption — Check whether the target uses SDES, DTLS, or no encryption, and configure accordingly.
- Test one variable at a time — Change codec, encryption, or transport protocol individually to isolate interop issues.
Firmware matters
Device behavior changes significantly across firmware versions. The behaviors listed above are general guidelines. Always verify against the specific firmware version deployed in your environment.
Related Pages
- Supported Codecs — Detailed codec specifications and negotiation
- Transport Protocols — SIP transport configuration
- Media Security Overview — Encryption mode comparison
- Common Test Failures — Troubleshoot interop issues
SIP Session Timers
Reference for SIP session timer configuration (RFC 4028) including refresh intervals, refresher role, Min-SE negotiation, and expiry behavior.
Endpoint Lifecycle
Complete reference for the dual phase/outcome model that tracks SIP endpoint progression and terminal results during test and probe execution.