139 lines
4.2 KiB
C++
139 lines
4.2 KiB
C++
#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_ */
|