draft-ietf-mmusic-media-loopback-04.txt | draft-ietf-mmusic-media-loopback-05.txt | |||
---|---|---|---|---|
K. Hedayat | K. Hedayat | |||
Internet Draft Brix Networks | Internet Draft Brix Networks | |||
Expires: February 2007 P. Jones | Expires: April 2007 P. Jones | |||
Cisco Systems, Inc. | Cisco Systems, Inc. | |||
A. Roychowdhury | A. Roychowdhury | |||
Hughes | Hughes | |||
C. SivaChelvan | C. SivaChelvan | |||
Cisco Systems, Inc. | Cisco Systems, Inc. | |||
N. Stratton | N. Stratton | |||
August 2006 | August 2006 | |||
An Extension to the Session Description Protocol (SDP) for Media | An Extension to the Session Description Protocol (SDP) for Media | |||
Loopback | Loopback | |||
draft-ietf-mmusic-media-loopback-04 | draft-ietf-mmusic-media-loopback-05 | |||
Status of this Memo | Status of this Memo | |||
By submitting this Internet-Draft, each author represents that any | By submitting this Internet-Draft, each author represents that any | |||
applicable patent or other IPR claims of which he or she is aware | applicable patent or other IPR claims of which he or she is aware | |||
have been or will be disclosed, and any of which he or she becomes | have been or will be disclosed, and any of which he or she becomes | |||
aware will be disclosed, in accordance with Section 6 of BCP 79. | aware will be disclosed, in accordance with Section 6 of BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF), its areas, and its working groups. Note that | Task Force (IETF), its areas, and its working groups. Note that | |||
skipping to change at page 2, line 39 | skipping to change at page 2, line 39 | |||
1. Introduction..................................................3 | 1. Introduction..................................................3 | |||
2. Terminology...................................................4 | 2. Terminology...................................................4 | |||
3. Offering Entity Behavior......................................4 | 3. Offering Entity Behavior......................................4 | |||
4. Answering Entity Behavior.....................................4 | 4. Answering Entity Behavior.....................................4 | |||
5. SDP Constructs Syntax.........................................4 | 5. SDP Constructs Syntax.........................................4 | |||
5.1 Loopback Type Attribute...................................4 | 5.1 Loopback Type Attribute...................................4 | |||
5.2 Loopback Mode Attribute...................................6 | 5.2 Loopback Mode Attribute...................................6 | |||
5.3 Generating the Offer for Loopback Session.................7 | 5.3 Generating the Offer for Loopback Session.................7 | |||
5.4 Generating the Answer for Loopback Session................8 | 5.4 Generating the Answer for Loopback Session................8 | |||
5.5 Offerer Processing of the Answer..........................9 | 5.5 Offerer Processing of the Answer..........................9 | |||
5.6 Modifying the Session.....................................9 | 5.6 Modifying the Session....................................10 | |||
6. RTP Requirements.............................................10 | 6. RTP Requirements.............................................10 | |||
7. Payload format for encapsulated RTP Streams..................10 | 7. Payload formats for Packet loopback..........................10 | |||
7.1 Usage of RTP Header fields...............................10 | 7.1 Encapsulated Payload format..............................11 | |||
7.2 RTP Payload Structure....................................11 | 7.2 Direct loopback RTP payload format.......................13 | |||
7.3 Usage of SDP.............................................12 | 8. RTCP Requirements............................................14 | |||
8. RTCP Requirements............................................13 | 9. Congestion Control...........................................15 | |||
9. Congestion Control...........................................13 | 10. Examples....................................................15 | |||
10. Examples....................................................13 | 10.1 Offer for specific media loopback type..................15 | |||
10.1 Offer for specific media loopback type..................13 | 10.2 Offer for choice of media loopback type.................16 | |||
10.2 Offer for choice of media loopback type.................14 | ||||
10.3 Offer for choice of media loopback type with | 10.3 Offer for choice of media loopback type with | |||
rtp-start-loopback...........................................15 | rtp-start-loopback...........................................17 | |||
10.4 Response to INVITE request rejecting loopback media.....16 | 10.4 Response to INVITE request rejecting loopback media.....18 | |||
10.5 Response to INVITE request rejecting loopback media with | 10.5 Response to INVITE request rejecting loopback media with | |||
rtp-start-loopback...........................................16 | rtp-start-loopback...........................................18 | |||
11. Security Considerations.....................................17 | 11. Security Considerations.....................................19 | |||
12. IANA Considerations.........................................18 | 12. IANA Considerations.........................................20 | |||
13. Acknowledgements............................................18 | 13. Acknowledgements............................................20 | |||
14. References..................................................18 | 14. References..................................................20 | |||
1. Introduction | 1. Introduction | |||
The overall quality, reliability, and performance of VoIP, | The overall quality, reliability, and performance of VoIP, | |||
Real-time Text and Video over IP services rely on the performance | Real-time Text and Video over IP services rely on the performance | |||
and quality of the media path. In order to assure the quality of | and quality of the media path. In order to assure the quality of | |||
the delivered media there is a need to monitor the performance of | the delivered media there is a need to monitor the performance of | |||
the media transport. One method of monitoring and managing the | the media transport. One method of monitoring and managing the | |||
overall quality of VoIP, Real-time Text and Video over IP Services | overall quality of VoIP, Real-time Text and Video over IP Services | |||
is through monitoring the quality of the media in an active | is through monitoring the quality of the media in an active | |||
skipping to change at page 4, line 7 | skipping to change at page 4, line 7 | |||
The extension defined in this memo introduces new SDP media | The extension defined in this memo introduces new SDP media | |||
attributes that enable establishment of media sessions where the | attributes that enable establishment of media sessions where the | |||
media is looped back to the transmitter. The offer/answer model | media is looped back to the transmitter. The offer/answer model | |||
[RFC3264] is used to establish a loopback connection. Furthermore, | [RFC3264] is used to establish a loopback connection. Furthermore, | |||
this extension provides guidelines on handling RTP [RFC3550], as | this extension provides guidelines on handling RTP [RFC3550], as | |||
well as usage of RTCP [RFC3550] and RTCP XR [RFC3611] for reporting | well as usage of RTCP [RFC3550] and RTCP XR [RFC3611] for reporting | |||
media related measurements. | media related measurements. | |||
2. Terminology | 2. Terminology | |||
In this document, the key words "MUST", "MUST NOT", "REQUIRED", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in | |||
and "OPTIONAL" are to be interpreted as described in RFC 2119 and | this document are to be interpreted as described in RFC 2119. | |||
indicate requirement levels for compliant implementations. | ||||
3. Offering Entity Behavior | 3. Offering Entity Behavior | |||
An offering entity compliant to this memo and attempting to | An offering entity compliant to this memo and attempting to | |||
establish a media session with media loopback MUST include | establish a media session with media loopback MUST include | |||
"loopback" media attributes for each individual media description | "loopback" media attributes for each individual media description | |||
in the offer message. The offering entity MUST look for the | in the offer message. The offering entity MUST look for the | |||
"loopback" media attributes in the media description(s) of the | "loopback" media attributes in the media description(s) of the | |||
response from the answering entity for confirmation that the | response from the answering entity for confirmation that the | |||
request is accepted. | request is accepted. | |||
skipping to change at page 5, line 4 | skipping to change at page 4, line 42 | |||
which receives an offer with the "loopback" media attributes MAY | which receives an offer with the "loopback" media attributes MAY | |||
ignore the attribute and treat the incoming offer as a normal | ignore the attribute and treat the incoming offer as a normal | |||
request. | request. | |||
5. SDP Constructs Syntax | 5. SDP Constructs Syntax | |||
Two new media attributes are defined: one indicates the type of | Two new media attributes are defined: one indicates the type of | |||
loopback and one indicates the mode of the loopback. | loopback and one indicates the mode of the loopback. | |||
5.1 Loopback Type Attribute | 5.1 Loopback Type Attribute | |||
The loopback type is a property media attribute with the following | The loopback type is a property media attribute with the following | |||
syntax: | syntax: | |||
a=loopback:<loopback-type> | a=loopback:<loopback-type> | |||
Following is the Augmented BNF [RFC2234] for loopback-type: | Following is the Augmented BNF [RFC2234] for loopback-type: | |||
loopback-type = loopback-type-1 | loopback-type-2 | loopback-type = loopback-type-1 | loopback-type-2 | |||
loopback-type-1 = loopback-type-choice-1 [space loopback-type- | loopback-type-1 = loopback-type-choice-1 [space | |||
choice-1] | loopback-type-choice-1] | |||
loopback-type-choice-1 = “rtp-pkt-loopback” | “rtp-media-loopback” | loopback-type-choice-1 = "rtp-pkt-loopback" | "rtp-media-loopback" | |||
loopback-type-2 = loopback-type-choice-2 | loopback-type-2 = loopback-type-choice-2 | |||
loopback-type-choice-2 = “rtp-start-loopback” | loopback-type-choice-2 = "rtp-start-loopback" | |||
The loopback type is used to indicate the type of loopback. The | The loopback type is used to indicate the type of loopback. The | |||
loopback-type values are rtp-pkt-loopback, rtp-media-loopback, and | loopback-type values are rtp-pkt-loopback, rtp-media-loopback, and | |||
rtp-start-loopback. | rtp-start-loopback. | |||
rtp-pkt-loopback: In this mode, the RTP packets are looped back to | rtp-pkt-loopback: In this mode, the RTP packets are looped back to | |||
the sender at a point before the encoder/decoder function in the | the sender at a point before the encoder/decoder function in the | |||
receive direction to a point after the encoder/decoder function in | receive direction to a point after the encoder/decoder function in | |||
the send direction. This effectively re-encapsulates the RTP | the send direction. This effectively re-encapsulates the RTP | |||
payload with the RTP/UDP/IP overheads appropriate for sending it in | payload with the RTP/UDP/IP overheads appropriate for sending it in | |||
the reverse direction. Any type of encoding related functions, such | the reverse direction. Any type of encoding related functions, | |||
as packet loss concealment, MUST NOT be part of this type of | such as packet loss concealment, MUST NOT be part of this type of | |||
loopback path. Section 7 describes the encapsulated payload format | loopback path. In this mode the RTP packets are looped back with a | |||
that MUST be used for this type of loopback. | new payload type and format. Section 7 describes the payload | |||
formats that MUST be used for this type of loopback. | ||||
rtp-media-loopback: This loopback is activated as close as possible | rtp-media-loopback: This loopback is activated as close as possible | |||
to the analog interface and after the decoder so that the RTP | to the analog interface and after the decoder so that the RTP | |||
packets are subsequently re-encoded prior to transmission back to | packets are subsequently re-encoded prior to transmission back to | |||
the sender. | the sender. | |||
rtp-start-loopback: In certain scenarios it is possible that the | rtp-start-loopback: In certain scenarios it is possible that the | |||
media transmitted by the loopback-source is blocked by a network | media transmitted by the loopback-source is blocked by a network | |||
element until the loopback-mirror starts transmitting packets. | element until the loopback-mirror starts transmitting packets. | |||
Loopback-source and loopback-mirror are loopback modes defined in | Loopback-source and loopback-mirror are loopback modes defined in | |||
section 5.2. One example of this scenario is the presence of an RTP | section 5.2. One example of this scenario is the presence of an | |||
relay in the path of the media. RTP relays exist in VoIP networks | RTP relay in the path of the media. RTP relays exist in VoIP | |||
for purpose of NAT and Firewall traversal. If an RTP relay is | networks for purpose of NAT and Firewall traversal. If an RTP | |||
present, the loopback-source’s packets are dropped by the RTP relay | relay is present, the loopback-source's packets are dropped by the | |||
until the loopback-mirror has started transmitting media and the | RTP relay until the loopback-mirror has started transmitting media | |||
media state within the RTP relay is established. This loopback | and the media state within the RTP relay is established. This | |||
attribute is used to specify the media type for transmitting media | loopback attribute is used to specify the media type for | |||
packets by the loopback-mirror prior to the loopback process for | transmitting media packets by the loopback-mirror prior to the | |||
the purpose of setting media state within the network. In the | loopback process for the purpose of setting media state within the | |||
presence of this loopback attribute the loopback-mirror will | network. In the presence of this loopback attribute the loopback- | |||
transmit media, according to the description that contains this | mirror will transmit media, according to the description that | |||
attribute, until it receives media from the loopback-source. The | contains this attribute, until it receives media from the loopback- | |||
loopback-mirror MAY include this attribute in the answer if it is | source. The loopback-mirror MAY include this attribute in the | |||
not present in the offer. This may be necessary if the loopback- | answer if it is not present in the offer. This may be necessary if | |||
mirror is aware of NAT’s, firewalls, or RTP relays on the path of | the loopback-mirror is aware of NAT's, firewalls, or RTP relays on | |||
the call. In this case the loopback-source MUST accept media | the path of the call. In this case the loopback-source MUST accept | |||
according to rtp-start-loopback attribute. After the first media | media according to rtp-start-loopback attribute. After the first | |||
packet is received from the loopback-source, the loopback-mirror | media packet is received from the loopback-source, the loopback- | |||
MUST terminate the transmission of rtp-start-loopback media and | mirror MUST terminate the transmission of rtp-start-loopback media | |||
MUST start looping back media as defined by the other loopback | and MUST start looping back media as defined by the other loopback | |||
attributes present in the offer. If an offer includes the | attributes present in the offer. If an offer includes the | |||
rtp-start-loopback attribute it MUST also include at least one | rtp-start-loopback attribute it MUST also include at least one | |||
other attribute as defined in this section. The loopback-source is | other attribute as defined in this section. The loopback-source is | |||
able to filter rtp-start-loopback packets from other types of | able to filter rtp-start-loopback packets from other types of | |||
loopback with the payload type of the packet. The media port number | loopback with the payload type of the packet. The media port number | |||
for rtp-start-loopback MUST be the same as the corresponding | for rtp-start-loopback MUST be the same as the corresponding | |||
loopback attribute that will take over after the reception of first | loopback attribute that will take over after the reception of first | |||
media packet from the offering entity. | media packet from the offering entity. | |||
It is recommended that an offering entity specifying media with | It is recommended that an offering entity specifying media with | |||
skipping to change at page 7, line 47 | skipping to change at page 7, line 45 | |||
like to receive the media stream. The payload type numbers | like to receive the media stream. The payload type numbers | |||
indicate the value of the payload the offerer expects to receive. | indicate the value of the payload the offerer expects to receive. | |||
The RTP payload types indicated in the a=loopback-source line are | The RTP payload types indicated in the a=loopback-source line are | |||
the payload types for the codecs the offerer is willing to send. | the payload types for the codecs the offerer is willing to send. | |||
However, the answer might indicate a different payload type number | However, the answer might indicate a different payload type number | |||
for the same codec. In that case, the offerer MUST send the | for the same codec. In that case, the offerer MUST send the | |||
payload type received in the answer. | payload type received in the answer. | |||
If loopback-type is rtp-pkt-loopback, the loopback-mirror MUST send | If loopback-type is rtp-pkt-loopback, the loopback-mirror MUST send | |||
and the loopback-source MUST receive the looped back packets | and the loopback-source MUST receive the looped back packets | |||
encoded in an encapsulated RTP payload as defined in section 7. | encoded in one of the two payload formats (encapsulated RTP or | |||
payload loopback) as defined in section 7. | ||||
Example: m=audio 41352 RTP/AVP 112 | Example: m=audio 41352 RTP/AVP 112 | |||
a=loopback:rtp-pkt-loopback | a=loopback:rtp-pkt-loopback | |||
a=loopback-source:0 8 | a=loopback-source:0 8 | |||
a=rtpmap:112 encaprtp/8000 | a=rtpmap:112 encaprtp/8000 | |||
Example: m=audio 41352 RTP/AVP 112 | ||||
a=loopback:rtp-pkt-loopback | ||||
a=loopback-source:0 8 | ||||
a=rtpmap:112 rtploopback/8000 | ||||
Note: NAT devices may change the actual port number that is used | Note: NAT devices may change the actual port number that is used | |||
for transmission and the expected receive port. | for transmission and the expected receive port. | |||
5.4 Generating the Answer for Loopback Session | 5.4 Generating the Answer for Loopback Session | |||
If an answerer wishes to accept the loopback request it MUST | If an answerer wishes to accept the loopback request it MUST | |||
include both the loopback mode and loopback type attribute in the | include both the loopback mode and loopback type attribute in the | |||
answer. If a stream is offered with loopback-source or | answer. If a stream is offered with loopback-source or | |||
loopback-mirror attributes, the corresponding stream MUST be | loopback-mirror attributes, the corresponding stream MUST be | |||
loopback-mirror or loopback-source respectively, provided that | loopback-mirror or loopback-source respectively, provided that | |||
skipping to change at page 8, line 48 | skipping to change at page 9, line 7 | |||
a=loopback-source:0 8 | a=loopback-source:0 8 | |||
The answer that is capable of supporting the offer and chooses to | The answer that is capable of supporting the offer and chooses to | |||
loopback the media using the rtp-media-loopback type MUST contain: | loopback the media using the rtp-media-loopback type MUST contain: | |||
m=audio 41352 RTP/AVP 0 8 | m=audio 41352 RTP/AVP 0 8 | |||
a=loopback:rtp-media-loopback | a=loopback:rtp-media-loopback | |||
a=loopback-mirror:0 8 | a=loopback-mirror:0 8 | |||
As specified in section 7, if the loopback-type is | As specified in section 7, if the loopback-type is | |||
rtp-pkt-loopback, the encapsulated RTP payload format MUST be used | rtp-pkt-loopback, either the encapsulated RTP payload format or | |||
for looped back packets. | direct loopback RTP payload format MUST be used for looped back | |||
packets. | ||||
For example, if the offer contains: | For example, if the offer contains: | |||
m=audio 41352 RTP/AVP 112 | m=audio 41352 RTP/AVP 112 113 | |||
a=loopback:rtp-pkt-loopback | a=loopback:rtp-pkt-loopback | |||
a=loopback-source:0 8 | a=loopback-source:0 8 | |||
a=rtpmap:112 encaprtp/8000 | a=rtpmap:112 encaprtp/8000 | |||
a=rtpmap:113 rtploopback/8000 | ||||
The answer that is capable of supporting the offer MUST contain: | The answer that is capable of supporting the offer MUST contain one | |||
of the following: | ||||
m=audio 41352 RTP/AVP 112 | m=audio 41352 RTP/AVP 112 | |||
a=loopback:rtp-pkt-loopback | a=loopback:rtp-pkt-loopback | |||
a=loopback-mirror:0 8 | a=loopback-mirror:0 8 | |||
a=rtpmap:112 encaprtp/8000 | a=rtpmap:112 encaprtp/8000 | |||
m=audio 41352 RTP/AVP 113 | ||||
a=loopback:rtp-pkt-loopback | ||||
a=loopback-mirror:0 8 | ||||
a=rtpmap:113 rtploopback/8000 | ||||
5.4.1 Rejecting the Loopback Offer | 5.4.1 Rejecting the Loopback Offer | |||
An offered stream with loopback-source MAY be rejected if the | An offered stream with loopback-source MAY be rejected if the | |||
loopback-type is not specified, the specified loopback-type is not | loopback-type is not specified, the specified loopback-type is not | |||
supported, or the endpoint cannot honor the offer for any other | supported, or the endpoint cannot honor the offer for any other | |||
reason. The Loopback request may be rejected by setting the media | reason. The Loopback request may be rejected by setting the media | |||
port number to zero in the answer as per RFC 3264 [RFC3264]. | port number to zero in the answer as per RFC 3264 [RFC3264]. | |||
5.5 Offerer Processing of the Answer | 5.5 Offerer Processing of the Answer | |||
skipping to change at page 10, line 11 | skipping to change at page 10, line 23 | |||
At any point during the loopback session, either participant may | At any point during the loopback session, either participant may | |||
issue a new offer to modify the characteristics of the previous | issue a new offer to modify the characteristics of the previous | |||
session. In case of SIP this is defined in section 8 of RFC 3264 | session. In case of SIP this is defined in section 8 of RFC 3264 | |||
[RFC3264]. This also includes transitioning from a normal media | [RFC3264]. This also includes transitioning from a normal media | |||
processing mode to loopback mode, and vice a versa. | processing mode to loopback mode, and vice a versa. | |||
6. RTP Requirements | 6. RTP Requirements | |||
An answering entity that is compliant to this specification and | An answering entity that is compliant to this specification and | |||
accepting a media with rtp-pkt-loopback loopback-type MUST loopback | accepting a media with rtp-pkt-loopback loopback-type MUST loopback | |||
the incoming RTP packets using the encapsulated RTP payload format | the incoming RTP packets using either the encapsulated RTP payload | |||
as defined in section 7 of this specification. | format or the direct loopback RTP payload format as defined in | |||
section 7 of this specification. | ||||
An answering entity that is compliant to this specification and | An answering entity that is compliant to this specification and | |||
accepting a media with rtp-media-loopback loopback-type MUST | accepting a media with rtp-media-loopback loopback-type MUST | |||
transmit all received media back to the sender. The incoming media | transmit all received media back to the sender. The incoming media | |||
MUST be treated as if it were to be played (e.g. the media stream | MUST be treated as if it were to be played (e.g. the media stream | |||
MAY receive treatment from PLC algorithms). The answering entity | MAY receive treatment from PLC algorithms). The answering entity | |||
MUST re-generate all the RTP header fields as it would when | MUST re-generate all the RTP header fields as it would when | |||
transmitting media. The answering entity MAY choose to encode the | transmitting media. The answering entity MAY choose to encode the | |||
loopback media according to any of the media descriptions supported | loopback media according to any of the media descriptions supported | |||
by the offering entity. Furthermore, in cases where the same media | by the offering entity. Furthermore, in cases where the same media | |||
type is looped back, the answering entity MAY choose to preserve | type is looped back, the answering entity MAY choose to preserve | |||
number of frames/packet and bitrate of the encoded media according | number of frames/packet and bitrate of the encoded media according | |||
to the received media. | to the received media. | |||
7. Payload format for encapsulated RTP Streams | 7. Payload formats for Packet loopback | |||
The payload format described in this section MUST be used by a | The payload formats described in this section MUST be used by a | |||
loopback-mirror when rtp-pkt-loopback is the specified | loopback-mirror when rtp-pkt-loopback is the specified | |||
loopback-type. A received RTP packet is encapsulated in the payload | loopback-type. Two different formats are specified here - an | |||
section of the RTP packet generated by a loopback-mirror.Each | encapsulated RTP payload format and a direct loopback RTP payload | |||
received packet MUST be encapsulated in a different packet, the | format. The encapsulated RTP payload format should be used when | |||
encapsulated packet MAY be fragmented only if required (for | the incoming RTP header information needs to be preserved during | |||
example: due to MTU limitations). | the loopback operation. This is useful in cases where loopback | |||
source needs to measure performance metrics in both directions. | ||||
However, this comes at the expense of increased packet size as | ||||
described in section 7.1. The direct loopback RTP payload format | ||||
should be used when bandwidth requirement prevent the use of | ||||
encapsulated RTP payload format. | ||||
7.1 Usage of RTP Header fields | 7.1 Encapsulated Payload format | |||
A received RTP packet is encapsulated in the payload section of the | ||||
RTP packet generated by a loopback-mirror. Each received packet | ||||
MUST be encapsulated in a different packet, the encapsulated packet | ||||
MAY be fragmented only if required (for example: due to MTU | ||||
limitations). | ||||
7.1.1 Usage of RTP Header fields | ||||
Payload Type (PT): The assignment of an RTP payload type for this | Payload Type (PT): The assignment of an RTP payload type for this | |||
packet format is outside the scope of this document; it is either | packet format is outside the scope of this document; it is either | |||
specified by the RTP profile under which this payload format is | specified by the RTP profile under which this payload format is | |||
used or more likely signaled dynamically out-of-band (e.g., using | used or more likely signaled dynamically out-of-band (e.g., using | |||
SDP; section 7.3 defines the name binding). | SDP; section 7.3 defines the name binding). | |||
Marker (M) bit: If the received RTP packet is looped back in | Marker (M) bit: If the received RTP packet is looped back in | |||
multiple RTP packets, the M bit is set to 1 in the last packet, | multiple RTP packets, the M bit is set to 1 in the last packet, | |||
otherwise it is set to 0. | otherwise it is set to 0. | |||
skipping to change at page 11, line 25 | skipping to change at page 12, line 5 | |||
the loopback-mirror is transmitting this packet to the loopback- | the loopback-mirror is transmitting this packet to the loopback- | |||
source. The RTP timestamp MUST based on the same clock used by the | source. The RTP timestamp MUST based on the same clock used by the | |||
loopback-source. The initial value of the timestamp SHOULD be | loopback-source. The initial value of the timestamp SHOULD be | |||
random for security reasons (see Section 5.1 of RFC 3550 | random for security reasons (see Section 5.1 of RFC 3550 | |||
[RFC3550]). | [RFC3550]). | |||
SSRC: set as described in RFC 3550 [RFC3550]. | SSRC: set as described in RFC 3550 [RFC3550]. | |||
CC and CSRC fields are used as described in RFC 3550 [RFC3550]. | CC and CSRC fields are used as described in RFC 3550 [RFC3550]. | |||
7.2 RTP Payload Structure | 7.1.2 RTP Payload Structure | |||
The RTP header in the encapsulated packet MUST be followed by the | The RTP header in the encapsulated packet MUST be followed by the | |||
payload header defined in this section. If the received RTP packet | payload header defined in this section. If the received RTP packet | |||
has to be looped back in multiple packets due to fragmentation, the | has to be looped back in multiple packets due to fragmentation, the | |||
RTP header in each packet MUST be followed by the payload header | RTP header in each packet MUST be followed by the payload header | |||
defined in this section. The header is devised so that the | defined in this section. The header is devised so that the | |||
loopback-source can usefully decode looped back packets in the | loopback-source can usefully decode looped back packets in the | |||
presence of moderate packet loss [RFC3550]. | presence of moderate packet loss [RFC3550]. | |||
0 1 2 3 | 0 1 2 3 | |||
skipping to change at page 12, line 22 | skipping to change at page 12, line 48 | |||
loopback-mirror is received from the loopback-source. The Receive | loopback-mirror is received from the loopback-source. The Receive | |||
timestamp MUST be based on the same clock used by the loopback- | timestamp MUST be based on the same clock used by the loopback- | |||
source. The initial value of the timestamp SHOULD be random for | source. The initial value of the timestamp SHOULD be random for | |||
security reasons (see Section 5.1 of RFC 3550 [RFC3550]). | security reasons (see Section 5.1 of RFC 3550 [RFC3550]). | |||
Fragmentation (F): 2 bits | Fragmentation (F): 2 bits | |||
First Fragment (00) /Last Fragment (01) /No Fragmentation(10)/ | First Fragment (00) /Last Fragment (01) /No Fragmentation(10)/ | |||
Intermediate Fragment (11). This field identifies how much of the | Intermediate Fragment (11). This field identifies how much of the | |||
received packet is encapsulated in this packet by the loopback- | received packet is encapsulated in this packet by the loopback- | |||
mirror. If the received packet is not fragmented, this field is set | mirror. If the received packet is not fragmented, this field is | |||
to 10; otherwise the packet that contains the first fragments sets | set to 10; otherwise the packet that contains the first fragments | |||
this field to 00, the packet that contains the last fragment sets | sets this field to 00, the packet that contains the last fragment | |||
this field to 01, all other packets set this field to 11. | sets this field to 01, all other packets set this field to 11. | |||
Reserved: 2 bits | Reserved: 2 bits | |||
This field is reserved for future definition. In the absence of | This field is reserved for future definition. In the absence of | |||
such a definition, the bits in this field MUST be set to zero and | such a definition, the bits in this field MUST be set to zero and | |||
MUST be ignored by the receiver. | MUST be ignored by the receiver. | |||
Any padding octets in the original packet MUST not be included in | Any padding octets in the original packet MUST not be included in | |||
the loopback packet generated by a loopback-mirror. The loopback- | the loopback packet generated by a loopback-mirror. The | |||
mirror MAY add padding octets if required. | loopback-mirror MAY add padding octets if required. | |||
7.3 Usage of SDP | 7.1.3Usage of SDP | |||
The payload type number for the encapsulated stream can be | The payload type number for the encapsulated stream can be | |||
negotiated using a mechanism like SDP. There is no static payload | negotiated using a mechanism like SDP. There is no static payload | |||
type assignment for the encapsulate stream, so dynamic payload type | type assignment for the encapsulated stream, so dynamic payload | |||
numbers MUST be used. The binding to the name is indicated by an | type numbers MUST be used. The binding to the name is indicated by | |||
rtpmap attribute. The name used in this binding is “encaprtp”. | an rtpmap attribute. The name used in this binding is "encaprtp". | |||
The following is an example SDP fragment for encapsulated RTP. | The following is an example SDP fragment for encapsulated RTP. | |||
m=audio 41352 RTP/AVP 112 | m=audio 41352 RTP/AVP 112 | |||
a=rtpmap:112 encaprtp/8000 | a=rtpmap:112 encaprtp/8000 | |||
7.2 Direct loopback RTP payload format | ||||
The direct loopback RTP payload format can be used in scenarios | ||||
where the 16 byte overhead of the encapsulated payload format is | ||||
significant. It MUST not be used in cases where the MTU on the | ||||
loopback path is less than the MTU on the transmit path. When | ||||
using this payload format, the receiver MUST loop back each | ||||
received packet in a separate RTP packet. | ||||
7.2.1 Usage of RTP Header fields | ||||
Payload Type (PT): The assignment of an RTP payload type for this | ||||
packet format is outside the scope of this document; it is either | ||||
specified by the RTP profile under which this payload format is | ||||
used or more likely signaled dynamically out-of-band (e.g., using | ||||
SDP; section 7.3 defines the name binding). | ||||
Marker (M) bit: Set to the value in the received packet. | ||||
Extension (X) bit: Defined by the RTP Profile used. | ||||
Sequence Number: The RTP sequence number SHOULD be generated by the | ||||
loopback-mirror in the usual manner with a constant random offset. | ||||
Timestamp: The RTP timestamp denotes the sampling instant for when | ||||
the loopback-mirror is transmitting this packet to the loopback- | ||||
source. The RTP timestamp MUST based on the same clock used by the | ||||
loopback-source. The initial value of the timestamp SHOULD be | ||||
random for security reasons (see Section 5.1 of RFC 3550 | ||||
[RFC3550]). | ||||
SSRC: set as described in RFC 3550 [RFC3550]. | ||||
CC and CSRC fields are used as described in RFC 3550 [RFC3550]. | ||||
7.2.2 RTP Payload Structure | ||||
This payload format does not define any payload specific headers. | ||||
The loopback-mirror simply copies the payload data from the payload | ||||
portion of the packet received from the loopback-source. | ||||
7.2.3 Usage of SDP | ||||
The payload type number for the payload loopback stream can be | ||||
negotiated using a mechanism like SDP. There is no static payload | ||||
type assignment for the stream, so dynamic payload type numbers | ||||
MUST be used. The binding to the name is indicated by an rtpmap | ||||
attribute. The name used in this binding is "rtploopback". | ||||
The following is an example SDP fragment for encapsulated RTP. | ||||
m=audio 41352 RTP/AVP 112 | ||||
a=rtpmap:112 rtploopback/8000 | ||||
8. RTCP Requirements | 8. RTCP Requirements | |||
The use of the loopback attribute is intended for monitoring of | The use of the loopback attribute is intended for monitoring of | |||
media quality of the session. Consequently the media performance | media quality of the session. Consequently the media performance | |||
information should be exchanged between the offering and the | information should be exchanged between the offering and the | |||
answering entities. An offering or answering entity that is | answering entities. An offering or answering entity that is | |||
compliant to this specification SHOULD support RTCP per [RFC3550] | compliant to this specification SHOULD support RTCP per [RFC3550] | |||
and RTCP-XR per RFC 3611 [RFC3611]. Furthermore, if the client or | and RTCP-XR per RFC 3611 [RFC3611]. Furthermore, if the client or | |||
the server choose to support RTCP-XR, they SHOULD support RTCP-XR | the server choose to support RTCP-XR, they SHOULD support RTCP-XR | |||
Loss RLE report block, Duplicate RLE report block, Statistics | Loss RLE report block, Duplicate RLE report block, Statistics | |||
skipping to change at page 14, line 36 | skipping to change at page 16, line 26 | |||
A client sends an INVITE request with SDP which looks like: | A client sends an INVITE request with SDP which looks like: | |||
v=0 | v=0 | |||
o=user1 2890844526 2890842807 IN IP4 126.16.64.4 | o=user1 2890844526 2890842807 IN IP4 126.16.64.4 | |||
s=Example | s=Example | |||
i=An example session | i=An example session | |||
e=user@example.com | e=user@example.com | |||
c=IN IP4 192.168.0.12/127 | c=IN IP4 192.168.0.12/127 | |||
t=0 0 | t=0 0 | |||
m=audio 49170 RTP/AVP 0 112 | m=audio 49170 RTP/AVP 0 112 113 | |||
a=loopback:rtp-media-loopback rtp-pkt-loopback | a=loopback:rtp-media-loopback rtp-pkt-loopback | |||
a=loopback-source:0 | a=loopback-source:0 | |||
a=rtpmap:112 encaprtp/8000 | a=rtpmap:112 encaprtp/8000 | |||
a=rtpmap:113 rtploopback/8000 | ||||
The client is offering to source the media and expects the server | The client is offering to source the media and expects the server | |||
to mirror the RTP stream at either the media or rtp level. | to mirror the RTP stream at either the media or rtp level. | |||
A server sends a response with SDP which looks like: | A server sends a response with SDP which looks like: | |||
v=0 | v=0 | |||
o=user1 2890844526 2890842807 IN IP4 126.16.64.4 | o=user1 2890844526 2890842807 IN IP4 126.16.64.4 | |||
s=Example | s=Example | |||
i=An example session | i=An example session | |||
skipping to change at page 15, line 10 | skipping to change at page 17, line 4 | |||
o=user1 2890844526 2890842807 IN IP4 126.16.64.4 | o=user1 2890844526 2890842807 IN IP4 126.16.64.4 | |||
s=Example | s=Example | |||
i=An example session | i=An example session | |||
e=user@example.com | e=user@example.com | |||
c=IN IP4 192.168.0.12/127 | c=IN IP4 192.168.0.12/127 | |||
t=0 0 | t=0 0 | |||
m=audio 49170 RTP/AVP 112 | m=audio 49170 RTP/AVP 112 | |||
a=loopback:rtp-pkt-loopback | a=loopback:rtp-pkt-loopback | |||
a=loopback-mirror:0 | a=loopback-mirror:0 | |||
a=rtpmap:112 encaprtp/8000 | a=rtpmap:112 encaprtp/8000 | |||
The server is accepting to mirror the media from the client at the | The server is accepting to mirror the media from the client at the | |||
packet level. | packet level using the encapsulated RTP payload format. | |||
10.3 Offer for choice of media loopback type with rtp-start-loopback | 10.3 Offer for choice of media loopback type with rtp-start-loopback | |||
A client sends an INVITE request with SDP which looks like: | A client sends an INVITE request with SDP which looks like: | |||
v=0 | v=0 | |||
o=user1 2890844526 2890842807 IN IP4 126.16.64.4 | o=user1 2890844526 2890842807 IN IP4 126.16.64.4 | |||
s=Example | s=Example | |||
i=An example session | i=An example session | |||
e=user@example.com | e=user@example.com | |||
c=IN IP4 192.168.0.12/127 | c=IN IP4 192.168.0.12/127 | |||
t=0 0 | t=0 0 | |||
m=audio 49170 RTP/AVP 0 112 | m=audio 49170 RTP/AVP 0 112 113 | |||
a=loopback:rtp-media-loopback rtp-pkt-loopback | a=loopback:rtp-media-loopback rtp-pkt-loopback | |||
a=loopback-source:0 | a=loopback-source:0 | |||
a=rtpmap:112 encaprtp/8000 | a=rtpmap:112 encaprtp/8000 | |||
a=rtpmap:113 rtploopback/8000 | ||||
m=audio 49170 RTP/AVP 100 | m=audio 49170 RTP/AVP 100 | |||
a=loopback:rtp-start-loopback | a=loopback:rtp-start-loopback | |||
The client is offering to source the media and expects the server | The client is offering to source the media and expects the server | |||
to mirror the RTP stream at either the media or rtp level. The | to mirror the RTP stream at either the media or rtp level. The | |||
client also expects the server to source media until it receives | client also expects the server to source media until it receives | |||
packets from the server per media described with the | packets from the server per media described with the | |||
rtp-start-loopback attribute. | rtp-start-loopback attribute. | |||
A server sends a response with SDP which looks like: | A server sends a response with SDP which looks like: | |||
v=0 | v=0 | |||
o=user1 2890844526 2890842807 IN IP4 126.16.64.4 | o=user1 2890844526 2890842807 IN IP4 126.16.64.4 | |||
s=Example | s=Example | |||
i=An example session | i=An example session | |||
e=user@example.com | e=user@example.com | |||
c=IN IP4 192.168.0.12/127 | c=IN IP4 192.168.0.12/127 | |||
t=0 0 | t=0 0 | |||
m=audio 49170 RTP/AVP 112 | m=audio 49170 RTP/AVP 113 | |||
a=loopback:rtp-pkt-loopback | a=loopback:rtp-pkt-loopback | |||
a=loopback-mirror:0 | a=loopback-mirror:0 | |||
a=rtpmap:112 encaprtp/8000 | a=rtpmap:113 rtploopback/8000 | |||
m=audio 49170 RTP/AVP 100 | m=audio 49170 RTP/AVP 100 | |||
a=rtpmap:100 pcmu/8000 | a=rtpmap:100 pcmu/8000 | |||
a=loopback:rtp-start-loopback | a=loopback:rtp-start-loopback | |||
The server is accepting to mirror the media from the client at the | The server is accepting to mirror the media from the client at the | |||
packet level. The server is also accepting to source media until | packet level using the direct loopback RTP payload format. The | |||
it receives media packets from the client. | server is also accepting to source media until it receives media | |||
packets from the client. | ||||
10.4 Response to INVITE request rejecting loopback media | 10.4 Response to INVITE request rejecting loopback media | |||
A client sends an INVITE request with SDP which looks like: | A client sends an INVITE request with SDP which looks like: | |||
v=0 | v=0 | |||
o=user1 2890844526 2890842807 IN IP4 126.16.64.4 | o=user1 2890844526 2890842807 IN IP4 126.16.64.4 | |||
s=Example | s=Example | |||
i=An example session | i=An example session | |||
e=user@example.com | e=user@example.com | |||
skipping to change at page 18, line 40 | skipping to change at page 20, line 37 | |||
[RFC3550] Schulzrinne, H., Casner, S., Frederick, R. and V. | [RFC3550] Schulzrinne, H., Casner, S., Frederick, R. and V. | |||
Jacobson, "RTP: A Transport Protocol for Real-Time | Jacobson, "RTP: A Transport Protocol for Real-Time | |||
Applications", STD 64, RFC 3550, July 2003. | Applications", STD 64, RFC 3550, July 2003. | |||
[RFC3611] Almeroth, K., Caceres, R., Clark, A., Cole, R., | [RFC3611] Almeroth, K., Caceres, R., Clark, A., Cole, R., | |||
Duffield, N., Friedman, T., Hedayat, K., Sarac, K. | Duffield, N., Friedman, T., Hedayat, K., Sarac, K. | |||
and M. Westerlund, "RTP Control Protocol Extended | and M. Westerlund, "RTP Control Protocol Extended | |||
Reports (RTCP XR)", RFC 3611, November 2003. | Reports (RTCP XR)", RFC 3611, November 2003. | |||
[RFC2234] Crocker, P. Overell, "Augmented ABNF for Syntax | [RFC2234] Crocker, P. Overell, "Augmented ABNF for Syntax | |||
Specification: ABNF”, RFC 2234, November 1997. | Specification: ABNF", RFC 2234, November 1997. | |||
[RFC2119] Bradner, S.,"Key words for use in RFCs to Indicate | [RFC2119] Bradner, S.,"Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[RFC2736] Handley, M., Perkins, C., "Guidelines for Writers of | [RFC2736] Handley, M., Perkins, C., "Guidelines for Writers of | |||
RTP Payload Format Specifications”, RFC 2736, BCP | RTP Payload Format Specifications", RFC 2736, BCP | |||
0036, December 1999. | 0036, December 1999. | |||
[RFC3551] Schulzrinne, H., Casner, S., "RTP Profile for Audio | [RFC3551] Schulzrinne, H., Casner, S., "RTP Profile for Audio | |||
and Video Conferences with Minimial Control”, STD 65, | and Video Conferences with Minimial Control", STD 65, | |||
RFC 3551, July 2003. | RFC 3551, July 2003. | |||
[RFC4566] Handley, M., Jacobson, V., Perkins, C., "SDP: Session | [RFC4566] Handley, M., Jacobson, V., Perkins, C., "SDP: Session | |||
Description Protocol”, RFC 4566, July 2006. | Description Protocol", RFC 4566, July 2006. | |||
Authors' Addresses | Authors' Addresses | |||
Kaynam Hedayat | Kaynam Hedayat | |||
Brix Networks | Brix Networks | |||
285 Mill Road | 285 Mill Road | |||
Chelmsford, MA 01824 | Chelmsford, MA 01824 | |||
US | US | |||
Phone: +1 978 367 5611 | Phone: +1 978 367 5611 | |||
End of changes. 43 change blocks. | ||||
89 lines changed or deleted | 174 lines changed or added | |||
This html diff was produced by rfcdiff 1.33. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |