|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- #ifndef _rtsp_media_h_
- #define _rtsp_media_h_
-
- #include "rtsp-header-range.h"
-
- #if defined(__cplusplus)
- extern "C" {
- #endif
-
- // RFC4585 Extended RTP Profile for Real-time Transport Control Protocol (RTCP)-Based Feedback (RTP/AVPF)
- // RFC5104 Codec Control Messages in the RTP Audio-Visual Profile with Feedback (AVPF)
- struct rtsp_fb_t
- {
- int fb_id;
- int trr_int;
- char ack[8]; // rpsi,app
- char nack[8]; // pli,sli,rpsi,app
- char ccm[8]; // fir,tmmbr,tstr,vbcm
- };
-
- // RFC3611 RTP Control Protocol Extended Reports (RTCP XR)
- struct rtsp_xr_t
- {
- int loss; // pkt-loss-rle
- int dup; // pkt-dup-rle
- int rcpt_times; // pkt-rcpt-times
- int rcvr_rtt;
- int rcvr_rtt_mode; // 0-sender, 1-all
- int stat_summary; // 0x01-loss, 0x02-dup, 0x04-jitt, 0x08-TTL
- int voip_metrics;
- };
-
- // rfc 5576
- struct sdp_ssrc_t
- {
- uint32_t ssrc;
-
- // TODO:
- // ssrc attribute(s)
- // multiple ssrc
- // ssrc-group
- };
-
- struct sdp_candidate_t
- {
- char foundation[33];
- char transport[8]; // UDP
- char candtype[8];
- uint16_t component; // rtp/rtcp component id, [1, 256]
- uint16_t port;
- uint32_t priority; // [1, 2**31 - 1]
- char address[65];
- char reladdr[65];
- uint16_t relport;
- };
-
- // https://tools.ietf.org/html/draft-ietf-mmusic-ice-sip-sdp-39
- // https://www.tech-invite.com/fo-abnf/tinv-fo-abnf-sdpatt-rfc5245.html
- // a=candidate:3 1 UDP 1862270847 10.95.49.227 63259 typ prflx raddr 192.168.137.93 rport 7078
- struct sdp_ice_t
- {
- char *pwd; // [22,256]
- char *ufrag; // [4, 256]
- int lite;
- int pacing;
- int mismatch;
-
- struct sdp_candidate_t *candidates[64];
- struct sdp_candidate_t *remotes[64];
- int candidate_count;
- int remote_count;
- };
-
- struct rtsp_media_t
- {
- char uri[256]; // rtsp setup url
- char session_uri[256]; // rtsp session url(aggregate control url), empty if non-aggregate control
-
- //unsigned int cseq; // rtsp sequence, unused if aggregate control available
- int64_t start, stop; // sdp t: NTP time since 1900
- char network[16], addrtype[16], address[64], source[64]; // sdp c: connection, address: unicast-source address, mulitcast-multicast address(RFC4566 4.1. Media and Transport Information)
- struct rtsp_header_range_t range;
-
- char media[32]; //audio, video, text, application, message
- char proto[64]; // udp, RTP/AVP, RTP/SAVP, RTP/AVPF
- int nport, port[8]; // rtcp-mux: port[0] == port[1]
- int mode; // SDP_A_SENDRECV/SDP_A_SENDONLY/SDP_A_RECVONLY/SDP_A_INACTIVE, @sdp.h
- int setup; // SDP_A_SETUP_ACTPASS/SDP_A_SETUP_ACTIVE/SDP_A_SETUP_PASSIVE, @sdp-utils.h
-
- int avformat_count;
- struct avformat_t
- {
- int fmt; // RTP payload type
- int rate; // RTP payload frequency
- int channel; // RTP payload channel
- char encoding[64]; // RTP payload encoding
- char *fmtp; // RTP fmtp value
- struct rtsp_fb_t fb;
- } avformats[16];
-
- struct rtsp_xr_t xr;
- struct sdp_ice_t ice;
- struct sdp_ssrc_t ssrc; // rfc 5576
-
- int offset;
- char ptr[8 * 1024]; // RTP fmtp value
- };
-
- /// @return <0-error, >count-try again, other-ok
- int rtsp_media_sdp(const char* sdp, int len, struct rtsp_media_t* medias, int count);
-
- /// Update session and media control url
- /// @param[in] base The RTSP Content-Base field
- /// @param[in] location The RTSP Content-Location field
- /// @param[in] request The RTSP request URL
- /// return 0-ok, other-error
- int rtsp_media_set_url(struct rtsp_media_t* media, const char* base, const char* location, const char* request);
-
- /// create media sdp
- /// @return -0-no media, >0-ok, <0-error
- int rtsp_media_to_sdp(const struct rtsp_media_t* m, char* line, int bytes);
-
- #if defined(__cplusplus)
- }
- #endif
- #endif /* !_rtsp_media_h_ */
|