Lines Matching refs:rt

127 static AVDictionary *map_to_opts(RTSPState *rt)
131 av_dict_set_int(&opts, "buffer_size", rt->buffer_size, 0);
132 av_dict_set_int(&opts, "pkt_size", rt->pkt_size, 0);
133 if (rt->localaddr && rt->localaddr[0])
134 av_dict_set(&opts, "localaddr", rt->localaddr, 0);
255 RTSPState *rt = s->priv_data;
259 dynarray_add(&rt->rtsp_streams,
260 &rt->nb_rtsp_streams, rtsp_st);
264 rt->control_uri, sizeof(rtsp_st->control_url));
266 if (rt->rtsp_flags & RTSP_FLAG_SATIP_RAW) {
270 st->id = rt->nb_rtsp_streams - 1;
402 static void parse_fmtp(AVFormatContext *s, RTSPState *rt,
407 for (i = 0; i < rt->nb_rtsp_streams; i++) {
408 RTSPStream *rtsp_st = rt->rtsp_streams[i];
421 RTSPState *rt = s->priv_data;
458 rtsp_st = rt->rtsp_streams[rt->nb_rtsp_streams - 1];
489 !(rt->media_type_mask & (1 << codec_type)) ||
490 rt->nb_rtsp_streams >= s->max_streams
499 dynarray_add(&rt->rtsp_streams, &rt->nb_rtsp_streams, rtsp_st);
518 rt->transport = RTSP_TRANSPORT_RAW;
528 if (rt->transport == RTSP_TRANSPORT_RAW) {
529 if (CONFIG_RTPDEC && !rt->ts)
530 rt->ts = avpriv_mpegts_parse_open(s);
538 } else if (rt->server_type == RTSP_SERVER_WMS &&
546 st->id = rt->nb_rtsp_streams - 1;
562 if (rt->default_lang[0])
563 av_dict_set(&st->metadata, "language", rt->default_lang, 0);
566 av_strlcpy(rtsp_st->control_url, rt->control_uri,
571 if (rt->nb_rtsp_streams == 0) {
573 av_strlcpy(rt->control_uri, p,
574 sizeof(rt->control_uri));
578 rtsp_st = rt->rtsp_streams[rt->nb_rtsp_streams - 1];
598 rtsp_st = rt->rtsp_streams[rt->nb_rtsp_streams - 1];
605 parse_fmtp(s, rt, payload_type, s1->delayed_fmtp);
613 parse_fmtp(s, rt, payload_type, buf);
619 rtsp_st = rt->rtsp_streams[rt->nb_rtsp_streams - 1];
634 rtsp_st = rt->rtsp_streams[rt->nb_rtsp_streams - 1];
640 get_word(rt->default_lang, sizeof(rt->default_lang), &p);
643 rt->transport = RTSP_TRANSPORT_RDT;
650 rtsp_st = rt->rtsp_streams[rt->nb_rtsp_streams - 1];
681 rtsp_st = rt->rtsp_streams[rt->nb_rtsp_streams - 1];
688 rtsp_st = rt->rtsp_streams[rt->nb_rtsp_streams - 1];
694 if (rt->server_type == RTSP_SERVER_WMS)
697 rtsp_st = rt->rtsp_streams[rt->nb_rtsp_streams - 1];
699 if (rt->server_type == RTSP_SERVER_REAL)
759 RTSPState *rt = s->priv_data;
762 for (i = 0; i < rt->nb_rtsp_streams; i++) {
763 RTSPStream *rtsp_st = rt->rtsp_streams[i];
770 if (rt->lower_transport == RTSP_LOWER_TRANSPORT_TCP) {
778 } else if (CONFIG_RTPDEC && rt->transport == RTSP_TRANSPORT_RDT)
780 else if (CONFIG_RTPDEC && rt->transport == RTSP_TRANSPORT_RTP)
791 RTSPState *rt = s->priv_data;
796 for (i = 0; i < rt->nb_rtsp_streams; i++) {
797 rtsp_st = rt->rtsp_streams[i];
815 av_freep(&rt->rtsp_streams);
816 if (rt->asf_ctx) {
817 avformat_close_input(&rt->asf_ctx);
819 if (CONFIG_RTPDEC && rt->ts)
820 avpriv_mpegts_parse_close(rt->ts);
821 av_freep(&rt->p);
822 av_freep(&rt->recvbuf);
827 RTSPState *rt = s->priv_data;
829 int reordering_queue_size = rt->reordering_queue_size;
831 if (rt->lower_transport == RTSP_LOWER_TRANSPORT_TCP || !s->max_delay)
846 rt->pkt_size,
853 } else if (rt->transport == RTSP_TRANSPORT_RAW) {
855 } else if (CONFIG_RTPDEC && rt->transport == RTSP_TRANSPORT_RDT && st)
866 } else if (CONFIG_RTPDEC && rt->transport == RTSP_TRANSPORT_RTP &&
1034 static void handle_rtp_info(RTSPState *rt, const char *url,
1040 if (rt->transport != RTSP_TRANSPORT_RTP)
1042 for (i = 0; i < rt->nb_rtsp_streams; i++) {
1043 RTSPStream *rtsp_st = rt->rtsp_streams[i];
1054 static void rtsp_parse_rtp_info(RTSPState *rt, const char *p)
1077 handle_rtp_info(rt, url, seq, rtptime);
1086 handle_rtp_info(rt, url, seq, rtptime);
1091 RTSPState *rt, const char *method)
1124 } else if (av_stristart(p, "WWW-Authenticate:", &p) && rt) {
1126 ff_http_auth_handle_header(&rt->auth_state, "WWW-Authenticate", p);
1127 } else if (av_stristart(p, "Authentication-Info:", &p) && rt) {
1129 ff_http_auth_handle_header(&rt->auth_state, "Authentication-Info", p);
1130 } else if (av_stristart(p, "Content-Base:", &p) && rt) {
1133 av_strlcpy(rt->control_uri, p , sizeof(rt->control_uri));
1134 } else if (av_stristart(p, "RTP-Info:", &p) && rt) {
1137 rtsp_parse_rtp_info(rt, p);
1138 } else if (av_stristart(p, "Public:", &p) && rt) {
1141 rt->get_parameter_supported = 1;
1142 } else if (av_stristart(p, "x-Accept-Dynamic-Rate:", &p) && rt) {
1144 rt->accept_dynamic_rate = atoi(p);
1157 RTSPState *rt = s->priv_data;
1161 ret = ffurl_read_complete(rt->rtsp_hd, buf, 3);
1173 ret = ffurl_read_complete(rt->rtsp_hd, buf, len1);
1186 RTSPState *rt = s->priv_data;
1200 rt->last_reply[0] = '\0';
1204 ret = ffurl_read_complete(rt->rtsp_hd, &ch, 1);
1244 ff_rtsp_parse_line(s, reply, p, rt, method);
1245 av_strlcat(rt->last_reply, p, sizeof(rt->last_reply));
1246 av_strlcat(rt->last_reply, "\n", sizeof(rt->last_reply));
1251 if (rt->session_id[0] == '\0' && reply->session_id[0] != '\0' && !request)
1252 av_strlcpy(rt->session_id, reply->session_id, sizeof(rt->session_id));
1260 if ((ret = ffurl_read_complete(rt->rtsp_hd, content, content_length)) != content_length) {
1289 if (rt->control_transport == RTSP_MODE_TUNNEL) {
1293 ffurl_write(rt->rtsp_hd_out, ptr, strlen(ptr));
1295 rt->last_cmd_time = av_gettime_relative();
1310 if (rt->seq != reply->seq) {
1312 rt->seq, reply->seq);
1319 rt->state = RTSP_STATE_IDLE;
1348 RTSPState *rt = s->priv_data;
1352 if (!rt->rtsp_hd_out)
1357 rt->seq++;
1361 av_strlcatf(buf, sizeof(buf), "CSeq: %d\r\n", rt->seq);
1362 av_strlcatf(buf, sizeof(buf), "User-Agent: %s\r\n", rt->user_agent);
1363 if (rt->session_id[0] != '\0' && (!headers ||
1365 av_strlcatf(buf, sizeof(buf), "Session: %s\r\n", rt->session_id);
1367 if (rt->auth[0]) {
1368 char *str = ff_http_auth_create_response(&rt->auth_state,
1369 rt->auth, url, method);
1379 if (rt->control_transport == RTSP_MODE_TUNNEL) {
1386 ffurl_write(rt->rtsp_hd_out, out_buf, strlen(out_buf));
1388 if (rt->control_transport == RTSP_MODE_TUNNEL) {
1392 ffurl_write(rt->rtsp_hd_out, send_content, send_content_length);
1394 rt->last_cmd_time = av_gettime_relative();
1421 RTSPState *rt = s->priv_data;
1426 cur_auth_type = rt->auth_state.auth_type;
1437 (cur_auth_type == HTTP_AUTH_NONE || rt->auth_state.stale) &&
1438 rt->auth_state.auth_type != HTTP_AUTH_NONE && attempts < 2)
1446 av_log(s, AV_LOG_DEBUG, "%s\n", rt->last_reply);
1455 RTSPState *rt = s->priv_data;
1462 if (rt->transport == RTSP_TRANSPORT_RDT)
1464 else if (rt->transport == RTSP_TRANSPORT_RAW)
1470 rt->timeout = 60;
1475 if (rt->rtp_port_max - rt->rtp_port_min >= 4) {
1476 port_off = av_get_random_seed() % ((rt->rtp_port_max - rt->rtp_port_min)/2);
1481 for (j = rt->rtp_port_min + port_off, i = 0; i < rt->nb_rtsp_streams; ++i) {
1490 rt->server_type == RTSP_SERVER_WMS) {
1493 for (rtx = 0; rtx < rt->nb_rtsp_streams; rtx++) {
1494 int len = strlen(rt->rtsp_streams[rtx]->control_url);
1496 !strcmp(rt->rtsp_streams[rtx]->control_url + len - 4,
1500 if (rtx == rt->nb_rtsp_streams)
1502 rtsp_st = rt->rtsp_streams[rtx];
1504 rtsp_st = rt->rtsp_streams[i > rtx ? i : i - 1];
1506 rtsp_st = rt->rtsp_streams[i];
1512 if (rt->server_type == RTSP_SERVER_WMS && i > 1) {
1518 while (j + 1 <= rt->rtp_port_max) {
1519 AVDictionary *opts = map_to_opts(rt);
1542 rt->server_type == RTSP_SERVER_SATIP ? ";" : "/UDP;",
1544 if (rt->server_type != RTSP_SERVER_REAL)
1548 if (rt->transport == RTSP_TRANSPORT_RTP &&
1549 !(rt->server_type == RTSP_SERVER_WMS && i > 0))
1558 if (rt->server_type == RTSP_SERVER_WMS &&
1565 if (rt->transport != RTSP_TRANSPORT_RDT)
1579 } else if (rt->server_type == RTSP_SERVER_REAL ||
1580 rt->server_type == RTSP_SERVER_WMS)
1585 if (rt->accept_dynamic_rate)
1587 if (CONFIG_RTPDEC && i == 0 && rt->server_type == RTSP_SERVER_REAL) {
1594 rt->session_id, real_res, real_csum);
1606 if (rt->server_type == RTSP_SERVER_SATIP && reply->stream_id[0]) {
1610 &port, path, sizeof(path), rt->control_uri);
1611 ff_url_join(rt->control_uri, sizeof(rt->control_uri), proto, NULL, host,
1617 if (reply->transports[0].lower_transport != rt->lower_transport ||
1618 reply->transports[0].transport != rt->transport) {
1623 rt->lower_transport = reply->transports[0].lower_transport;
1624 rt->transport = reply->transports[0].transport;
1645 if (rt->rtsp_flags & RTSP_FLAG_FILTER_SRC)
1652 if (!(rt->server_type == RTSP_SERVER_WMS && i > 1) &&
1663 AVDictionary *opts = map_to_opts(rt);
1696 if (rt->nb_rtsp_streams && reply->timeout > 0)
1697 rt->timeout = reply->timeout;
1699 if (rt->server_type == RTSP_SERVER_REAL)
1700 rt->need_subscription = 1;
1711 RTSPState *rt = s->priv_data;
1712 if (rt->rtsp_hd_out != rt->rtsp_hd)
1713 ffurl_closep(&rt->rtsp_hd_out);
1714 rt->rtsp_hd_out = NULL;
1715 ffurl_closep(&rt->rtsp_hd);
1720 RTSPState *rt = s->priv_data;
1733 if (rt->rtp_port_max < rt->rtp_port_min) {
1735 "than min port %d\n", rt->rtp_port_max,
1736 rt->rtp_port_min);
1746 rt->control_transport = RTSP_MODE_PLAIN;
1747 if (rt->lower_transport_mask & ((1 << RTSP_LOWER_TRANSPORT_HTTP) |
1749 https_tunnel = !!(rt->lower_transport_mask & (1 << RTSP_LOWER_TRANSPORT_HTTPS));
1750 rt->lower_transport_mask = 1 << RTSP_LOWER_TRANSPORT_TCP;
1751 rt->control_transport = RTSP_MODE_TUNNEL;
1754 rt->lower_transport_mask &= (1 << RTSP_LOWER_TRANSPORT_NB) - 1;
1765 rt->lower_transport_mask = 1 << RTSP_LOWER_TRANSPORT_TCP;
1768 rt->server_type = RTSP_SERVER_SATIP;
1772 av_strlcpy(rt->auth, auth, sizeof(rt->auth));
1777 lower_transport_mask = rt->lower_transport_mask;
1786 if (!lower_transport_mask || rt->control_transport == RTSP_MODE_TUNNEL) {
1797 ff_url_join(rt->control_uri, sizeof(rt->control_uri), proto, NULL,
1800 if (rt->control_transport == RTSP_MODE_TUNNEL) {
1807 av_dict_set_int(&options, "timeout", rt->stimeout, 0);
1814 if (ffurl_alloc(&rt->rtsp_hd, httpname, AVIO_FLAG_READ,
1827 av_opt_set(rt->rtsp_hd->priv_data, "headers", headers, 0);
1829 if (!rt->rtsp_hd->protocol_whitelist && s->protocol_whitelist) {
1830 rt->rtsp_hd->protocol_whitelist = av_strdup(s->protocol_whitelist);
1831 if (!rt->rtsp_hd->protocol_whitelist) {
1838 if (ffurl_connect(rt->rtsp_hd, &options)) {
1845 if (ffurl_alloc(&rt->rtsp_hd_out, httpname, AVIO_FLAG_WRITE,
1860 av_opt_set(rt->rtsp_hd_out->priv_data, "headers", headers, 0);
1861 av_opt_set(rt->rtsp_hd_out->priv_data, "chunked_post", "0", 0);
1862 av_opt_set(rt->rtsp_hd_out->priv_data, "send_expect_100", "0", 0);
1880 ff_http_init_auth_state(rt->rtsp_hd_out, rt->rtsp_hd);
1883 if (ffurl_connect(rt->rtsp_hd_out, &options)) {
1894 "?timeout=%"PRId64, rt->stimeout);
1895 if ((ret = ffurl_open_whitelist(&rt->rtsp_hd, tcpname, AVIO_FLAG_READ_WRITE,
1900 rt->rtsp_hd_out = rt->rtsp_hd;
1902 rt->seq = 0;
1904 tcp_fd = ffurl_get_file_handle(rt->rtsp_hd);
1916 if (rt->server_type != RTSP_SERVER_SATIP)
1917 rt->server_type = RTSP_SERVER_RTP;
1920 if (rt->server_type == RTSP_SERVER_REAL)
1936 ff_rtsp_send_cmd(s, "OPTIONS", rt->control_uri, cmd, reply, NULL);
1943 if (rt->server_type != RTSP_SERVER_REAL && reply->real_challenge[0]) {
1944 rt->server_type = RTSP_SERVER_REAL;
1947 rt->server_type = RTSP_SERVER_WMS;
1948 } else if (rt->server_type == RTSP_SERVER_REAL)
1955 if (rt->server_type == RTSP_SERVER_SATIP)
1973 && (rt->rtsp_flags & RTSP_FLAG_PREFER_TCP))
1977 rt->server_type == RTSP_SERVER_REAL ?
1988 rt->lower_transport_mask = lower_transport_mask;
1989 av_strlcpy(rt->real_challenge, real_challenge, sizeof(rt->real_challenge));
1990 rt->state = RTSP_STATE_IDLE;
1991 rt->seek_timestamp = 0; /* default is to start stream at position zero */
2003 rt->session_id[0] = '\0';
2019 RTSPState *rt = s->priv_data;
2022 if (rt->rtsp_flags & RTSP_FLAG_LISTEN) {
2023 if (rt->state == RTSP_STATE_STREAMING) {
2033 if (rt->state != RTSP_STATE_STREAMING)
2044 RTSPState *rt = s->priv_data;
2047 struct pollfd *p = rt->p;
2049 int64_t runs = rt->stimeout / POLLING_TIME / 1000;
2052 p = rt->p = av_malloc_array(2 * rt->nb_rtsp_streams + 1, sizeof(*p));
2056 if (rt->rtsp_hd) {
2057 p[rt->max_p].fd = ffurl_get_file_handle(rt->rtsp_hd);
2058 p[rt->max_p++].events = POLLIN;
2060 for (i = 0; i < rt->nb_rtsp_streams; i++) {
2061 rtsp_st = rt->rtsp_streams[i];
2074 p[rt->max_p].fd = fds[fdsidx];
2075 p[rt->max_p++].events = POLLIN;
2087 n = poll(p, rt->max_p, POLLING_TIME);
2089 int j = rt->rtsp_hd ? 1 : 0;
2090 for (i = 0; i < rt->nb_rtsp_streams; i++) {
2091 rtsp_st = rt->rtsp_streams[i];
2104 if (rt->rtsp_hd && p[0].revents & POLLIN) {
2110 } else if (n == 0 && rt->stimeout > 0 && --runs <= 0) {
2120 RTSPState *rt = s->priv_data;
2124 if (rt->nb_rtsp_streams == 1) {
2125 *rtsp_st = rt->rtsp_streams[0];
2128 if (len >= 8 && rt->transport == RTSP_TRANSPORT_RTP) {
2129 if (RTP_PT_IS_RTCP(rt->recvbuf[1])) {
2131 for (i = 0; i < rt->nb_rtsp_streams; i++) {
2132 RTPDemuxContext *rtpctx = rt->rtsp_streams[i]->transport_priv;
2136 *rtsp_st = rt->rtsp_streams[i];
2149 for (i = 0; i < rt->nb_rtsp_streams; i++) {
2150 if ((buf[1] & 0x7f) == rt->rtsp_streams[i]->sdp_payload_type) {
2151 *rtsp_st = rt->rtsp_streams[i];
2165 RTSPState *rt = s->priv_data;
2168 switch(rt->lower_transport) {
2172 len = ff_rtsp_tcp_read_packet(s, rtsp_st, rt->recvbuf, RECVBUF_SIZE);
2177 len = udp_read_packet(s, rtsp_st, rt->recvbuf, RECVBUF_SIZE, wait_end);
2178 if (len > 0 && (*rtsp_st)->transport_priv && rt->transport == RTSP_TRANSPORT_RTP)
2182 if (first_queue_st && rt->transport == RTSP_TRANSPORT_RTP &&
2186 len = avio_read_partial(s->pb, rt->recvbuf, RECVBUF_SIZE);
2187 len = pick_stream(s, rtsp_st, rt->recvbuf, len);
2188 if (len > 0 && (*rtsp_st)->transport_priv && rt->transport == RTSP_TRANSPORT_RTP)
2201 RTSPState *rt = s->priv_data;
2206 if (rt->nb_byes == rt->nb_rtsp_streams)
2210 if (rt->cur_transport_priv) {
2211 if (rt->transport == RTSP_TRANSPORT_RDT) {
2212 ret = ff_rdt_parse_packet(rt->cur_transport_priv, pkt, NULL, 0);
2213 } else if (rt->transport == RTSP_TRANSPORT_RTP) {
2214 ret = ff_rtp_parse_packet(rt->cur_transport_priv, pkt, NULL, 0);
2215 } else if (CONFIG_RTPDEC && rt->ts) {
2216 ret = avpriv_mpegts_parse_packet(rt->ts, pkt, rt->recvbuf + rt->recvbuf_pos, rt->recvbuf_len - rt->recvbuf_pos);
2218 rt->recvbuf_pos += ret;
2219 ret = rt->recvbuf_pos < rt->recvbuf_len;
2224 rt->cur_transport_priv = NULL;
2229 rt->cur_transport_priv = NULL;
2233 if (rt->transport == RTSP_TRANSPORT_RTP) {
2236 for (i = 0; i < rt->nb_rtsp_streams; i++) {
2237 RTPDemuxContext *rtpctx = rt->rtsp_streams[i]->transport_priv;
2245 first_queue_st = rt->rtsp_streams[i];
2257 if (!rt->recvbuf) {
2258 rt->recvbuf = av_malloc(RECVBUF_SIZE);
2259 if (!rt->recvbuf)
2265 rt->transport == RTSP_TRANSPORT_RTP) {
2275 if (rt->transport == RTSP_TRANSPORT_RDT) {
2276 ret = ff_rdt_parse_packet(rtsp_st->transport_priv, pkt, &rt->recvbuf, len);
2277 } else if (rt->transport == RTSP_TRANSPORT_RTP) {
2278 ret = ff_rtp_parse_packet(rtsp_st->transport_priv, pkt, &rt->recvbuf, len);
2281 if (rt->lower_transport == RTSP_LOWER_TRANSPORT_CUSTOM)
2298 for (i = 0; i < rt->nb_rtsp_streams; i++) {
2299 RTPDemuxContext *rtpctx2 = rt->rtsp_streams[i]->transport_priv;
2301 if (rt->rtsp_streams[i]->stream_index >= 0)
2302 st2 = s->streams[rt->rtsp_streams[i]->stream_index];
2321 rt->nb_byes++;
2324 rtsp_st->stream_index, rt->nb_byes, rt->nb_rtsp_streams);
2326 if (rt->nb_byes == rt->nb_rtsp_streams)
2330 } else if (CONFIG_RTPDEC && rt->ts) {
2331 ret = avpriv_mpegts_parse_packet(rt->ts, pkt, rt->recvbuf, len);
2334 rt->recvbuf_len = len;
2335 rt->recvbuf_pos = ret;
2336 rt->cur_transport_priv = rt->ts;
2350 rt->cur_transport_priv = rtsp_st->transport_priv;
2389 RTSPState *rt = s->priv_data;
2400 if (rt->rtsp_flags & RTSP_FLAG_CUSTOM_IO)
2401 rt->lower_transport = RTSP_LOWER_TRANSPORT_CUSTOM;
2416 for (i = 0; i < rt->nb_rtsp_streams; i++) {
2418 rtsp_st = rt->rtsp_streams[i];
2420 if (!(rt->rtsp_flags & RTSP_FLAG_CUSTOM_IO)) {
2421 AVDictionary *opts = map_to_opts(rt);
2438 rt->rtsp_flags & RTSP_FLAG_FILTER_SRC ? 1 : 0,
2439 rt->rtsp_flags & RTSP_FLAG_RTCP_TO_SOURCE ? 1 : 0);
2444 else if (rt->localaddr && rt->localaddr[0])
2445 av_strlcatf(url, sizeof(url), "&localaddr=%s", rt->localaddr);
2517 RTSPState *rt = s->priv_data;
2525 opts = map_to_opts(rt);
2620 rt->media_type_mask = (1 << (AVMEDIA_TYPE_SUBTITLE+1)) - 1;