55 #define READ_PACKET_TIMEOUT_S 10 56 #define RECVBUF_SIZE 10 * RTP_MAX_PACKET_LENGTH 57 #define DEFAULT_REORDERING_DELAY 100000 59 #define OFFSET(x) offsetof(RTSPState, x) 60 #define DEC AV_OPT_FLAG_DECODING_PARAM 61 #define ENC AV_OPT_FLAG_ENCODING_PARAM 63 #define RTSP_FLAG_OPTS(name, longname) \ 64 { name, longname, OFFSET(rtsp_flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, INT_MIN, INT_MAX, DEC, "rtsp_flags" }, \ 65 { "filter_src", "only receive packets from the negotiated peer IP", 0, AV_OPT_TYPE_CONST, {.i64 = RTSP_FLAG_FILTER_SRC}, 0, 0, DEC, "rtsp_flags" } 67 #define RTSP_MEDIATYPE_OPTS(name, longname) \ 68 { name, longname, OFFSET(media_type_mask), AV_OPT_TYPE_FLAGS, { .i64 = (1 << (AVMEDIA_TYPE_SUBTITLE+1)) - 1 }, INT_MIN, INT_MAX, DEC, "allowed_media_types" }, \ 69 { "video", "Video", 0, AV_OPT_TYPE_CONST, {.i64 = 1 << AVMEDIA_TYPE_VIDEO}, 0, 0, DEC, "allowed_media_types" }, \ 70 { "audio", "Audio", 0, AV_OPT_TYPE_CONST, {.i64 = 1 << AVMEDIA_TYPE_AUDIO}, 0, 0, DEC, "allowed_media_types" }, \ 71 { "data", "Data", 0, AV_OPT_TYPE_CONST, {.i64 = 1 << AVMEDIA_TYPE_DATA}, 0, 0, DEC, "allowed_media_types" }, \ 72 { "subtitle", "Subtitle", 0, AV_OPT_TYPE_CONST, {.i64 = 1 << AVMEDIA_TYPE_SUBTITLE}, 0, 0, DEC, "allowed_media_types" } 74 #define COMMON_OPTS() \ 75 { "reorder_queue_size", "set number of packets to buffer for handling of reordered packets", OFFSET(reordering_queue_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, DEC }, \ 76 { "buffer_size", "Underlying protocol send/receive buffer size", OFFSET(buffer_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, DEC|ENC }, \ 77 { "pkt_size", "Underlying protocol send packet size", OFFSET(pkt_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, ENC } \ 81 {
"initial_pause",
"do not start playing the stream immediately",
OFFSET(initial_pause),
AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1,
DEC },
83 {
"rtsp_transport",
"set RTSP transport protocols",
OFFSET(lower_transport_mask),
AV_OPT_TYPE_FLAGS, {.i64 = 0}, INT_MIN, INT_MAX,
DEC|
ENC,
"rtsp_transport" }, \
91 {
"prefer_tcp",
"try RTP via TCP first, if available", 0,
AV_OPT_TYPE_CONST, {.i64 =
RTSP_FLAG_PREFER_TCP}, 0, 0,
DEC|
ENC,
"rtsp_flags" },
96 {
"listen_timeout",
"set maximum timeout (in seconds) to wait for incoming connections (-1 is infinite, imply flag listen)",
OFFSET(initial_timeout),
AV_OPT_TYPE_INT, {.i64 = -1}, INT_MIN, INT_MAX,
DEC },
97 #if FF_API_OLD_RTSP_OPTIONS 98 {
"timeout",
"set maximum timeout (in seconds) to wait for incoming connections (-1 is infinite, imply flag listen) (deprecated, use listen_timeout)",
OFFSET(initial_timeout),
AV_OPT_TYPE_INT, {.i64 = -1}, INT_MIN, INT_MAX, DEC|
AV_OPT_FLAG_DEPRECATED },
99 {
"stimeout",
"set timeout (in microseconds) of socket TCP I/O operations",
OFFSET(stimeout),
AV_OPT_TYPE_INT, {.i64 = 0}, INT_MIN, INT_MAX, DEC },
101 {
"timeout",
"set timeout (in microseconds) of socket TCP I/O operations",
OFFSET(stimeout),
AV_OPT_TYPE_INT, {.i64 = 0}, INT_MIN, INT_MAX, DEC },
105 #if FF_API_OLD_RTSP_OPTIONS 144 const char *sep,
const char **pp)
152 while (!strchr(sep, *p) && *p !=
'\0') {
153 if ((q - buf) < buf_size - 1)
165 if (**pp ==
'/') (*pp)++;
169 static void get_word(
char *buf,
int buf_size,
const char **pp)
213 memcpy(sock, ai->ai_addr,
FFMIN(
sizeof(*sock), ai->ai_addrlen));
280 finalize_rtp_handler_init(s, rtsp_st,
NULL);
288 int payload_type,
const char *p)
310 init_rtp_handler(handler, rtsp_st, st);
320 if (desc && desc->
name)
353 finalize_rtp_handler_init(s, rtsp_st, st);
361 char *
value,
int value_size)
376 typedef struct SDPParseState {
381 int nb_default_include_source_addrs;
382 struct RTSPSource **default_include_source_addrs;
383 int nb_default_exclude_source_addrs;
384 struct RTSPSource **default_exclude_source_addrs;
387 char delayed_fmtp[2048];
390 static void copy_default_source_addrs(
struct RTSPSource **addrs,
int count,
395 for (i = 0; i <
count; i++) {
397 rtsp_src2 =
av_malloc(
sizeof(*rtsp_src2));
400 memcpy(rtsp_src2, rtsp_src,
sizeof(*rtsp_src));
406 int payload_type,
const char *
line)
422 int letter,
const char *buf)
425 char buf1[64], st_type[64];
438 if (s1->skip_media && letter !=
'm')
443 if (strcmp(buf1,
"IN") != 0)
446 if (strcmp(buf1,
"IP4") && strcmp(buf1,
"IP6"))
458 s1->default_ip = sdp_ip;
459 s1->default_ttl = ttl;
481 get_word(st_type,
sizeof(st_type), &p);
482 if (!strcmp(st_type,
"audio")) {
484 }
else if (!strcmp(st_type,
"video")) {
486 }
else if (!strcmp(st_type,
"application")) {
488 }
else if (!strcmp(st_type,
"text")) {
504 rtsp_st->
sdp_ip = s1->default_ip;
505 rtsp_st->
sdp_ttl = s1->default_ttl;
507 copy_default_source_addrs(s1->default_include_source_addrs,
508 s1->nb_default_include_source_addrs,
511 copy_default_source_addrs(s1->default_exclude_source_addrs,
512 s1->nb_default_exclude_source_addrs,
520 if (!strcmp(buf1,
"udp"))
522 else if (strstr(buf1,
"/AVPF") || strstr(buf1,
"/SAVPF"))
532 if (CONFIG_RTPDEC && !rt->
ts)
538 init_rtp_handler(handler, rtsp_st,
NULL);
539 finalize_rtp_handler_init(s, rtsp_st,
NULL);
562 init_rtp_handler(handler, rtsp_st, st);
563 finalize_rtp_handler_init(s, rtsp_st, st);
575 if (!strncmp(p,
"rtsp://", 7))
586 if (proto[0] ==
'\0') {
600 payload_type = atoi(buf1);
604 sdp_parse_rtpmap(s, st, rtsp_st, payload_type, p);
608 parse_fmtp(s, rt, payload_type, s1->delayed_fmtp);
614 payload_type = atoi(buf1);
615 if (s1->seen_rtpmap) {
619 av_strlcpy(s1->delayed_fmtp, buf,
sizeof(s1->delayed_fmtp));
624 rtsp_st->
ssrc = strtoll(buf1,
NULL, 10);
644 }
else if (
av_strstart(p,
"IsRealDataType:integer;",&p)) {
647 }
else if (
av_strstart(p,
"SampleRate:integer;", &p) &&
662 if (strcmp(buf1,
"incl") && strcmp(buf1,
"excl"))
664 exclude = !strcmp(buf1,
"excl");
667 if (strcmp(buf1,
"IN") != 0)
670 if (strcmp(buf1,
"IP4") && strcmp(buf1,
"IP6") && strcmp(buf1,
"*"))
682 dynarray_add(&s1->default_exclude_source_addrs, &s1->nb_default_exclude_source_addrs, rtsp_src);
689 dynarray_add(&s1->default_include_source_addrs, &s1->nb_default_include_source_addrs, rtsp_src);
721 SDPParseState sdp_parse_state = { { 0 } }, *s1 = &sdp_parse_state;
735 while (*p !=
'\n' && *p !=
'\r' && *p !=
'\0') {
736 if ((q - buf) <
sizeof(buf) - 1)
741 sdp_parse_line(s, s1, letter, buf);
743 while (*p !=
'\n' && *p !=
'\0')
749 for (i = 0; i < s1->nb_default_include_source_addrs; i++)
750 av_freep(&s1->default_include_source_addrs[i]);
751 av_freep(&s1->default_include_source_addrs);
752 for (i = 0; i < s1->nb_default_exclude_source_addrs; i++)
753 av_freep(&s1->default_exclude_source_addrs[i]);
754 av_freep(&s1->default_exclude_source_addrs);
774 if (CONFIG_RTSP_MUXER && rtpctx->
pb && send_packets)
822 if (CONFIG_RTPDEC && rt->
ts)
833 if (reordering_queue_size < 0) {
835 reordering_queue_size = 0;
846 if (CONFIG_RTSP_MUXER && s->
oformat && st) {
862 else if (CONFIG_RTPDEC)
865 reordering_queue_size);
887 #if CONFIG_RTSP_DEMUXER || CONFIG_RTSP_MUXER 888 static void rtsp_parse_range(
int *min_ptr,
int *max_ptr,
const char **pp)
896 v = strtol(q, &p, 10);
900 v = strtol(p, &p, 10);
913 char transport_protocol[16];
915 char lower_transport[16];
929 get_word_sep(transport_protocol,
sizeof(transport_protocol),
933 lower_transport[0] =
'\0';
940 }
else if (!
av_strcasecmp (transport_protocol,
"x-pn-tng") ||
943 get_word_sep(lower_transport,
sizeof(lower_transport),
"/;,", &p);
948 lower_transport[0] =
'\0';
964 while (*p !=
'\0' && *p !=
',') {
966 if (!strcmp(parameter,
"port")) {
971 }
else if (!strcmp(parameter,
"client_port")) {
977 }
else if (!strcmp(parameter,
"server_port")) {
983 }
else if (!strcmp(parameter,
"interleaved")) {
989 }
else if (!strcmp(parameter,
"multicast")) {
992 }
else if (!strcmp(parameter,
"ttl")) {
996 th->
ttl = strtol(p, &end, 10);
999 }
else if (!strcmp(parameter,
"destination")) {
1005 }
else if (!strcmp(parameter,
"source")) {
1011 }
else if (!strcmp(parameter,
"mode")) {
1015 if (!strcmp(buf,
"record") ||
1016 !strcmp(buf,
"receive"))
1021 while (*p !=
';' && *p !=
'\0' && *p !=
',')
1035 static void handle_rtp_info(
RTSPState *rt,
const char *url,
1036 uint32_t seq, uint32_t rtptime)
1039 if (!rtptime || !url[0])
1055 static void rtsp_parse_rtp_info(
RTSPState *rt,
const char *p)
1059 uint32_t seq = 0, rtptime = 0;
1071 if (!strcmp(key,
"url"))
1073 else if (!strcmp(key,
"seq"))
1074 seq = strtoul(value,
NULL, 10);
1075 else if (!strcmp(key,
"rtptime"))
1076 rtptime = strtoul(value,
NULL, 10);
1078 handle_rtp_info(rt, url, seq, rtptime);
1087 handle_rtp_info(rt, url, seq, rtptime);
1102 (t = strtol(p,
NULL, 10)) > 0) {
1108 rtsp_parse_transport(s, reply, p);
1110 reply->
seq = strtol(p,
NULL, 10);
1125 }
else if (
av_stristart(p,
"WWW-Authenticate:", &p) && rt) {
1128 }
else if (
av_stristart(p,
"Authentication-Info:", &p) && rt) {
1131 }
else if (
av_stristart(p,
"Content-Base:", &p) && rt) {
1133 if (method && !strcmp(method,
"DESCRIBE"))
1137 if (method && !strcmp(method,
"PLAY"))
1138 rtsp_parse_rtp_info(rt, p);
1140 if (strstr(p,
"GET_PARAMETER") &&
1141 method && !strcmp(method,
"OPTIONS"))
1143 }
else if (
av_stristart(p,
"x-Accept-Dynamic-Rate:", &p) && rt) {
1172 if (len1 >
sizeof(buf))
1182 unsigned char **content_ptr,
1183 int return_on_interleaved_data,
const char *method)
1189 int ret, content_length, line_count = 0, request = 0;
1190 unsigned char *content =
NULL;
1196 memset(reply, 0,
sizeof(*reply));
1209 if (ch ==
'$' && q == buf) {
1210 if (return_on_interleaved_data) {
1214 }
else if (ch !=
'\r') {
1215 if ((q - buf) <
sizeof(buf) - 1)
1227 if (line_count == 0) {
1230 if (!strncmp(buf1,
"RTSP/", 5)) {
1251 if (content_length > 0) {
1253 content =
av_malloc(content_length + 1);
1258 content[content_length] =
'\0';
1261 *content_ptr = content;
1268 const char* ptr = buf;
1270 if (!strcmp(reply->
reason,
"OPTIONS")) {
1271 snprintf(buf,
sizeof(buf),
"RTSP/1.0 200 OK\r\n");
1278 snprintf(buf,
sizeof(buf),
"RTSP/1.0 501 Not Implemented\r\n");
1303 if (rt->
seq != reply->
seq) {
1309 if (reply->
notice == 2101 ||
1311 reply->
notice == 2306 ) {
1313 }
else if (reply->
notice >= 4400 && reply->
notice < 5500) {
1315 }
else if (reply->
notice == 2401 ||
1336 const char *method,
const char *url,
1338 const unsigned char *send_content,
1339 int send_content_length)
1351 snprintf(buf,
sizeof(buf),
"%s %s RTSP/1.0\r\n", method, url);
1357 !strstr(
headers,
"\nIf-Match:"))) {
1362 rt->
auth, url, method);
1367 if (send_content_length > 0 && send_content)
1368 av_strlcatf(buf,
sizeof(buf),
"Content-Length: %d\r\n", send_content_length);
1374 out_buf = base64buf;
1380 if (send_content_length > 0 && send_content) {
1393 const char *url,
const char *
headers)
1395 return rtsp_send_cmd_with_content_async(s, method, url, headers,
NULL, 0);
1400 unsigned char **content_ptr)
1403 content_ptr,
NULL, 0);
1407 const char *method,
const char *url,
1410 unsigned char **content_ptr,
1411 const unsigned char *send_content,
1412 int send_content_length)
1416 int ret, attempts = 0;
1420 if ((ret = rtsp_send_cmd_with_content_async(s, method, url,
header,
1422 send_content_length)))
1446 int lower_transport,
const char *real_challenge)
1453 const char *trans_pref;
1456 trans_pref =
"x-pn-tng";
1458 trans_pref =
"RAW/RAW";
1460 trans_pref =
"RTP/AVP";
1470 port_off -= port_off & 0x01;
1472 for (j = rt->
rtp_port_min + port_off, i = 0; i < rt->nb_rtsp_streams; ++i) {
1509 while (j <= rt->rtp_port_max) {
1513 "?localport=%d", j);
1531 av_strlcpy(transport, trans_pref,
sizeof(transport));
1536 av_strlcat(transport,
"unicast;",
sizeof(transport));
1538 "client_port=%d", port);
1541 av_strlcatf(transport,
sizeof(transport),
"-%d", port + 1);
1554 snprintf(transport,
sizeof(transport) - 1,
1555 "%s/TCP;", trans_pref);
1557 av_strlcat(transport,
"unicast;",
sizeof(transport));
1559 "interleaved=%d-%d",
1560 interleave, interleave + 1);
1565 snprintf(transport,
sizeof(transport) - 1,
1566 "%s/UDP;multicast", trans_pref);
1569 av_strlcat(transport,
";mode=record",
sizeof(transport));
1572 av_strlcat(transport,
";mode=play",
sizeof(transport));
1574 "Transport: %s\r\n",
1577 av_strlcat(cmd,
"x-Dynamic-Rate: 0\r\n",
sizeof(cmd));
1579 char real_res[41], real_csum[9];
1584 "RealChallenge2: %s, sd=%s\r\n",
1598 char proto[128], host[128], path[512], auth[128];
1600 av_url_split(proto,
sizeof(proto), auth,
sizeof(auth), host,
sizeof(host),
1634 const char *peer = host;
1637 av_strlcpy(options,
"?connect=1",
sizeof(options));
1666 snprintf(optbuf,
sizeof(optbuf),
"?ttl=%d", ttl);
1667 getnameinfo((
struct sockaddr*) &addr,
sizeof(addr),
1670 port,
"%s", optbuf);
1712 char proto[128], host[1024], path[1024];
1714 const char *lower_rtsp_proto =
"tcp";
1715 int port, err, tcp_fd;
1717 int lower_transport_mask = 0;
1719 int https_tunnel = 0;
1720 char real_challenge[64] =
"";
1722 socklen_t peer_len =
sizeof(peer);
1748 memset(&reply1, 0,
sizeof(reply1));
1751 host,
sizeof(host), &port, path,
sizeof(path), s->
url);
1753 if (!strcmp(proto,
"rtsps")) {
1754 lower_rtsp_proto =
"tls";
1757 }
else if (!strcmp(proto,
"satip")) {
1766 port = default_port;
1770 if (!lower_transport_mask)
1779 "only UDP and TCP are supported for output.\n");
1789 host, port,
"%s", path);
1793 char httpname[1024];
1794 char sessioncookie[17];
1800 ff_url_join(httpname,
sizeof(httpname), https_tunnel ?
"https" :
"http", auth, host, port,
"%s", path);
1801 snprintf(sessioncookie,
sizeof(sessioncookie),
"%08x%08x",
1813 "x-sessioncookie: %s\r\n" 1814 "Accept: application/x-rtsp-tunnelled\r\n" 1815 "Pragma: no-cache\r\n" 1816 "Cache-Control: no-cache\r\n",
1844 "x-sessioncookie: %s\r\n" 1845 "Content-Type: application/x-rtsp-tunnelled\r\n" 1846 "Pragma: no-cache\r\n" 1847 "Cache-Control: no-cache\r\n" 1848 "Content-Length: 32767\r\n" 1849 "Expires: Sun, 9 Jan 1972 00:00:00 GMT\r\n",
1900 if (!getpeername(tcp_fd, (
struct sockaddr*) &peer, &peer_len)) {
1901 getnameinfo((
struct sockaddr*) &peer, peer_len, host,
sizeof(host),
1922 "ClientChallenge: 9e26d33f2984236010ef6253fb1887f7\r\n" 1923 "PlayerStarttime: [28/03/2003:22:50:23 00:00]\r\n" 1924 "CompanyID: KnKV4M4I/B2FjJ1TToLycw==\r\n" 1925 "GUID: 00000000-0000-0000-0000-000000000000\r\n",
1944 #if CONFIG_RTSP_DEMUXER 1947 err = init_satip_stream(s);
1952 if (CONFIG_RTSP_MUXER)
1960 int lower_transport =
ff_log2_tab[lower_transport_mask &
1961 ~(lower_transport_mask - 1)];
1969 real_challenge :
NULL);
1972 lower_transport_mask &= ~(1 << lower_transport);
1973 if (lower_transport_mask == 0 && err == 1) {
1974 err =
AVERROR(EPROTONOSUPPORT);
2031 uint8_t *buf,
int buf_size, int64_t wait_end)
2036 struct pollfd *p = rt->
p;
2037 int *fds =
NULL, fdsnum, fdsidx;
2047 p[rt->
max_p++].events = POLLIN;
2059 "Number of fds %d not supported\n", fdsnum);
2062 for (fdsidx = 0; fdsidx < fdsnum; fdsidx++) {
2063 p[rt->
max_p].fd = fds[fdsidx];
2064 p[rt->
max_p++].events = POLLIN;
2082 if (p[j].revents & POLLIN || p[j+1].revents & POLLIN) {
2085 *prtsp_st = rtsp_st;
2092 #if CONFIG_RTSP_DEMUXER 2093 if (rt->
rtsp_hd && p[0].revents & POLLIN) {
2094 if ((ret = parse_rtsp_message(s)) < 0) {
2101 }
else if (n < 0 && errno != EINTR)
2133 "Unable to pick stream for packet - SSRC not known for " 2159 #if CONFIG_RTSP_DEMUXER 2176 len = pick_stream(s, rtsp_st, rt->
recvbuf, len);
2193 int64_t wait_end = 0;
2204 }
else if (CONFIG_RTPDEC && rt->
ts) {
2215 }
else if (ret == 1) {
2224 int64_t first_queue_time = 0;
2231 if (queue_time && (queue_time - first_queue_time < 0 ||
2232 !first_queue_time)) {
2233 first_queue_time = queue_time;
2237 if (first_queue_time) {
2238 wait_end = first_queue_time + s->
max_delay;
2241 first_queue_st =
NULL;
2252 len =
read_packet(s, &rtsp_st, first_queue_st, wait_end);
2253 if (len ==
AVERROR(EAGAIN) && first_queue_st &&
2256 "max delay reached. need to consume packet\n");
2257 rtsp_st = first_queue_st;
2292 if (rtpctx2 && st && st2 &&
2319 }
else if (CONFIG_RTPDEC && rt->
ts) {
2345 #if CONFIG_SDP_DEMUXER 2351 while (p < p_end && *p !=
'\0') {
2352 if (
sizeof(
"c=IN IP") - 1 < p_end - p &&
2356 while (p < p_end - 1 && *p !=
'\n') p++;
2365 static void append_source_addrs(
char *buf,
int size,
const char *
name,
2372 for (i = 1; i <
count; i++)
2405 content[
size] =
'\0';
2430 "?localport=%d&ttl=%d&connect=%d&write_to_source=%d",
2435 append_source_addrs(url,
sizeof(url),
"sources",
2438 append_source_addrs(url,
sizeof(url),
"block",
2468 static const AVClass sdp_demuxer_class = {
2483 .priv_class = &sdp_demuxer_class,
2487 #if CONFIG_RTP_DEMUXER 2498 char host[500], filters_buf[1000];
2505 socklen_t addrlen =
sizeof(addr);
2519 ret =
ffurl_read(in, recvbuf,
sizeof(recvbuf));
2529 if ((recvbuf[0] & 0xc0) != 0x80) {
2538 payload_type = recvbuf[1] & 0x7f;
2552 "without an SDP file describing it\n",
2559 "properly you need an SDP file " 2568 addr.
ss_family == AF_INET ? 4 : 6, host);
2570 p = strchr(s->
url,
'?');
2572 static const char filters[][2][8] = { {
"sources",
"incl" },
2573 {
"block",
"excl" } };
2577 if (
av_find_info_tag(filters_buf,
sizeof(filters_buf), filters[i][0], p)) {
2579 while ((q = strchr(q,
',')) !=
NULL)
2581 av_bprintf(&sdp,
"a=source-filter:%s IN IP%d %s %s\r\n",
2583 addr.
ss_family == AF_INET ? 4 : 6, host,
2592 port, payload_type);
2608 ret = sdp_read_header(s);
2615 av_log(s,
AV_LOG_ERROR,
"rtp_read_header(): not enough buffer space for sdp-headers\n");
2624 static const AVClass rtp_demuxer_class = {
2640 .priv_class = &rtp_demuxer_class,
char auth[128]
plaintext authorization line (username:password)
int interleaved_min
interleave ids, if TCP transport; each TCP/RTSP data packet starts with a '$', stream length and stre...
void av_url_split(char *proto, int proto_size, char *authorization, int authorization_size, char *hostname, int hostname_size, int *port_ptr, char *path, int path_size, const char *url)
Split a URL string into components.
void ff_rtsp_skip_packet(AVFormatContext *s)
Skip a RTP/TCP interleaved packet.
int rtp_port_min
Minimum and maximum local UDP ports.
int ff_wms_parse_sdp_a_line(AVFormatContext *s, const char *p)
Parse a Windows Media Server-specific SDP line.
void ff_rtp_parse_set_crypto(RTPDemuxContext *s, const char *suite, const char *params)
Realmedia Data Transport.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
void av_bprintf(AVBPrint *buf, const char *fmt,...)
int ff_rtp_get_local_rtp_port(URLContext *h)
Return the local rtp port used by the RTP connection.
int64_t start_time_realtime
Start time of the stream in real world time, in microseconds since the Unix epoch (00:00 1st January ...
int ffurl_open_whitelist(URLContext **puc, const char *filename, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options, const char *whitelist, const char *blacklist, URLContext *parent)
Create an URLContext for accessing to the resource indicated by url, and open it. ...
#define RTP_MAX_PACKET_LENGTH
AVIOInterruptCB interrupt_callback
Custom interrupt callbacks for the I/O layer.
char source[INET6_ADDRSTRLEN+1]
source IP address
#define AV_OPT_FLAG_DEPRECATED
set if option is deprecated, users should refer to AVOption.help text for more information ...
HTTPAuthType
Authentication types, ordered from weakest to strongest.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define LIBAVUTIL_VERSION_INT
static void rtsp_parse_range_npt(const char *p, int64_t *start, int64_t *end)
Parse a string p in the form of Range:npt=xx-xx, and determine the start and end time.
int av_parse_time(int64_t *timeval, const char *timestr, int duration)
Parse timestr and return in *time a corresponding number of microseconds.
int ffurl_write(URLContext *h, const unsigned char *buf, int size)
Write size bytes from buf to the resource accessed by h.
#define RTSP_DEFAULT_PORT
struct pollfd * p
Polling array for udp.
int ff_rtsp_open_transport_ctx(AVFormatContext *s, RTSPStream *rtsp_st)
Open RTSP transport context.
MpegTSContext * avpriv_mpegts_parse_open(AVFormatContext *s)
int ffurl_connect(URLContext *uc, AVDictionary **options)
Connect an URLContext that has been allocated by ffurl_alloc.
static int parse_fmtp(AVFormatContext *s, AVStream *stream, PayloadContext *data, const char *attr, const char *value)
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
int ff_rdt_parse_packet(RDTDemuxContext *s, AVPacket *pkt, uint8_t **bufptr, int len)
Parse RDT-style packet data (header + media data).
int index
stream index in AVFormatContext
const char * av_default_item_name(void *ptr)
Return the context name.
#define AVIO_FLAG_READ
read-only
char * user_agent
User-Agent string.
#define AVIO_FLAG_WRITE
write-only
int mode_record
transport set to record data
enum AVMediaType codec_type
int avio_read_partial(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
int av_strncasecmp(const char *a, const char *b, size_t n)
Locale-independent case-insensitive compare.
void ff_network_close(void)
initialized and sending/receiving data
char real_challenge[64]
the "RealChallenge1:" field from the server
#define FF_ARRAY_ELEMS(a)
#define RTSP_FLAG_RTCP_TO_SOURCE
Send RTCP packets to the source address of received packets.
#define RTSP_RTP_PORT_MAX
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
int nb_include_source_addrs
Number of source-specific multicast include source IP addresses (from SDP content) ...
int ctx_flags
Flags signalling stream properties.
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_RB16
#define RTSP_FLAG_LISTEN
Wait for incoming connections.
char session_id[512]
copy of RTSPMessageHeader->session_id, i.e.
int auth_type
The currently chosen auth type.
int64_t seek_timestamp
the seek value requested when calling av_seek_frame().
const char * ff_rtp_enc_name(int payload_type)
Return the encoding name (as defined in http://www.iana.org/assignments/rtp-parameters) for a given p...
This struct describes the properties of an encoded stream.
int ff_rtsp_make_setup_request(AVFormatContext *s, const char *host, int port, int lower_transport, const char *real_challenge)
Do the SETUP requests for each stream for the chosen lower transport mode.
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
enum RTSPLowerTransport lower_transport
network layer transport protocol; e.g.
RTPDemuxContext * ff_rtp_parse_open(AVFormatContext *s1, AVStream *st, int payload_type, int queue_size)
open a new RTP parse context for stream 'st'.
enum AVCodecID ff_rtp_codec_id(const char *buf, enum AVMediaType codec_type)
Return the codec id for the given encoding name and codec type.
int ff_rtsp_connect(AVFormatContext *s)
Connect to the RTSP server and set up the individual media streams.
Standards-compliant RTP-server.
int reordering_queue_size
Size of RTP packet reordering queue.
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
#define RTSP_FLAG_PREFER_TCP
Try RTP via TCP first if possible.
static void interleave(uint8_t *dst, uint8_t *src, int w, int h, int dst_linesize, int src_linesize, enum FilterMode mode, int swap)
uint64_t first_rtcp_ntp_time
#define av_assert0(cond)
assert() equivalent, that is always enabled.
int av_stristart(const char *str, const char *pfx, const char **ptr)
Return non-zero if pfx is a prefix of str independent of case.
int get_parameter_supported
Whether the server supports the GET_PARAMETER method.
#define RTSP_MAX_TRANSPORTS
Opaque data information usually continuous.
int ttl
time-to-live value (required for multicast); the amount of HOPs that packets will be allowed to make ...
static int get_sockaddr(AVFormatContext *s, const char *buf, struct sockaddr_storage *sock)
int ff_network_init(void)
miscellaneous OS support macros and functions.
int feedback
Enable sending RTCP feedback messages according to RFC 4585.
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
int id
Format-specific stream ID.
enum AVStreamParseType need_parsing
GLsizei GLboolean const GLfloat * value
#define DEFAULT_REORDERING_DELAY
int initial_timeout
Timeout to wait for incoming connections.
static void handler(vbi_event *ev, void *user_data)
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file.
int ff_rtsp_next_attr_and_value(const char **p, char *attr, int attr_size, char *value, int value_size)
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_RB32
AVStream ** streams
A list of all streams in the file.
int accept_dynamic_rate
Whether the server accepts the x-Dynamic-Rate header.
URLContext * rtsp_hd_out
Additional output handle, used when input and output are done separately, eg for HTTP tunneling...
int ff_rtp_get_codec_info(AVCodecParameters *par, int payload_type)
Initialize a codec context based on the payload type.
Describe a single stream, as identified by a single m= line block in the SDP content.
Custom IO - not a public option for lower_transport_mask, but set in the SDP demuxer based on a flag...
char * protocol_whitelist
',' separated list of allowed protocols.
#define AVERROR_EOF
End of file.
void ff_http_init_auth_state(URLContext *dest, const URLContext *src)
Initialize the authentication state based on another HTTP URLContext.
#define AV_LOG_VERBOSE
Detailed information.
static av_cold int read_close(AVFormatContext *ctx)
int av_find_info_tag(char *arg, int arg_size, const char *tag1, const char *info)
Attempt to find a specific tag in a URL.
static const uint8_t header[24]
int ff_rtsp_parse_streaming_commands(AVFormatContext *s)
Parse RTSP commands (OPTIONS, PAUSE and TEARDOWN) during streaming in listen mode.
int ff_rtsp_send_cmd(AVFormatContext *s, const char *method, const char *url, const char *headers, RTSPMessageHeader *reply, unsigned char **content_ptr)
Send a command to the RTSP server and wait for the reply.
static int ff_rtsp_averror(enum RTSPStatusCode status_code, int default_averror)
int avio_read(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
#define READ_PACKET_TIMEOUT_S
void ff_rtsp_parse_line(AVFormatContext *s, RTSPMessageHeader *reply, const char *buf, RTSPState *rt, const char *method)
void avcodec_parameters_free(AVCodecParameters **par)
Free an AVCodecParameters instance and everything associated with it and write NULL to the supplied p...
#define RTSP_DEFAULT_AUDIO_SAMPLERATE
void ff_rdt_parse_close(RDTDemuxContext *s)
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
int ff_sdp_parse(AVFormatContext *s, const char *content)
Parse an SDP description of streams by populating an RTSPState struct within the AVFormatContext; als...
struct RTSPSource ** exclude_source_addrs
Source-specific multicast exclude source IP addresses (from SDP content)
Private data for the RTSP demuxer.
int64_t last_cmd_time
timestamp of the last RTSP command that we sent to the RTSP server.
int ffurl_alloc(URLContext **puc, const char *filename, int flags, const AVIOInterruptCB *int_cb)
Create a URLContext for accessing to the resource indicated by url, but do not initiate the connectio...
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
AVDictionary * metadata
Metadata that applies to the whole file.
int ffurl_get_multi_file_handle(URLContext *h, int **handles, int *numhandles)
Return the file descriptors associated with this URL.
#define AV_BPRINT_SIZE_UNLIMITED
int timeout
copy of RTSPMessageHeader->timeout, i.e.
const char * protocol_whitelist
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
ff_const59 struct AVInputFormat * iformat
The input container format.
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
char * url
input or output URL.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
const AVOption ff_rtsp_options[]
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values. ...
enum AVMediaType codec_type
General type of the encoded data.
simple assert() macros that are a bit more flexible than ISO C assert().
enum RTSPControlTransport control_transport
RTSP transport mode, such as plain or tunneled.
struct RTSPSource ** include_source_addrs
Source-specific multicast include source IP addresses (from SDP content)
void ff_rtp_parse_set_dynamic_protocol(RTPDemuxContext *s, PayloadContext *ctx, const RTPDynamicProtocolHandler *handler)
char * av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size)
Encode data to base64 and null-terminate.
size_t av_strlcpy(char *dst, const char *src, size_t size)
Copy the string src to dst, but no more than size - 1 bytes, and null-terminate dst.
struct RTSPStream ** rtsp_streams
streams in this session
int stream_index
corresponding stream index, if any.
int buf_size
Size of buf except extra allocated bytes.
int seq
RTSP command sequence number.
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
uint8_t * recvbuf
Reusable buffer for receiving packets.
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
#define RTSP_FLAG_CUSTOM_IO
Do all IO via the AVIOContext.
#define RTSP_FLAG_SATIP_RAW
Export SAT>IP stream as raw MPEG-TS.
AVFormatContext * asf_ctx
The following are used for RTP/ASF streams.
int(* init)(AVFormatContext *s, int st_index, PayloadContext *priv_data)
Initialize dynamic protocol handler, called after the full rtpmap line is parsed, may be null...
char control_uri[MAX_URL_SIZE]
some MS RTSP streams contain a URL in the SDP that we need to use for all subsequent RTSP requests...
int nb_rtsp_streams
number of items in the 'rtsp_streams' variable
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
#define AV_BASE64_SIZE(x)
Calculate the output size needed to base64-encode x bytes to a null-terminated string.
void * cur_transport_priv
RTSPStream->transport_priv of the last stream that we read a packet from.
int av_strcasecmp(const char *a, const char *b)
Locale-independent case-insensitive compare.
int max_streams
The maximum number of streams.
#define RTSP_TCP_MAX_PACKET_SIZE
enum AVStreamParseType need_parsing
HTTP tunneled - not a proper transport mode as such, only for use via AVOptions.
This describes a single item in the "Transport:" line of one stream as negotiated by the SETUP RTSP c...
RTSP over HTTP (tunneling)
static void get_word_until_chars(char *buf, int buf_size, const char *sep, const char **pp)
int ff_rtsp_tcp_write_packet(AVFormatContext *s, RTSPStream *rtsp_st)
Send buffered packets over TCP.
static void get_word(char *buf, int buf_size, const char **pp)
static int av_bprint_is_complete(const AVBPrint *buf)
Test if the print buffer is complete (not truncated).
const RTPDynamicProtocolHandler * dynamic_handler
The following are used for dynamic protocols (rtpdec_*.c/rdt.c)
Usually treated as AVMEDIA_TYPE_DATA.
RDTDemuxContext * ff_rdt_parse_open(AVFormatContext *ic, int first_stream_of_set_idx, void *priv_data, const RTPDynamicProtocolHandler *handler)
Allocate and init the RDT parsing context.
int ffurl_get_file_handle(URLContext *h)
Return the file descriptor associated with this URL.
#define AVERROR_EXIT
Immediate exit was requested; the called function should not be restarted.
int sdp_port
The following are used only in SDP, not RTSP.
struct MpegTSContext * ts
The following are used for parsing raw mpegts in udp.
int stale
Auth ok, but needs to be resent with a new nonce.
const uint8_t ff_log2_tab[256]
void(* close)(PayloadContext *protocol_data)
Free any data needed by the rtp parsing for this dynamic data.
int sdp_payload_type
payload type
int nb_exclude_source_addrs
Number of source-specific multicast exclude source IP addresses (from SDP content) ...
ff_const59 struct AVOutputFormat * oformat
The output container format.
void ffio_free_dyn_buf(AVIOContext **s)
Free a dynamic buffer.
static int read_header(FFV1Context *f)
int ffurl_closep(URLContext **hh)
Close the resource accessed by the URLContext h, and free the memory used by it.
int ff_rtp_send_rtcp_feedback(RTPDemuxContext *s, URLContext *fd, AVIOContext *avio)
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
int ff_url_join(char *str, int size, const char *proto, const char *authorization, const char *hostname, int port, const char *fmt,...)
enum RTSPLowerTransport lower_transport
the negotiated network layer transport protocol; e.g.
char addr[128]
Source-specific multicast include source IP address (from SDP content)
#define AV_LOG_INFO
Standard information.
struct sockaddr_storage sdp_ip
IP address (from SDP content)
char * av_strdup(const char *s)
Duplicate a string.
void ff_rtsp_undo_setup(AVFormatContext *s, int send_packets)
Undo the effect of ff_rtsp_make_setup_request, close the transport_priv and rtp_handle fields...
int ff_check_interrupt(AVIOInterruptCB *cb)
Check if the user has requested to interrupt a blocking function associated with cb.
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
AVIOContext * pb
I/O context.
int media_type_mask
Mask of all requested media types.
#define FF_RTP_FLAG_OPTS(ctx, fieldname)
#define RTSP_FLAG_OPTS(name, longname)
uint32_t ssrc
SSRC for this stream, to allow identifying RTCP packets before the first RTP packet.
#define RTSP_FLAG_FILTER_SRC
Filter incoming UDP packets - receive packets only from the right source address and port...
enum RTSPTransport transport
the negotiated data/packet transport protocol; e.g.
int(* parse_sdp_a_line)(AVFormatContext *s, int st_index, PayloadContext *priv_data, const char *line)
Parse the a= line from the sdp field.
#define RTSPS_DEFAULT_PORT
int ff_rtsp_setup_output_streams(AVFormatContext *s, const char *addr)
Announce the stream to the server and set up the RTSPStream child objects for each media stream...
#define AVIO_FLAG_READ_WRITE
read-write pseudo flag
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
int rtsp_flags
Various option flags for the RTSP muxer/demuxer.
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(const int16_t *) pi >> 8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(const int32_t *) pi >> 24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31))))#define SET_CONV_FUNC_GROUP(ofmt, ifmt) static void set_generic_function(AudioConvert *ac){}void ff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, int sample_rate, int apply_map){AudioConvert *ac;int in_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) return NULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt) > 2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);return NULL;}return ac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}else if(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;else ac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);return ac;}int ff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){int use_generic=1;int len=in->nb_samples;int p;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%d samples - audio_convert: %s to %s (dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));return ff_convert_dither(ac-> in
Describe the class of an AVClass context structure.
void ff_real_parse_sdp_a_line(AVFormatContext *s, int stream_index, const char *line)
Parse a server-related SDP line.
PayloadContext * dynamic_protocol_context
private data associated with the dynamic protocol
char last_reply[2048]
The last reply of the server to a RTSP command.
enum RTSPTransport transport
data/packet transport protocol; e.g.
int avpriv_mpegts_parse_packet(MpegTSContext *ts, AVPacket *pkt, const uint8_t *buf, int len)
size_t av_strlcatf(char *dst, size_t size, const char *fmt,...)
#define RTSP_MEDIATYPE_OPTS(name, longname)
int64_t ff_rtp_queued_packet_time(RTPDemuxContext *s)
int ff_rtsp_tcp_read_packet(AVFormatContext *s, RTSPStream **prtsp_st, uint8_t *buf, int buf_size)
Receive one RTP packet from an TCP interleaved RTSP stream.
void ff_rtsp_close_streams(AVFormatContext *s)
Close and free all streams within the RTSP (de)muxer.
int ff_rtp_check_and_send_back_rr(RTPDemuxContext *s, URLContext *fd, AVIOContext *avio, int count)
some rtp servers assume client is dead if they don't hear from them...
const char * name
Name of the codec described by this descriptor.
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
This structure contains the data a format has to probe a file.
#define RTSP_DEFAULT_NB_AUDIO_CHANNELS
char * ff_http_auth_create_response(HTTPAuthState *state, const char *auth, const char *path, const char *method)
size_t av_strlcat(char *dst, const char *src, size_t size)
Append the string src to the string dst, but to a total length of no more than size - 1 bytes...
#define RTP_PT_IS_RTCP(x)
This struct describes the properties of a single codec described by an AVCodecID. ...
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
int64_t av_gettime_relative(void)
Get the current time in microseconds since some unspecified starting point.
#define flags(name, subs,...)
enum RTSPServerType server_type
brand of server that we're talking to; e.g.
int64_t start_time
Position of the first frame of the component, in AV_TIME_BASE fractional seconds. ...
enum RTSPClientState state
indicator of whether we are currently receiving data from the server.
int sample_rate
Audio only.
int ff_rtsp_fetch_packet(AVFormatContext *s, AVPacket *pkt)
Receive one packet from the RTSPStreams set up in the AVFormatContext (which should contain a RTSPSta...
AVCodecParameters * avcodec_parameters_alloc(void)
Allocate a new AVCodecParameters and set its fields to default values (unknown/invalid/0).
int av_strstart(const char *str, const char *pfx, const char **ptr)
Return non-zero if pfx is a prefix of str.
int ff_rtsp_send_cmd_with_content(AVFormatContext *s, const char *method, const char *url, const char *headers, RTSPMessageHeader *reply, unsigned char **content_ptr, const unsigned char *send_content, int send_content_length)
Send a command to the RTSP server and wait for the reply.
static const AVOption sdp_options[]
const OptionDef options[]
int ff_rtp_chain_mux_open(AVFormatContext **out, AVFormatContext *s, AVStream *st, URLContext *handle, int packet_size, int idx)
static AVDictionary * map_to_opts(RTSPState *rt)
int ffio_init_context(AVIOContext *s, unsigned char *buffer, int buffer_size, int write_flag, void *opaque, int(*read_packet)(void *opaque, uint8_t *buf, int buf_size), int(*write_packet)(void *opaque, uint8_t *buf, int buf_size), int64_t(*seek)(void *opaque, int64_t offset, int whence))
int need_subscription
The following are used for Real stream selection.
int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags)
Convenience wrapper for av_dict_set that converts the value to a string and stores it...
int ffurl_read_complete(URLContext *h, unsigned char *buf, int size)
Read as many bytes as possible (up to size), calling the read function multiple times if necessary...
void ff_rdt_calc_response_and_checksum(char response[41], char chksum[9], const char *challenge)
Calculate the response (RealChallenge2 in the RTSP header) to the challenge (RealChallenge1 in the RT...
void avformat_close_input(AVFormatContext **s)
Close an opened input AVFormatContext.
void ff_http_auth_handle_header(HTTPAuthState *state, const char *key, const char *value)
int ff_rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply, unsigned char **content_ptr, int return_on_interleaved_data, const char *method)
Read a RTSP message from the server, or prepare to read data packets if we're reading data interleave...
int stimeout
timeout of socket i/o operations.
FAKE codec to indicate a raw MPEG-2 TS stream (only used by libavformat)
int ff_rtsp_send_cmd_async(AVFormatContext *s, const char *method, const char *url, const char *headers)
Send a command to the RTSP server without waiting for the reply.
static void get_word_sep(char *buf, int buf_size, const char *sep, const char **pp)
TCP; interleaved in RTSP.
HTTPAuthState auth_state
authentication state
#define RTSP_RTP_PORT_MIN
void * priv_data
Format private data.
static const struct PPFilter filters[]
int ff_rtsp_setup_input_streams(AVFormatContext *s, RTSPMessageHeader *reply)
Get the description of the stream and set up the RTSPStream child objects.
void ff_rtp_parse_close(RTPDemuxContext *s)
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
int sdp_ttl
IP Time-To-Live (from SDP content)
int av_write_trailer(AVFormatContext *s)
Write the stream trailer to an output media file and free the file private data.
char * protocol_blacklist
',' separated list of disallowed protocols.
int64_t duration
Duration of the stream, in AV_TIME_BASE fractional seconds.
int lower_transport_mask
A mask with all requested transport methods.
unbuffered private I/O API
uint32_t av_get_random_seed(void)
Get a seed to use in conjunction with random functions.
AVCodecParameters * codecpar
Codec parameters associated with this stream.
#define av_malloc_array(a, b)
char control_url[MAX_URL_SIZE]
url for this stream (from SDP)
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Frame references ownership and permissions
int ff_rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt, uint8_t **bufptr, int len)
Parse an RTP or RTCP packet directly sent as a buffer.
struct sockaddr_storage destination
destination IP address
int ff_rtp_set_remote_url(URLContext *h, const char *uri)
If no filename is given to av_open_input_file because you want to get the local port first...
void avpriv_mpegts_parse_close(MpegTSContext *ts)
const RTPDynamicProtocolHandler * ff_rtp_handler_find_by_id(int id, enum AVMediaType codec_type)
Find a registered rtp dynamic protocol handler with a matching codec ID.
#define RTP_REORDER_QUEUE_DEFAULT_SIZE
int interleaved_min
interleave IDs; copies of RTSPTransportField->interleaved_min/max for the selected transport...
This structure stores compressed data.
int avio_closep(AVIOContext **s)
Close the resource accessed by the AVIOContext *s, free it and set the pointer pointing to it to NULL...
int server_port_min
UDP unicast server port range; the ports to which we should connect to receive unicast UDP RTP/RTCP d...
void ff_rtsp_close_connections(AVFormatContext *s)
Close all connection handles within the RTSP (de)muxer.
int av_opt_set(void *obj, const char *name, const char *val, int search_flags)
static const AVOption rtp_options[]
int ffurl_read(URLContext *h, unsigned char *buf, int size)
Read up to size bytes from the resource accessed by h, and store the read bytes in buf...
URLContext * rtp_handle
RTP stream handle (if UDP)
#define AV_NOPTS_VALUE
Undefined timestamp value.
FFmpeg currently uses a custom build this text attempts to document some of its obscure features and options Makefile the full command issued by make and its output will be shown on the screen DBG Preprocess x86 external assembler files to a dbg asm file in the object which then gets compiled Helps in developing those assembler files DESTDIR Destination directory for the install useful to prepare packages or install FFmpeg in cross environments GEN Set to ‘1’ to generate the missing or mismatched references Makefile builds all the libraries and the executables fate Run the fate test note that you must have installed it fate list List all fate regression test targets install Install headers
const RTPDynamicProtocolHandler * ff_rtp_handler_find_by_name(const char *name, enum AVMediaType codec_type)
Find a registered rtp dynamic protocol handler with the specified name.
int port_min
UDP multicast port range; the ports to which we should connect to receive multicast UDP data...
void * transport_priv
RTP/RDT parse context if input, RTP AVFormatContext if output.
No authentication specified.
int client_port_min
UDP client ports; these should be the local ports of the UDP RTP (and RTCP) sockets over which we rec...