stream-deploy/ZLM/3rdpart/media-server/librtsp/include/rtsp-header-transport.h

76 lines
2.3 KiB
C++

#ifndef _rtsp_header_transport_h_
#define _rtsp_header_transport_h_
#ifdef __cplusplus
extern "C" {
#endif
enum {
RTSP_TRANSPORT_UNICAST = 1,
RTSP_TRANSPORT_MULTICAST,
};
// transport
enum {
RTSP_TRANSPORT_RTP_UDP = 1,
RTSP_TRANSPORT_RTP_TCP,
RTSP_TRANSPORT_RAW,
};
// transport mode
enum {
RTSP_TRANSPORT_PLAY = 1,
RTSP_TRANSPORT_RECORD
};
// Transport: RTP/AVP/TCP;interleaved=0-1
// Transport: RTP/AVP;unicast;client_port=4588-4589;server_port=6256-6257
// Transport: RTP/AVP;multicast;destination=224.2.0.1;port=3456-3457;ttl=16
struct rtsp_header_transport_t
{
int transport; // RTSP_TRANSPORT_xxx
int multicast; // 0-unicast/1-multicast, default multicast
char destination[65]; // IPv4/IPv6
char source[65]; // IPv4/IPv6
int layer; // rtsp setup response only
int mode; // PLAY/RECORD, default PLAY, rtsp setup response only
int append; // use with RECORD mode only, rtsp setup response only
int interleaved1, interleaved2; // rtsp setup response only
union rtsp_header_transport_rtp_u
{
struct rtsp_header_transport_multicast_t
{
int ttl; // multicast only
unsigned short port1, port2; // multicast only
} m;
struct rtsp_header_transport_unicast_t
{
unsigned short client_port1, client_port2; // unicast RTP/RTCP port pair, RTP only
unsigned short server_port1, server_port2; // unicast RTP/RTCP port pair, RTP only
unsigned int ssrc; // RTP only(synchronization source (SSRC) identifier) 4-bytes
} u;
} rtp;
};
/// parse RTSP Transport header
/// @return 0-ok, other-error
/// usage 1:
/// struct rtsp_header_transport_t transport;
/// const char* header = "Transport: RTP/AVP;unicast;client_port=4588-4589;server_port=6256-6257";
/// r = rtsp_header_transport("RTP/AVP;unicast;client_port=4588-4589;server_port=6256-6257", &transport);
/// check(r)
///
/// usage 2:
/// const char* header = "Transport: RTP/AVP;unicast;client_port=4588-4589;server_port=6256-6257,RTP/AVP;unicast;client_port=5000-5001;server_port=6000-6001";
/// split(header, ',');
/// r1 = rtsp_header_transport("RTP/AVP;unicast;client_port=4588-4589;server_port=6256-6257", &transport);
/// r2 = rtsp_header_transport("RTP/AVP;unicast;client_port=5000-5001;server_port=6000-6001", &transport);
/// check(r1, r2)
int rtsp_header_transport(const char* field, struct rtsp_header_transport_t* transport);
#ifdef __cplusplus
}
#endif
#endif /* !_rtsp_header_transport_h_ */