|
- #ifndef _rtp_h_
- #define _rtp_h_
-
- #include <stdint.h>
- #include "rtcp-header.h"
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- struct rtcp_msg_t
- {
- int type;
- uint32_t ssrc; // rtcp message sender
-
- union rtcp_msg_u
- {
- // type = RTCP_SR
- rtcp_rb_t sr;
-
- // type = RTCP_SR
- rtcp_rb_t rr;
-
- // type = RTCP_SDES
- rtcp_sdes_item_t sdes;
-
- // type = RTCP_BYE
- rtcp_bye_t bye;
-
- // type = RTCP_APP
- rtcp_app_t app;
-
- // type = RTCP_RTPFB | (RTCP_RTPFB_NACK << 8)
- rtcp_rtpfb_t rtpfb;
-
- // type = RTCP_PSFB | (RTCP_PSFB_PLI << 8)
- rtcp_psfb_t psfb;
-
- // type = RTCP_XR | (RTCP_XR_DLRR << 8)
- rtcp_xr_t xr;
- } u;
- };
-
- struct rtp_event_t
- {
- void (*on_rtcp)(void* param, const struct rtcp_msg_t* msg);
- };
-
- /// @param[in] ssrc RTP SSRC
- /// @param[in] timestamp base timestamp
- /// @param[in] frequence RTP frequence
- /// @param[in] bandwidth in byte
- /// @param[in] sender 1-rtp sender(SR), 0-rtp receiver(RR)
- void* rtp_create(struct rtp_event_t *handler, void* param, uint32_t ssrc, uint32_t timestamp, int frequence, int bandwidth, int sender);
- int rtp_destroy(void* rtp);
-
- /// RTP send notify
- /// @param[in] rtp RTP object
- /// @param[in] data RTP packet(include RTP Header)
- /// @param[in] bytes RTP packet size in byte
- /// @return 0-ok, <0-error
- int rtp_onsend(void* rtp, const void* data, int bytes);
-
- /// RTP receive notify
- /// @param[in] rtp RTP object
- /// @param[in] data RTP packet(include RTP Header)
- /// @param[in] bytes RTP packet size in byte
- /// @return 1-ok, 0-rtp packet ok, seq disorder, <0-error
- int rtp_onreceived(void* rtp, const void* data, int bytes);
-
- /// received RTCP packet
- /// @param[in] rtp RTP object
- /// @param[in] rtcp RTCP packet(include RTCP Header)
- /// @param[in] bytes RTCP packet size in byte
- /// @return 0-ok, <0-error
- int rtp_onreceived_rtcp(void* rtp, const void* rtcp, int bytes);
-
- /// create RTCP Report(SR/RR) packet
- /// @param[in] rtp RTP object
- /// @param[out] rtcp RTCP packet(include RTCP Header)
- /// @param[in] bytes RTCP packet size in byte
- /// @return 0-error, >0-rtcp package size(maybe need call more times)
- int rtp_rtcp_report(void* rtp, void* rtcp, int bytes);
-
- /// create RTCP BYE packet
- /// @param[in] rtp RTP object
- /// @param[out] rtcp RTCP packet(include RTCP Header)
- /// @param[in] bytes RTCP packet size in byte
- /// @return 0-error, >0-rtcp package size(maybe need call more times)
- int rtp_rtcp_bye(void* rtp, void* rtcp, int bytes);
-
- /// create RTCP APP packet
- /// @param[in] rtp RTP object
- /// @param[out] rtcp RTCP packet(include RTCP Header)
- /// @param[in] bytes RTCP packet size in byte
- /// @return 0-error, >0-rtcp package size(maybe need call more times)
- int rtp_rtcp_app(void* rtp, void* rtcp, int bytes, const char name[4], const void* app, int len);
-
- /// create RTCP RTPFB packet
- /// @param[in] rtp RTP object
- /// @param[out] data RTCP packet(include RTCP Header)
- /// @param[in] bytes RTCP packet size in byte
- /// @param[in] id FMT Values for RTPFB Payload Types
- /// @param[in] rtpfb RTPFB info
- /// @return 0-error, >0-rtcp package size(maybe need call more times)
- int rtp_rtcp_rtpfb(void* rtp, void* data, int bytes, enum rtcp_rtpfb_type_t id, const rtcp_rtpfb_t *rtpfb);
-
- /// create RTCP PSFB packet
- /// @param[in] rtp RTP object
- /// @param[out] rtcp RTCP packet(include RTCP Header)
- /// @param[in] bytes RTCP packet size in byte
- /// @param[in] id FMT Values for PSFB Payload Types
- /// @param[in] psfb PSFB info
- /// @return 0-error, >0-rtcp package size(maybe need call more times)
- int rtp_rtcp_psfb(void* rtp, void* data, int bytes, enum rtcp_psfb_type_t id, const rtcp_psfb_t* psfb);
-
- /// create RTCP XR packet
- /// @param[in] rtp RTP object
- /// @param[out] data RTCP packet(include RTCP Header)
- /// @param[in] bytes RTCP packet size in byte
- /// @param[in] id FMT Values for XR Payload Types
- /// @param[in] xr XR info
- /// @return 0-error, >0-rtcp package size(maybe need call more times)
- int rtp_rtcp_xr(void* rtp, void* data, int bytes, enum rtcp_xr_type_t id, const rtcp_xr_t* xr);
-
- /// get RTCP interval
- /// @param[in] rtp RTP object
- /// 0-ok, <0-error
- int rtp_rtcp_interval(void* rtp);
-
- const char* rtp_get_cname(void* rtp, uint32_t ssrc);
- const char* rtp_get_name(void* rtp, uint32_t ssrc);
- int rtp_set_info(void* rtp, const char* cname, const char* name);
-
- #ifdef __cplusplus
- }
- #endif
- #endif /* !_rtp_h_ */
|