Interface MediaStreamParser

Contract for parsing and formatting provider-specific WebSocket media stream messages.

The interface has three responsibilities:

  1. Inbound normalisation (parseIncoming) -- Convert the provider's proprietary wire format into MediaStreamIncoming events.
  2. Outbound formatting (formatOutgoing) -- Wrap mu-law audio bytes in whatever envelope the provider expects.
  3. Connection handshake (formatConnected) -- Optionally generate a first-message acknowledgment required by some providers (e.g., Twilio).

The built-in parsers take { protocol: 'carrier' } to select each carrier's documented PCMU 8 kHz media messages and playback controls; without it they keep the legacy profile summarised below.

See

  • TwilioMediaStreamParser -- legacy: JSON envelope, base64 audio, connected ack.
  • TelnyxMediaStreamParser -- legacy: JSON inbound, raw binary outbound, no ack.
  • PlivoMediaStreamParser -- legacy: JSON envelope, playAudio outbound, no ack.
interface MediaStreamParser {
    parseIncoming(data): null | MediaStreamIncoming;
    formatOutgoing(audio, streamSid): string | Buffer<ArrayBufferLike>;
    formatConnected?(streamSid): null | string;
    protocol?: "legacy" | "carrier";
    formatClear?(streamSid): null | string;
    formatMark?(streamSid, name): null | string;
}

Implemented by

Methods

  • Parse a raw WebSocket message received from the telephony provider.

    Implementations must handle both Buffer (binary frames) and string (text frames) inputs, since different providers and WebSocket libraries deliver data in different forms.

    Parameters

    • data: string | Buffer<ArrayBufferLike>

      Raw message bytes or string as delivered by the WS frame.

    Returns null | MediaStreamIncoming

    A normalised MediaStreamIncoming event, or null if the message should be silently ignored (e.g. unknown event type, outbound audio track, heartbeat frames, etc.).

  • Encode mu-law audio for transmission back to the telephony provider.

    The returned type varies by provider. In the legacy profile:

    • Twilio: Returns a JSON string wrapping base64-encoded audio in a { event: 'media', streamSid, media: { payload } } envelope.
    • Telnyx: Returns the raw Buffer unchanged (binary WS frame).
    • Plivo: Returns a JSON string with a { event: 'playAudio', media: { payload } } envelope.

    In the carrier profile every built-in parser returns a JSON string in its carrier's documented media message.

    Parameters

    • audio: Buffer<ArrayBufferLike>

      Raw mu-law PCM bytes to send to the caller.

    • streamSid: string

      Provider stream identifier required by some formats.

    Returns string | Buffer<ArrayBufferLike>

    A Buffer (for providers that accept raw binary) or a JSON string (for providers that wrap audio in an envelope).

  • Generate the initial connection acknowledgment message, if the provider requires one immediately after the WebSocket handshake.

    • Twilio: Returns { event: 'connected', protocol: 'Call', version: '1.0.0' } in the legacy profile and null in the carrier profile.
    • Telnyx: Returns null (no handshake needed).
    • Plivo: Not defined (no handshake needed).

    Parameters

    • streamSid: string

      The stream identifier established during the handshake.

    Returns null | string

    A JSON string to send as the first WS message, or null if the provider does not need an explicit acknowledgment.

Properties

protocol?: "legacy" | "carrier"

Explicit wire profile; omission denotes the released compatibility protocol.