diff options
Diffstat (limited to 'pjmedia/include')
-rw-r--r-- | pjmedia/include/pjmedia/config.h | 10 | ||||
-rw-r--r-- | pjmedia/include/pjmedia/errno.h | 7 | ||||
-rw-r--r-- | pjmedia/include/pjmedia/sdp.h | 26 | ||||
-rw-r--r-- | pjmedia/include/pjmedia/stream.h | 3 | ||||
-rw-r--r-- | pjmedia/include/pjmedia/transport.h | 9 |
5 files changed, 53 insertions, 2 deletions
diff --git a/pjmedia/include/pjmedia/config.h b/pjmedia/include/pjmedia/config.h index 4533c0f4..f4bfeae4 100644 --- a/pjmedia/include/pjmedia/config.h +++ b/pjmedia/include/pjmedia/config.h @@ -155,6 +155,16 @@ /** + * Support for sending and decoding RTCP port in SDP (RFC 3605). + * Default is yes. + */ +#ifndef PJMEDIA_HAS_RTCP_IN_SDP +# define PJMEDIA_HAS_RTCP_IN_SDP 1 +#endif + + + +/** * @} */ diff --git a/pjmedia/include/pjmedia/errno.h b/pjmedia/include/pjmedia/errno.h index a78ed131..c9c6bae2 100644 --- a/pjmedia/include/pjmedia/errno.h +++ b/pjmedia/include/pjmedia/errno.h @@ -140,9 +140,14 @@ PJ_BEGIN_DECL #define PJMEDIA_SDP_EINPT (PJMEDIA_ERRNO_START+33) /* 220033 */ /** * @hideinitializer - * Invalid fmtp attribute. + * Invalid SDP "fmtp" attribute. */ #define PJMEDIA_SDP_EINFMTP (PJMEDIA_ERRNO_START+34) /* 220034 */ +/** + * @hideinitializer + * Invalid SDP "rtcp" attribute. + */ +#define PJMEDIA_SDP_EINRTCP (PJMEDIA_ERRNO_START+35) /* 220035 */ /************************************************************ diff --git a/pjmedia/include/pjmedia/sdp.h b/pjmedia/include/pjmedia/sdp.h index 2bc43bb2..08a11203 100644 --- a/pjmedia/include/pjmedia/sdp.h +++ b/pjmedia/include/pjmedia/sdp.h @@ -293,6 +293,32 @@ PJ_DECL(pj_status_t) pjmedia_sdp_attr_get_fmtp(const pjmedia_sdp_attr *attr, pjmedia_sdp_fmtp *fmtp); +/** + * This structure describes SDP \a rtcp attribute. + */ +typedef struct pjmedia_sdp_rtcp_attr +{ + unsigned port; /**< RTCP port number. */ + pj_str_t net_type; /**< Optional network type. */ + pj_str_t addr_type; /**< Optional address type. */ + pj_str_t addr; /**< Optional address. */ +} pjmedia_sdp_rtcp_attr; + + +/** + * Parse a generic SDP attribute to get SDP rtcp attribute values. + * + * @param attr Generic attribute to be converted to rtcp, which + * name must be "rtcp". + * @param rtcp SDP rtcp attribute to be initialized. + * + * @return PJ_SUCCESS on success. + */ +PJ_DECL(pj_status_t) pjmedia_sdp_attr_get_rtcp(const pjmedia_sdp_attr *attr, + pjmedia_sdp_rtcp_attr *rtcp); + + + /* ************************************************************************** * SDP CONNECTION INFO **************************************************************************** diff --git a/pjmedia/include/pjmedia/stream.h b/pjmedia/include/pjmedia/stream.h index c487d8c2..7a02b72a 100644 --- a/pjmedia/include/pjmedia/stream.h +++ b/pjmedia/include/pjmedia/stream.h @@ -91,6 +91,9 @@ struct pjmedia_stream_info pjmedia_type type; /**< Media type (audio, video) */ pjmedia_dir dir; /**< Media direction. */ pj_sockaddr_in rem_addr; /**< Remote RTP address */ + pj_sockaddr_in rem_rtcp; /**< Optional remote RTCP address. If + sin_family is zero, the RTP address + will be calculated from RTP. */ pjmedia_codec_info fmt; /**< Incoming codec format info. */ pjmedia_codec_param *param; /**< Optional codec param. */ unsigned tx_pt; /**< Outgoing codec paylaod type. */ diff --git a/pjmedia/include/pjmedia/transport.h b/pjmedia/include/pjmedia/transport.h index f1d38a90..d50db4be 100644 --- a/pjmedia/include/pjmedia/transport.h +++ b/pjmedia/include/pjmedia/transport.h @@ -73,6 +73,7 @@ struct pjmedia_transport_op pj_status_t (*attach)(pjmedia_transport *tp, void *user_data, const pj_sockaddr_t *rem_addr, + const pj_sockaddr_t *rem_rtcp, unsigned addr_len, void (*rtp_cb)(void *user_data, const void *pkt, @@ -154,6 +155,10 @@ struct pjmedia_transport * @param user_data Arbitrary user data to be set when the callbacks are * called. * @param rem_addr Remote RTP address to send RTP packet to. + * @param rem_rtcp Optional remote RTCP address. If the argument is NULL + * or if the address is zero, the RTCP address will be + * calculated from the RTP address (which is RTP port + * plus one). * @param addr_len Length of the remote address. * @param rtp_cb Callback to be called when RTP packet is received on * the transport. @@ -165,6 +170,7 @@ struct pjmedia_transport PJ_INLINE(pj_status_t) pjmedia_transport_attach(pjmedia_transport *tp, void *user_data, const pj_sockaddr_t *rem_addr, + const pj_sockaddr_t *rem_rtcp, unsigned addr_len, void (*rtp_cb)(void *user_data, const void *pkt, @@ -173,7 +179,8 @@ PJ_INLINE(pj_status_t) pjmedia_transport_attach(pjmedia_transport *tp, const void*pkt, pj_ssize_t)) { - return tp->op->attach(tp, user_data, rem_addr, addr_len, rtp_cb, rtcp_cb); + return tp->op->attach(tp, user_data, rem_addr, rem_rtcp, addr_len, + rtp_cb, rtcp_cb); } |