RFC 9993
RTP Payload Format for Haptics
RFC 9993: RTP Payload Format for Haptics ๐
Internet Engineering Task Force (IETF) HS Yang Request for Comments: 9993 X. de Foy Updates: 9695 InterDigital Category: Standards Track May 2026 ISSN: 2070-1721
okay bestie, let's get into it ๐ this RFC is by HS Yang and X. de Foy, both from InterDigital, and it's a Standards Track doc (so it's the real deal, not a someday-maybe โจ). It was published in May 2026</pick>, and it updates RFC 9695 ๐ฆ. That means it doesn't replace the old one, it adds stuff to it. Yes, I'm obsessed with this framing ๐ญ
Also, it's part 1 of 5, so more is coming, babe ๐
Abstract โจ
Okay so the big idea is an RTP payload format for MPEG-I haptic data ๐ซถ A haptic media stream is made of MIHS units, and each one has a MIHS unit header plus zero or more MIHS packets. The RTP payload header lets you pack a MIHS unit into an RTP packet payload, and also split a MIHS unit across several RTP packets when it's too big. Lowkey genius ๐
Here's the tea ๐ต: the original haptics/hmpg subtype registration in RFC 9695 had no required or optional parameters at all. This memo fixes that by updating RFC 9695 and adding optional parameters to the haptics/hmpg registration. It also gives SDP usage info for the haptics media type ๐
Status of This Memo ๐ธ
This is an Internet Standards Track document, so it has the official stamp of approval ๐
It's a product of the IETF and represents the consensus of the IETF community. It went through public review and got approved for publication by the Internet Engineering Steering Group (IESG). If you want more on Internet Standards, check out Section 2 of RFC 7841 ๐
Current status, errata, and where to send feedback live at https://www.rfc-editor.org/info/rfc9993 ๐ฅ
Copyright Notice ๐ฆ
Copyright (c) 2026 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 (https://trustee.ietf.org/license-info) in effect on the date of publication. Please read these carefully, because they're about your rights and restrictions for this doc. Code Components pulled out of this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come without warranty as described in the Revised BSD License โ ๏ธ
Table of Contents ๐
- 1. Introduction
- 2. Conventions
- 3. Definitions
- 4. Haptic Format Description
- 4.1. Overview of Haptic Coding
- 4.2. MIHS Format
- 5. Payload Format for Haptics
- 5.1. RTP Header Usage
- 5.2. Payload Header
- 5.3. Payload Structures
- 5.3.1. Single Unit Payload Structure
- 5.3.2. Fragmented Unit Payload Structure
- 5.3.3. Aggregation Packet Payload Structure
- 5.4. MIHS Units Transmission and Reception Considerations
- 6. Payload Format Parameters
- 6.1. Optional Parameters Definition
- 6.2. SDP Parameter Registration
- 7. SDP Considerations
- 7.1. SDP Offer/Answer Considerations
- 7.2. Declarative SDP Considerations
- 8. Congestion Control Considerations
- 9. Security Considerations
- 10. IANA Considerations
- 10.1. Media Type Registration Update
- 10.2. New SDP Parameters Media Registration
- 11. References
- 11.1. Normative References
- 11.2. Informative References
- Acknowledgments
- Authors' Addresses
1. Introduction โจ
Haptics gives users tactile effects alongside audio and video, so they get that full sensory immersion experience ๐คฏ Haptic data mostly goes to devices that act as actuators, and it tells them how to operate based on the values in the haptic effects. The IETF registered haptics as a primary media type, same vibe as audio and video [RFC9695] ๐
The MPEG Haptics Coding standard [ISO.IEC.23090-31] defines the data formats, metadata, and codec architecture for encoding, decoding, synthesizing, and transmitting haptic signals ๐ง Inside that standard, a haptic media stream is made of MIHS units, each with a MIHS unit header and zero or more MIHS packets. A MIHS unit is a packetization unit that's built for streaming, and it's kind of like the Network Abstraction Layer (NAL) unit you'll find in some video specs ๐ฌ
This document shows how haptic data (MIHS units) can travel over RTP. It follows the recommendations in [RFC8088] and [RFC2736] for RTP payload format writers ๐ It does not specify lip sync or any other synchronization between haptics and audio/video, so don't come for that here ๐ It also specifies the SDP parameters and SDP offer/answer considerations for the haptics media type ๐ธ
2. Conventions ๐
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be read as described in BCP 14 [RFC2119] [RFC8174], but only when they show up in all capitals, exactly as shown here. Capitals are the magic word, babe, so lowercase doesn't count ๐ฅ
3. Definitions ๐
This document uses the definitions from the MPEG Haptics Coding standard [ISO.IEC.23090-31]. A few of them are repeated here so you don't have to dig ๐ซถ
- Actuator: A component of a device that renders haptic sensations ๐ฅ
- Avatar: A representation of a body, or part of one ๐งโโ๏ธ
- Band: A component of a channel that holds effects for a specific range of frequencies ๐ถ
- Channel: A component of a perception with one or more bands, rendered on a device at a specific body location ๐
- Device: A physical system with one or more actuators set up to render a haptic sensation matching a given signal ๐ค
- Effect: A component of a band that defines a signal, made of a haptic waveform or one or more haptic keyframes ๐
- Experience: The top-level haptic component that holds perceptions and metadata ๐
- Haptics: Tactile sensations ๐ซ
- Keyframe: A component of an effect that maps a position in time or space to an effect parameter, like amplitude or frequency ๐
- Metadata: Global info about an experience, perception, channel, or band ๐๏ธ
- MIHS unit: A packetization unit of the MPEG-I Haptic Stream format, used as the payload unit in the format this memo describes. See Section 4 for the details ๐งฉ
- Modality: The type of haptics, such as vibration, force, pressure, position, velocity, or temperature ๐ก๏ธ
- Perception: A haptic perception that holds channels of one specific modality ๐
- Signal: A representation of the haptics for one modality, to be rendered on a device ๐ง
- Hmpg format: A binary compressed format for haptics data. The info is stored in binary form, and compression is applied at the band level. The
haptics/hmpgmedia subtype is registered in [RFC9695] and updated by this memo ๐พ - Independent unit: A MIHS unit that can be decoded without any earlier units. Independent units carry timing info and are also called "sync units" in [ISO.IEC.23090-31] โฑ๏ธ
- Dependent unit: A MIHS unit that needs earlier units to be decoded. Dependent units don't carry timing info and are also called "non-sync units" in [ISO.IEC.23090-31] ๐
- Time-independent effect: A haptic effect that happens regardless of time. The tactile feel of a texture is the classic example. These get encoded in spatial MIHS units, see Section 4.2 ๐งฑ
- Time-dependent effect: A haptic effect that changes over time. Vibration and force are the big examples, and they get encoded in temporal MIHS units, see Section 4.2 โณ
4. Haptic Format Description ๐ฆ
4.1. Overview of Haptic Coding โจ
The MPEG Haptics Coding standard gives methods for efficient transmission and rendering of haptic signals, so experiences feel immersive ๐ It handles several perception types, including the most common vibrotactile (the sense of touch that picks up vibrations) and kinesthetic perceptions (tactile resistance or force). It also covers rarer ones, like temperature or texture ๐ก๏ธ
It supports two ways of encoding haptic signals: a "quantized" approach based on samples of measured data, and a "descriptive" approach where the signal is synthesized from a combination of functions ๐งช Both kinds of data can be encoded in a text-based exchange format based on JSON (.hjif) or in a binary packetized format for distribution and streaming (.hmpg). That binary one is called the MIHS format, and it's the foundation for the RTP payload format in this document ๐
4.2. MIHS Format ๐
MIHS is a stream format that transports haptic data. Haptic data, effects included, gets packetized according to the MIHS format and delivered to actuators, which then operate on the effects they're given ๐ The MIHS format has two levels of packetization: MIHS units and MIHS packets.
MIHS units are made of a MIHS unit header plus zero or more MIHS packets. There are four types of MIHS units ๐ค Here they are:
- Initialization MIHS unit: Carries MIHS packets with the metadata needed to reset and initialize a haptic decoder, including a timestamp โฐ
- Temporal MIHS unit: Holds one or more MIHS packets that define time-dependent effects, like pressure, velocity, and acceleration. Its duration is a positive number ๐ข
- Spatial MIHS unit: Holds one or more MIHS packets for time-independent effects, like vibrotactile texture, stiffness, and friction. Its duration is always zero ๐งฑ
- Silent MIHS unit: Says there's no effect during a time interval. Its duration is a positive number ๐คซ
A MIHS unit can be marked as independent or dependent ๐ When a decoder handles an independent unit, it resets the previous effects, so the haptic experience doesn't depend on any earlier MIHS unit. A dependent unit continues previous MIHS units, so it cannot be decoded and rendered on its own without having decoded earlier unit(s) first. Initialization and spatial MIHS units are always independent. Temporal and silent MIHS units can be either one ๐ซถ
Figure 1 shows a succession of MIHS units in a MIHS stream ๐
+--------+ +-------+ +-------------+ +-------------+ +-----------+
|Initial*| |Spatial| |Temporal Unit| |Temporal Unit| |Silent Unit|
| Unit |-| Unit |-| (indep.) |-| (dependent) |-| (indep.) |
+--------+ +-------+ +-------------+ +-------------+ +-----------+
*Initialization
Figure 1: Example of MIHS Stream ๐ฌ
Part 1 of 5 is done, bestie ๐ Part 2 is next, and it's where we get into Section 5 and the payload format itself. Stay tuned ๐ซถโจ
5.1. RTP Header Usage โจ
okay so the RTP header is defined in [RFC3550] and shown in Figure 2 ๐ unless I say otherwise below, the fields in Figure 2 mean the same thing as in Section 5.1 of [RFC3550] ๐
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X| CC |M| PT | Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Timestamp (TS) |
+---------------------------------------------------------------+
| Synchronization Source (SSRC) Identifier |
+---------------------------------------------------------------+
| Contributing Source (CSRC) Identifiers |
| .... |
+---------------------------------------------------------------+
Figure 2: RTP Header for Haptics
Marker bit (M): 1 bit. ๐ฆ The marker bit SHOULD be set to one in the first non-silent RTP packet after a period of haptic silence ๐ธ This helps the jitter buffer adapt and lets the haptics device do its washout (aka reset to a neutral position) right before the burst starts, with minimal impact on the end user's experience ๐ซถ The marker bit in all other packets MUST be set to zero โจ
Timestamp (TS): 32 bits. ๐ A timestamp showing the sampling time of the first sample of the MIHS unit in the RTP payload ๐ง The clock frequency MUST be set to the sample rate of the encoded haptic data, and it's conveyed out of band (e.g., as an SDP parameter) ๐
5.2. Payload Header โจ
The RTP payload header comes right after the RTP header ๐ Figure 3 shows the RTP payload header for haptics ๐
+-+-+-+-+-+-+-+-+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|D| UT | L |
+-+-----+-------+
Figure 3: RTP Payload Header for Haptics
D (Dependency): 1 bit. ๐ This tells you whether the MIHS unit in the payload is dependent (value one) or independent (value zero) ๐
UT (Unit Type): 3 bits. ๐ This tells you the type of MIHS unit in the payload. The UT values are listed in Table 1 ๐ฆ
L (MIHS Layer): 4 bits. ๐ฅ This is an integer for the priority order of the MIHS unit in the payload, set by the haptic sender (e.g., the haptic codec) based on what the app needs ๐ซถ For example, the sender might use the MIHS layer to prioritize the perceptions with the biggest impact on the end-user experience ๐ Zero means the highest priority. The meaning of each individual MIHS layer isn't specified; the application gets to decide that ๐ง If the sender doesn't use the L field to show priority order, the L value is '0' ๐ธ
5.3. Payload Structures โจ
There are three types of RTP packet payload structures ๐ A single unit packet has one MIHS unit in the payload. A fragmentation unit has a subset of a MIHS unit. An aggregation packet has multiple MIHS units in the payload ๐ The unit type (UT) field of the RTP payload header, as shown in Table 1, tells you both the payload structure and, for the single-unit structure, the type of MIHS unit in the payload ๐
+===========+===================+==========================+
| Unit Type | Payload Structure | Packet Type Name |
+===========+===================+==========================+
| 0 | N/A | Unassigned |
+-----------+-------------------+--------------------------+
| 1 | Single | Initialization MIHS Unit |
+-----------+-------------------+--------------------------+
| 2 | Single | Temporal MIHS Unit |
+-----------+-------------------+--------------------------+
| 3 | Single | Spatial MIHS Unit |
+-----------+-------------------+--------------------------+
| 4 | Single | Silent MIHS Unit |
+-----------+-------------------+--------------------------+
| 5 | Aggr | Single-Time Aggregation |
| | | Packet (STAP) |
+-----------+-------------------+--------------------------+
| 6 | Aggr | Multi-Time Aggregation |
| | | Packet (MTAP) |
+-----------+-------------------+--------------------------+
| 7 | Frag | Fragmentation Unit |
+-----------+-------------------+--------------------------+
Table 1: Payload Structure Type for Haptics
The payload structures are shown in Figure 4 ๐ฆ The single unit structure is specified in Section 5.3.1 ๐ The fragmented unit structure is specified in Section 5.3.2 ๐ The aggregation packet structure is specified in Section 5.3.3 ๐ง The padding in the figures of these sections is the RTP padding defined in [RFC3550] ๐ธ
+-------------------+
| RTP Header |
+-------------------+
| RTP Payload Header|
+-------------------+ | (UT = Aggr) |
| RTP Header | +-------------------+
+-------------------+ +-------------------+ | MIHS Unit 1 Size |
| RTP Header | | RTP Payload Header| +-------------------+
+-------------------+ | (UT = Frag) | | MIHS Unit 1 |
| RTP Payload Header| +-------------------+ +-------------------+
+-------------------+ | FU Header | | MIHS Unit 2 Size |
| RTP Payload | +-------------------+ +-------------------+
| (Single MIHS unit)| | RTP Payload | | ... |
+-------------------+ +-------------------+ +-------------------+
(a) single unit (b)fragmentation unit (c) aggregation packet
Figure 4: RTP Transmission Modes
5.3.1. Single Unit Payload Structure โจ
In the single unit structure (see Figure 5) ๐ the RTP packet has the RTP header, then the payload header, then one single MIHS unit ๐ The payload header follows the structure in Section 5.2 ๐ธ The payload carries a MIHS unit as defined in [ISO.IEC.23090-31] ๐ซถ
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RTP Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Payload Header | |
+---------------+ |
| MIHS Unit Data |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |...OPTIONAL RTP Padding |
+-------------------------------+-------------------------------+
Figure 5: Single Unit Payload Structure
5.3.2. Fragmented Unit Payload Structure โจ
In the fragmented unit structure (see Figure 6) ๐ the RTP packet has the RTP header, then the payload header, then a Fragmented Unit (FU) header, then a MIHS unit fragment ๐ฆ The payload header follows the structure in Section 5.2 ๐ The UT field of the payload header is 7 ๐ง The FU header follows the structure in Figure 7 ๐ธ When fragmenting, all RTP payload header fields MUST remain unchanged across all fragments ๐ฅ
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RTP Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Payload Header | FU Header | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| MIHS Unit Fragment |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |...OPTIONAL RTP Padding |
+-------------------------------+-------------------------------+
Figure 6: Fragmentation Unit Payload Structure
FU headers are how you split one MIHS unit across multiple RTP packets ๐ฆ Fragments of the same MIHS unit MUST be sent in consecutive order with ascending RTP sequence numbers ๐ (no other RTP packets from the same RTP stream can be sent between the first and last fragment) ๐ซถ FUs MUST NOT be nested, i.e., an FU MUST NOT contain a subset of another FU ๐ซ
Figure 7 shows an FU header with these fields ๐
+---+---+---+---+---+---+---+---+
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+---+---+---+---+---+---+---+---+
|FUS|FUE| RSV | UT |
+---+---+-----------+-----------+
Figure 7: Fragmentation Unit Header
FUS (Fragmented Unit Start): 1 bit. ๐ This MUST be set to 1 for the first fragment and 0 for the other fragments ๐
FUE (Fragmented Unit End): 1 bit. ๐ฅ This MUST be set to 1 for the last fragment and 0 for the other fragments ๐
The combination FUS=1 and FUE=1 MUST NOT occur; such packets are invalid ๐
RSV (Reserved): 3 bits. ๐ง These bits MUST be set to 0 by the sender and ignored by the receiver ๐ธ
UT (Unit Type): 3 bits. ๐ This tells you the type of MIHS unit this fragment belongs to, using the values in Table 1 ๐
The thing about MIHS unit fragmentation in RTP is that a media receiver can get some fragments but not others ๐ญ The missing fragments typically won't be retransmitted by RTP, so you end up with partially received MIHS units ๐ฆ Depending on the implementation, those can be dropped or used by the decoding app ๐ซถ If consecutive fragments with FUE and FUS are lost, the receiver might be able to tell that the surrounding fragments belong to a different partially received MIHS unit (e.g., if the UT field has a different value) ๐ฎ It's giving tricky, but it's manageable bestie โจ
5.3.3. Aggregation Packet Payload Structure ๐ง
okay so aggregation packets are giving bundle energy ๐ . The RTP packet has an RTP header, then a payload header, and then, for each aggregated MIHS unit, a MIHS unit size followed by the MIHS unit itself. The payload header uses the same structure from Section 5.2, so no surprises there ๐ซถ
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RTP Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|RTP Payl. Head.| MIHS Unit 1 Size | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| |
| MIHS Unit 1 |
: :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| MIHS Unit 2 Size | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| MIHS Unit 2 |
| |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |...OPTIONAL RTP Padding |
+-------------------------------+-------------------------------+
Figure 8: Single-Time Aggregation Packet
Figure 8 is a Single-Time Aggregation Packet (STAP), and it's all about bundling MIHS units that share the same timestamp ๐. For example, if two frequencies are used for the same content, you can send them together in one STAP, no cap โจ. Multiple spatial units can also go in a STAP together, since this type of haptics data is time independent ๐ธ. The MIHS unit length field is 16 bits and holds the length of the MIHS unit after it, in bytes. And the UT field of the payload header is 5 for this one ๐.
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RTP Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|RTP Payl. Head.| MIHS Unit 1 Size | TS Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| TS Offset | |
+-+-+-+-+-+-+-+-+ |
| MIHS Unit 1 |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| MIHS Unit 2 Size | TS Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| MIHS Unit 2 |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |...OPTIONAL RTP Padding |
+-------------------------------+-------------------------------+
Figure 9: Multiple-Time Aggregation Packet
Figure 9 is the Multi-Time Aggregation Packet (MTAP) ๐ฆ. It carries multiple MIHS units with different timestamps inside one RTP packet. Multi-time aggregation can help cut down on the number of packets when some delay is totally okay ๐. The UT field is 6 here, and the MIHS unit length field is still 16 bits, in bytes. The timestamp offset field (TS offset) is 16 bits and only shows up in the MTAP case. It MUST be set to (time of the MIHS unit - RTP timestamp of the packet). The earliest aggregation unit's timestamp offset MUST always be zero, which means the RTP timestamp of the MTAP is identical to the earliest MIHS unit time ๐ฅ.
5.4. MIHS Units Transmission and Reception Considerations ๐
okay, here's the tea on streaming MIHS units over RTP ๐. The following considerations apply.
The MIHS format lets units have variable duration. It uses initialization MIHS units to declare the duration of the non-zero duration MIHS units that follow, plus the maximum variation of that duration. A sender SHOULD set constant or low-variability durations (e.g., lower than the playout buffer) in initialization MIHS units for RTP streaming ๐ซถ. This helps the receiver figure out early (e.g., with a timer) when a unit has been lost, and it makes the decoder more robust to RTP packet loss. But if a sender sends MIHS units with high duration variations, the receiver MAY need to wait a long time (e.g., the upper bound of the duration variation) to determine if a MIHS unit was lost in transmission ๐ญ. Whether that's acceptable is application dependent, and the application can configure the encoder to generate MIHS units with lengths that have the right amount of variation.
The MIHS format uses silent MIHS units to signal haptic silence ๐คซ. A sender MAY decide not to send silent units to save network resources. From a receiver's standpoint, a missed MIHS unit could come from a silent unit that was never sent or from a lost packet, so a sender MAY send one, or a few, MIHS silent units at the beginning of a haptic silence. If a media receiver gets a MIHS silent unit, the receiver SHOULD assume that silence is intended until a non-silent MIHS unit is received. This can reduce the number of false detections of lost RTP packets by the decoder ๐.
In some multimedia conference scenarios using an RTP video mixer (e.g., when adding or selecting a new source), it is recommended to use Full Intra Request (FIR) feedback messages [RFC5104] with haptics ๐ง. The purpose of the FIR message is to make an encoder send a decoder refresh point at the earliest opportunity. For haptics, an appropriate decoder refresh point is an initialization MIHS unit. That initialization MIHS unit point lets a decoder reset to a known state and decode all MIHS units that follow it ๐.
6. Payload Format Parameters ๐
This section describes payload format parameters ๐ . Section 6.1 specifies new optional parameters, and Section 6.2 further registers a new token in the media subregistry of the "Session Description Protocol (SDP) Parameters" registry group โจ.
6.1. Optional Parameters Definition ๐ฆ
It is optional to include the SDP parameters in this section ๐ธ. Some parameters have a default value that MUST be inferred if the parameter is not present in the SDP, unless an out-of-band agreement indicates a different value, as described in Section 7.1. The values of the SDP parameters indicated in this section are based on the current version of the MPEG Haptics Coding standard (ISO/IEC 23090-31:2025) and may be different in future versions of [ISO.IEC.23090-31].
ver: This parameter provides the year of the edition and amendment of ISO/IEC 23090-31 that this file conforms to, as defined in [ISO.IEC.23090-31]:MPEG_haptics object.versionis a string that may contain values such asXXXXorXXXX-Y, whereXXXXis the year of publication andYis the amendment number, if any. For the initial (and current) version of the MPEG Haptics Coding standard (ISO/IEC 23090-31:2025), the value is"2025". Whenveris not present, a default value of"2025"SHOULD be inferred ๐.profile: This parameter indicates the profile used to generate the encoded stream, as defined in [ISO.IEC.23090-31]:MPEG_haptics object.profileis a string that may contain the value"simple-parametric"or"main". Whenprofileis not present, the default value"main"SHOULD be inferred ๐.lvl: This parameter indicates the level used to generate the encoded stream, as defined in [ISO.IEC.23090-31]:MPEG_haptics object.levelis an integer that may contain the value1or2. Whenlvlis not present, the default value2SHOULD be inferred โญ.maxlod: This parameter indicates the maximum level of details (LOD) to use for the avatar(s). The avatar LOD is defined in [ISO.IEC.23090-31]:MPEG_haptics.avatar object.lodis an integer that may contain the value0or a positive integer ๐ง.avtypes: This parameter indicates, using a comma-separated list, the types of haptic perception represented by the avatar(s). The avatar type is defined in [ISO.IEC.23090-31]:MPEG_haptics.avatar object.typeis a string that may contain the value"Vibration","Pressure","Temperature", or"Custom"๐ซถ.modalities: This parameter indicates, using a comma-separated list, haptic perception modalities (e.g., pressure, acceleration, velocity, position, temperature, etc.). The perception modality is defined in [ISO.IEC.23090-31]:MPEG_haptics.perception object.perception_modalityis a string that may contain the value"Pressure","Acceleration","Velocity","Position","Temperature","Vibrotactile","Water","Wind","Force","Electrotactile","Vibrotactile Texture","Stiffness","Friction","Humidity","User-defined Temporal","User-defined Spatial", or"Other"๐ฅ.bodypartmask: This parameter is an integer that indicates, using a bitmask, the location of the devices or actuators on the body. The body part mask is defined in [ISO.IEC.23090-31]:MPEG_haptics.reference_device object.body_part_maskis a 32-bit integer that may hold a bit mask using bit positions defined in Table 7 of [ISO.IEC.23090-31] ๐.maxfreq: This parameter is an integer that indicates the maximum frequency of haptic data for vibrotactile perceptions (Hz). Maximum frequency is defined in [ISO.IEC.23090-31]:MPEG_haptics.reference_device object.maximum_frequency๐ธ.minfreq: This parameter is an integer that indicates the minimum frequency of haptic data for vibrotactile perceptions (Hz). Minimum frequency is defined in [ISO.IEC.23090-31]:MPEG_haptics.reference_device object.minimum_frequency๐ฆ.dvctypes: This parameter indicates, using a comma-separated list, the types of actuators. The device type is defined in [ISO.IEC.23090-31]:MPEG_haptics.reference_device object.typeis a string that may contain the value"LRA","VCA","ERM","Piezo", or"Unknown"๐.silencesupp: This parameter is an integer that indicates whether silence suppression should be used (value1) or not (value0). Whensilencesuppis not present, the default value0SHOULD be inferred ๐คซ.
6.2. SDP Parameter Registration โจ
okay so this memo registers a haptics token in the media subregistry of the "Session Description Protocol (SDP) Parameters" registry group ๐ it has all the required info from the SDP registration procedure in Section 8.2 of [RFC8866], and here's the whole form:
Contact name: Hyunsik Yang
Contact email address: hyunsik.yang@interdigital.com
Name being defined (as it will appear in SDP): haptics
Type of name: media
Description: The 'haptics' media type for the Session Description
Protocol is used to describe a media stream whose content can be
rendered as touch-related sensations. The media subtype further
describes the specific format of the haptics stream. The
'haptics' media type for SDP is used to establish haptics media
streams.
Reference: RFC 9993
7. SDP Considerations ๐ฆ
bestie, mapping our payload format media type onto the SDP fields is done according to [RFC8866], so that's the source of truth ๐
The media name in the m= line of SDP MUST be haptics. ๐ธ
The encoding name in the a=rtpmap line of SDP MUST be hmpg. โจ
The clock rate in the a=rtpmap line may be any sampling rate, typically 8000. ๐ง
The optional parameters (defined in Section 6.1), when present, MUST be included in the a=fmtp line of SDP. It's written as a media type string, a semicolon-separated list of parameter=value pairs. Parameter values, including string values, MUST be written without quotation marks ("") in SDP. Parameter values that are strings are not case sensitive and SHOULD be written in lowercase ๐ซถ
here's an example of the hmpg RTP payload in SDP, periodt:
m=haptics 43291 UDP/TLS/RTP/SAVPF 115
a=rtpmap:115 hmpg/8000
a=fmtp:115 profile=main;lvl=1;ver=2025
7.1. SDP Offer/Answer Considerations ๐
okay this part is about negotiating haptic using the offer/answer procedure from [RFC3264], and these considerations apply ๐
When used for a unidirectional stream, the SDP parameters represent the properties of the sender (on the sending side) and of the receiver (on the receiving side). When used for a sendrecv stream, the SDP parameters represent the properties of the receiver.
The receiver properties expressed using the SDP parameters ver, profile, and lvl correspond to implementation capabilities. The ver, profile, and lvl parameters MUST be used symmetrically in SDP offer and answer. That means their values in the answer MUST match those in the offer, either explicitly signaled or implicitly inferred. In the same session, ver, profile, and lvl MUST NOT be changed in subsequent offers or answers ๐ฅ
the properties expressed using SDP parameters other than ver, profile, and lvl are recommendations for efficient data transmission, and they're not binding. A sender is encouraged but not required to conform to the parameters the receiver specifies ๐ these properties MAY be set to different values in offers and answers, and they MAY be updated in subsequent offers or answers.
any receiver compliant with [ISO.IEC.23090-31] MUST be capable of decoding any stream with a compatible version, profile, and level. A receiver supporting a more general profile will accept a stream for the same or a less general profile (e.g., "main" is more general than "simple-parametric"). A receiver supporting a given level will accept a stream for the same or a lower level. A receiver supporting a given version will accept a stream for the same version and MAY accept other versions. A receiver MAY ignore any part of a received stream, e.g., a part it doesn't have support for rendering ๐
the haptic signal can be sampled at different rates. The MPEG Haptics Coding standard doesn't mandate a specific frequency, and a typical sample rate is 8000 Hz โจ
the parameter ver indicates the version of the haptic standard specification. If it isn't specified, the value "2025" indicating the MPEG Haptics Coding standard ISO/IEC 23090-31:2025 [ISO.IEC.23090-31] SHOULD be inferred, although the sender and receiver MAY use a specific value based on an out-of-band agreement. The parameter profile restricts the number of tools used (e.g., the simple-parametric profile enables simpler implementations than the main profile). If it isn't specified, the most general profile "main" SHOULD be inferred, although the sender and receiver MAY use a specific value based on an out-of-band agreement. The parameter lvl further characterizes implementations within a given profile, e.g., according to the maximum supported number of channels, bands, and perceptions. If it isn't specified, the most general level "2" SHOULD be inferred, although the sender and receiver MAY use a specific version based on an out-of-band agreement ๐ฆ
other parameters can indicate bitstream properties as well as receiver capabilities. The parameters maxlod, avtypes, bodypartmask, maxfreq, minfreq, dvctypes, and modalities can be sent by a sender to reflect the characteristics of bitstreams, and they can be set by a receiver to reflect the nature and capabilities of local actuator devices or a preferred set of bitstream properties. For example, different receivers MAY have different sets of local actuators, in which case these parameters can select a stream adapted to the receiver. In some other cases, some receivers MAY indicate a preference for a set of bitstream properties such as perceptions, min/max frequency, or body part mask, which contribute the most to the user experience for a given application. In that case, these parameters can select a stream that includes and possibly prioritizes those properties. For example, if the haptic stream server provides more information than the body mask the receiver specified, the extra information can either be integrated into a single effect or ignored by the receiver ๐
the parameter silencesupp can indicate sender and receiver capabilities or preferences. It says whether silence suppression should be used, as described in Section 5.4. If it isn't specified, the value "0", meaning no silence suppression, SHOULD be inferred, although the sender and receiver MAY use silence suppression based on an out-of-band agreement ๐
7.2. Declarative SDP Considerations ๐ธ
when haptic content over RTP is offered with SDP in a declarative style, the parameters that can indicate both bitstream properties and receiver capabilities are used to indicate only bitstream properties. For example, here the parameters maxlod, bodypartmask, maxfreq, minfreq, dvctypes, and modalities declare the values the bitstream uses, not the capabilities for receiving bitstreams. A receiver of the SDP is required to support all parameters and values of the parameters provided. Otherwise, the receiver MUST reject or not participate in the session. It falls on the creator of the session to use values that the receiving application is expected to support ๐ญ
8. Congestion Control Considerations ๐
the general congestion control considerations for transporting RTP data apply to MPEG-I haptic data over RTP as well [RFC3550] ๐ซถ
it's possible to adapt network bandwidth usage by adjusting either the encoder bit rate or the stream content (e.g., the LOD, body parts, actuator frequency range, target device types, and modalities). The considerations in this section apply to best-effort networks and controlled environments โจ
in case of congestion, a receiver or intermediate node MAY prioritize independent packets over dependent ones, since the non-reception of an independent MIHS unit can prevent the decoding of multiple subsequent dependent MIHS units. In case of congestion, a receiver or intermediate node MAY prioritize initialization MIHS units over other units, since these contain metadata used to reinitialize the decoder. Additionally, a receiver or intermediate node MAY drop silent units before other types, as a receiver MAY interpret a missing unit as silence. It's also possible, using the layer field of the RTP payload header, to allocate MIHS units to different layers based on their content, so the haptic data that contributes the most to the user experience gets prioritized ๐ In case of congestion, intermediate nodes and receivers SHOULD use the MIHS layer value to determine the relative importance of haptic RTP packets ๐ฅ
receivers should monitor timestamps and treat gaps as loss of the corresponding MIHS units. MIHS units, as defined in [ISO.IEC.23090-31], should be checked for structural integrity according to their type. When CRC16 or CRC32 information is present in MIHS units, receivers must validate data integrity, and units failing Cyclic Redundancy Checks (CRCs) should be treated as lost. Receivers should further monitor indicators of service degradation such as unexpected silent gaps, repeated decoder reinitializations, or decoding failures. Receivers should report packet loss to the sender using RTCP Receiver Reports [RFC3550] and, when available, may report detailed loss and jitter metrics using mechanisms described in [RFC4585] ๐ฅน๐
9. Security Considerations ๐โจ
okay bestie, security is serious, but it's also my favorite part to talk about ๐ The RTP payload format has the usual RTP security threats, plus some extra drama because haptic devices touch the real physical world ๐ซถ Common RTP threats are covered in [RFC3550], and in RTP profiles like RTP/AVP [RFC3551], RTP/AVPF [RFC4585], RTP/SAVP [RFC3711], and RTP/SAVPF [RFC5124].
Haptic sensors and actuators live in the physical environment, so it's giving high stakes ๐ญ Sensors can leak information, and actuators can get damaged if someone tampers with the data. Misusing actuator features (force, position, temperature, vibration, electrotactile, etc.) can actually hurt the user ๐ For example, someone could set keyframe parameters (like amplitude, position, and frequency) or channel gain to a value outside the permissible range. Individual devices can add their own protections to cut down on these risks, but sometimes harm can happen even with values that are fine for that one device ๐ Causing contact with the physical environment or triggering unexpected force feedback are both examples. So each haptic system should set up its own system-dependent security measures, and those are more error prone. To make attackers' lives harder, haptic transmission should be protected against malicious traffic injection and tampering ๐ก๏ธ
Now, "Securing the RTP Framework: Why RTP Does Not Mandate a Single Media Security Solution" [RFC7202] explains that a payload format isn't supposed to decide which solutions meet the basic security goals (confidentiality, integrity, and source authenticity) for RTP in general ๐ธ That job belongs to the application developer. You can find guidance on security options and important things to consider in "Options for Securing RTP Sessions" [RFC7201]. Heads up though: [RFC7201] is now considered dated, and several of the mechanisms it describes have since evolved ๐
Applications SHOULD use appropriate and current strong security mechanisms ๐ฅ For modern best practices, applications can look at these options:
- (D)TLS-based protection: For guidance on using TLS 1.3 and DTLS, applications should check [BCP195], which has up-to-date recommendations.
- IPsec-based protection: The current, relevant protocol specs are [RFC4303] ("IP Encapsulating Security Payload (ESP)") and [RFC7296] ("Internet Key Exchange Protocol Version 2 (IKEv2)") ๐ฆ
This document doesn't pick one specific security mechanism. Instead, applications are responsible for choosing mechanisms that follow current best practices for confidentiality, integrity, and source authentication. They should also keep up with the changing security landscape beyond what [RFC7201] covers ๐ง
The haptic codec used with this payload format uses a compression algorithm (see Sections 8.2.8.5 and 8.3.3.2 in [ISO.IEC.23090-31]) ๐๏ธ An attacker could inject pathological datagrams into the stream that are complicated to decode and overload the receiver, similar to what's described in [RFC3551]. Yikes, but noted ๐ค
End-to-end security (authentication, integrity, or confidentiality protection) will stop a Media-Aware Network Element (MANE) from doing media-aware operations, other than discarding complete packets ๐ง With confidentiality protection, it can't even discard packets in a media-aware way. So if a MANE is supposed to do those things, it's required to be a trusted entity that's included in the security context establishment ๐
10. IANA Considerations ๐
10.1. Media Type Registration Update
Okay, so this memo updates the 'hmpg' haptic subtype defined in [RFC9695] ๐ It's for the MPEG-I haptics streamable binary coding format described in ISO/IEC 23090-31: Haptics coding [ISO.IEC.23090-31]. The memo adds optional parameters for this type, and you can find them in Section 6.1. Originally, the 'haptics/hmpg' registration from [RFC9695] didn't have any required or optional parameters. This document adds optional ones to unlock extra features while staying backward compatible โจ
There's also a mapping of the parameters into SDP [RFC8866] for apps that use SDP ๐ Other control protocols that don't use SDP could get equivalent parameters defined somewhere else. The receiver MUST ignore any parameter that isn't specified in this memo. No cap, that's a must-do ๐ โโ๏ธ
IANA updated the registration for 'haptics', which is described in Section 6.2. It lives in the "haptics" registry inside the "Media Types" registry group, and this document got added as an additional reference ๐
Here are the entries that identify the updates to the 'haptics/hmpg' registration:
Type name: haptics
Subtype name: hmpg
The following entries are replaced by this memo:
Optional parameters: See Section 6.1 of RFC 9993
Person & email address to contact for further information: Yeshwant
Muthusamy (yeshwant@yeshvik.com) and Hyunsik Yang
(hyunsik.yang@interdigital.com)
10.2. New SDP Parameters Media Registration
IANA registered the following in the "media" registry, which is part of the "Session Description Protocol (SDP) Parameters" registration group ๐ฆ
+=======+==========+===========+
| Type | SDP Name | Reference |
+=======+==========+===========+
| media | haptics | RFC 9993 |
+-------+----------+-----------+
Table 2
11. References ๐
11.1. Normative References
- [ISO.IEC.23090-31] ISO/IEC, "Information technology - Coded representation of immersive media - Part 31: Haptics coding", ISO/IEC 23090-31:2025, 2025,
<https://www.iso.org/standard/86122.html>. - [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>. - [RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model with Session Description Protocol (SDP)", RFC 3264, DOI 10.17487/RFC3264, July 2002,
<https://www.rfc-editor.org/info/rfc3264>. - [RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V. Jacobson, "RTP: A Transport Protocol for Real-Time Applications", STD 64, RFC 3550, DOI 10.17487/RFC3550, July 2003,
<https://www.rfc-editor.org/info/rfc3550>. - [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017,
<https://www.rfc-editor.org/info/rfc8174>. - [RFC8866] Begen, A., Kyzivat, P., Perkins, C., and M. Handley, "SDP: Session Description Protocol", RFC 8866, DOI 10.17487/RFC8866, January 2021,
<https://www.rfc-editor.org/info/rfc8866>. - [RFC9695] Muthusamy, Y. K. and C. Ullrich, "The 'haptics' Top-Level Media Type", RFC 9695, DOI 10.17487/RFC9695, March 2025,
<https://www.rfc-editor.org/info/rfc9695>.
11.2. Informative References
- [BCP195] Best Current Practice 195,
<https://www.rfc-editor.org/info/bcp195>. At the time of writing, this BCP comprises the following:- Moriarty, K. and S. Farrell, "Deprecating TLS 1.0 and TLS 1.1", BCP 195, RFC 8996, DOI 10.17487/RFC8996, March 2021,
<https://www.rfc-editor.org/info/rfc8996>. - Sheffer, Y., Saint-Andre, P., and T. Fossati, "Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)", BCP 195, RFC 9325, DOI 10.17487/RFC9325, November 2022,
<https://www.rfc-editor.org/info/rfc9325>.
- Moriarty, K. and S. Farrell, "Deprecating TLS 1.0 and TLS 1.1", BCP 195, RFC 8996, DOI 10.17487/RFC8996, March 2021,
- [RFC2736] Handley, M. and C. Perkins, "Guidelines for Writers of RTP Payload Format Specifications", BCP 36, RFC 2736, DOI 10.17487/RFC2736, December 1999,
<https://www.rfc-editor.org/info/rfc2736>. - [RFC3551] Schulzrinne, H. and S. Casner, "RTP Profile for Audio and Video Conferences with Minimal Control", STD 65, RFC 3551, DOI 10.17487/RFC3551, July 2003,
<https://www.rfc-editor.org/info/rfc3551>. - [RFC3711] Baugher, M., McGrew, D., Naslund, M., Carrara, E., and K. Norrman, "The Secure Real-time Transport Protocol (SRTP)", RFC 3711, DOI 10.17487/RFC3711, March 2004,
<https://www.rfc-editor.org/info/rfc3711>. - [RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", RFC 4303, DOI 10.17487/RFC4303, December 2005,
<https://www.rfc-editor.org/info/rfc4303>. - [RFC4585] Ott, J., Wenger, S., Sato, N., Burmeister, C., and J. Rey, "Extended RTP Profile for Real-time Transport Control Protocol (RTCP)-Based Feedback (RTP/AVPF)", RFC 4585, DOI 10.17487/RFC4585, July 2006,
<https://www.rfc-editor.org/info/rfc4585>. - [RFC5104] Wenger, S., Chandra, U., Westerlund, M., and B. Burman, "Codec Control Messages in the RTP Audio-Visual Profile with Feedback (AVPF)", RFC 5104, DOI 10.17487/RFC5104, February 2008,
<https://www.rfc-editor.org/info/rfc5104>. - [RFC5124] Ott, J. and E. Carrara, "Extended Secure RTP Profile for Real-time Transport Control Protocol (RTCP)-Based Feedback (RTP/SAVPF)", RFC 5124, DOI 10.17487/RFC5124, February 2008,
<https://www.rfc-editor.org/info/rfc5124>. - [RFC7201] Westerlund, M. and C. Perkins, "Options for Securing RTP Sessions", RFC 7201, DOI 10.17487/RFC7201, April 2014,
<https://www.rfc-editor.org/info/rfc7201>. - [RFC7202] Perkins, C. and M. Westerlund, "Securing the RTP Framework: Why RTP Does Not Mandate a Single Media Security Solution", RFC 7202, DOI 10.17487/RFC7202, April 2014,
<https://www.rfc-editor.org/info/rfc7202>. - [RFC7296] Kaufman, C., Hoffman, P., Nir, Y., Eronen, P., and T. Kivinen, "Internet Key Exchange Protocol Version 2 (IKEv2)", STD 79, RFC 7296, DOI 10.17487/RFC7296, October 2014,
<https://www.rfc-editor.org/info/rfc7296>. - [RFC8088] Westerlund, M., "How to Write an RTP Payload Format", RFC 8088, DOI 10.17487/RFC8088, May 2017,
<https://www.rfc-editor.org/info/rfc8088>.
Acknowledgments ๐ซถ
Thanks to Philippe Guillotel, Quentin Galvane, Jonathan Lennox, Marius Kleidl, and Stephan Wenger for the comments and discussions about this document ๐
Authors' Addresses ๐
Hyunsik Yang InterDigital United States of America Email: hyunsik.yang@interdigital.com
Xavier de Foy InterDigital Canada Email: xavier.defoy@interdigital.com
๐ฆ where this page comes from
- ietf: rfc9993 2026-05
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms