RTP Forwarding

From Yate Documentation
(Difference between revisions)
Jump to: navigation, search
(SIP to SIP raw SDP forwarding)
m
 
(12 intermediate revisions by 2 users not shown)
Line 1: Line 1:
  
The incoming call module must set the following in the "call.route" message:
+
Yate supports RTP forwarding and SDP forwarding (currently only in SIP).<br/>
 +
RTP forwarding allows Yate to handle more calls per second since the media goes directly between the endpoints, while SDP forwarding allows sending any media type or codec, even those not understood by Yate.<br/>
 +
 
 +
Below is a image for how a call with RTP forward from a H323 endpoint to a SIP endpoint.<br/>
 +
[[File:yate_h323toSIP.png]]
 +
 
 +
This page describes the flow of messages that deal with RTP forwarding and how to enable SDP forwarding.
 +
 
 +
=== How RTP forwarding works in Yate===
 +
 
 +
====[[call.route]]====
 +
The incoming call module must set the following in the "[[call.route]]" message:
 
     rtp_forward=possible
 
     rtp_forward=possible
 
     rtp_addr=a.b.c.d
 
     rtp_addr=a.b.c.d
Line 11: Line 22:
 
     rtp_forward=yes (or true or enabled)
 
     rtp_forward=yes (or true or enabled)
  
Later the same message becomes "call.execute" and is received by the call target module.
+
====[[call.execute]]====
 +
 
 +
Later the same message becomes "[[call.execute]]" and is received by the call target module.
  
If it can handle RTP forwarding the module will check if '''rtp_forward''' holds a boolean True value. If it does, it picks parameters form '''rtp_addr''', '''rtp_port''', '''formats''' and '''format'''. If these values were acceptable it must set
+
If it can handle RTP forwarding the module will check if '''rtp_forward''' holds a boolean True value. If it does, it picks parameters form '''rtp_addr''', '''rtp_port''', '''formats''' and '''format'''. If these values were acceptable it must set:
  
 
     rtp_forward=accepted
 
     rtp_forward=accepted
  
When the "call.execute" returns the caller module can check if the target accepted the RTP forwarding. If the target did not accept it the module should enable its own RTP with data source and/or consumer or fail the call.
+
When the "[[call.execute]]" returns the caller module can check if the target accepted the RTP forwarding. If the target did not accept it the module should enable its own RTP with data source and/or consumer or fail the call.
  
The called module must set its incoming RTP parameters in the "call.progress","call.ringing" or the latest in the "call.answered" message:
+
The called module must set its incoming RTP parameters in the "[[call.progress]]","[[call.ringing]]" or the latest in the "[[call.answered]]" message:
 
     rtp_forward=yes
 
     rtp_forward=yes
 
     rtp_addr=a.b.c.d
 
     rtp_addr=a.b.c.d

Latest revision as of 11:20, 13 August 2013

Yate supports RTP forwarding and SDP forwarding (currently only in SIP).
RTP forwarding allows Yate to handle more calls per second since the media goes directly between the endpoints, while SDP forwarding allows sending any media type or codec, even those not understood by Yate.

Below is a image for how a call with RTP forward from a H323 endpoint to a SIP endpoint.
Yate h323toSIP.png

This page describes the flow of messages that deal with RTP forwarding and how to enable SDP forwarding.

Contents

[edit] How RTP forwarding works in Yate

[edit] call.route

The incoming call module must set the following in the "call.route" message:

   rtp_forward=possible
   rtp_addr=a.b.c.d
   rtp_port=nnnn
   formats=codec1,codec2,...
   format=preferred_codec (optional)

The router module looks for rtp_forward=possible and turns it into

   rtp_forward=yes (or true or enabled)

[edit] call.execute

Later the same message becomes "call.execute" and is received by the call target module.

If it can handle RTP forwarding the module will check if rtp_forward holds a boolean True value. If it does, it picks parameters form rtp_addr, rtp_port, formats and format. If these values were acceptable it must set:

   rtp_forward=accepted

When the "call.execute" returns the caller module can check if the target accepted the RTP forwarding. If the target did not accept it the module should enable its own RTP with data source and/or consumer or fail the call.

The called module must set its incoming RTP parameters in the "call.progress","call.ringing" or the latest in the "call.answered" message:

   rtp_forward=yes
   rtp_addr=a.b.c.d
   rtp_port=nnnn
   formats=codec1,codec2,...
   format=preferred_codec (optional)

[edit] SIP to SIP raw SDP forwarding

If direct RTP forwarding is used between two SDP capable protocols (currently only SIP) there is the possibility to forward the full SDP between the call legs. This allows sending any media type or codec, even those not understood by Yate.

This is enabled in the ysipchan.conf file by setting:

   [general]
   forward_sdp=yes

The effect of this configuration is that the raw text of the SDP body is included in "call.route" as the sdp_raw parameter.

Further control is possible from routing, so in "call.execute" there are the following possibilities:

  • rtp_forward is not true -> no RTP forwarding, use local RTP
  • rtp_forward is true, sdp_raw is empty or missing -> RTP forwarding as above
  • rtp_forward is true, sdp_raw is not empty -> the content of sdp_raw is included as outgoing SDP


See also

Personal tools
Namespaces

Variants
Actions
Preface
Configuration
Administrators
Developers