ASCI: Add new mode for voice group/broadcast call
The new mode "confecho" is similar to "sendrecv", except that it also echoes back RTP towards the sender. This is required for voice group or broadcast calls. Talker and listeners use the same timeslot, so that audio must be echoed from the talker to the listeners. It is different from "loopback", because a loopback only echoes back RTP towards the sender, but does not forward audio through the endpoint to the other connections. Also it does not forward RTP from senders of other connections. The current implementation of MGW does not support transcoding and mixing. This means that a sending connection must not send RTP that has been received by multiple receiving connections. The application that uses the MGW has to set the connection modes, so that only one connection receives RTP in case of a conference. Change-Id: I0639c663e119d85bef1010c7aa45e2f133a9daf0 Related: OS#4853changes/46/33546/3
parent
c364f4ab5a
commit
dc7dfd0bbd
|
@ -47,6 +47,7 @@ enum mgcp_connection_mode {
|
|||
MGCP_CONN_SEND_ONLY = 2,
|
||||
MGCP_CONN_RECV_SEND = MGCP_CONN_RECV_ONLY | MGCP_CONN_SEND_ONLY,
|
||||
MGCP_CONN_LOOPBACK = 4 | MGCP_CONN_RECV_SEND,
|
||||
MGCP_CONN_CONFECHO = 8 | MGCP_CONN_RECV_SEND,
|
||||
};
|
||||
|
||||
#define MGCP_X_OSMO_IGN_HEADER "X-Osmo-IGN:"
|
||||
|
|
|
@ -1548,6 +1548,7 @@ const struct value_string mgcp_client_connection_mode_strs[] = {
|
|||
{ MGCP_CONN_RECV_SEND, "sendrecv" },
|
||||
{ MGCP_CONN_SEND_ONLY, "sendonly" },
|
||||
{ MGCP_CONN_RECV_ONLY, "recvonly" },
|
||||
{ MGCP_CONN_CONFECHO, "confecho" },
|
||||
{ MGCP_CONN_LOOPBACK, "loopback" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
|
|
@ -75,7 +75,7 @@ void mgcp_disp_msg(unsigned char *message, unsigned int len, char *preamble)
|
|||
}
|
||||
|
||||
/*! Parse connection mode.
|
||||
* \param[in] mode as string (recvonly, sendrecv, sendonly or loopback)
|
||||
* \param[in] mode as string (recvonly, sendrecv, sendonly confecho or loopback)
|
||||
* \param[in] endp pointer to endpoint (only used for log output)
|
||||
* \param[out] associated connection to be modified accordingly
|
||||
* \returns 0 on success, -1 on error */
|
||||
|
@ -100,6 +100,8 @@ int mgcp_parse_conn_mode(const char *mode, struct mgcp_endpoint *endp,
|
|||
conn->mode = MGCP_CONN_RECV_SEND;
|
||||
else if (strcasecmp(mode, "sendonly") == 0)
|
||||
conn->mode = MGCP_CONN_SEND_ONLY;
|
||||
else if (strcasecmp(mode, "confecho") == 0)
|
||||
conn->mode = MGCP_CONN_CONFECHO;
|
||||
else if (strcasecmp(mode, "loopback") == 0)
|
||||
conn->mode = MGCP_CONN_LOOPBACK;
|
||||
else {
|
||||
|
|
Loading…
Reference in New Issue