static int rtsp_read_header(AVFormatContext *s) { RTSPState *rt = s->priv_data; int ret; ret = ff_rtsp_connect(s); if (ret) return ret; rt->real_setup_cache = av_mallocz(2 * s->nb_streams * sizeof(*rt->real_setup_cache)); if (!rt->real_setup_cache) return AVERROR(ENOMEM); rt->real_setup = rt->real_setup_cache + s->nb_streams; if (rt->initial_pause) { /* do not start immediately */ } else { if (rtsp_read_play(s) < 0) { ff_rtsp_close_streams(s); ff_rtsp_close_connections(s); return AVERROR_INVALIDDATA; } } return 0; }
static int rtsp_write_close(AVFormatContext *s) { RTSPState *rt = s->priv_data; ff_rtsp_send_cmd_async(s, "TEARDOWN", rt->control_uri, NULL); ff_rtsp_close_streams(s); url_close(rt->rtsp_hd); ff_network_close(); return 0; }
static int rtsp_read_close(AVFormatContext *s) { RTSPState *rt = s->priv_data; ff_rtsp_send_cmd_async(s, "TEARDOWN", rt->control_uri, NULL); ff_rtsp_close_streams(s); ff_rtsp_close_connections(s); ff_network_close(); rt->real_setup = NULL; av_freep(&rt->real_setup_cache); return 0; }
static int rtsp_write_header(AVFormatContext *s) { int ret; ret = ff_rtsp_connect(s); if (ret) return ret; if (rtsp_write_record(s) < 0) { ff_rtsp_close_streams(s); ff_rtsp_close_connections(s); return AVERROR_INVALIDDATA; } return 0; }
static int rtsp_write_header(AVFormatContext *s) { RTSPState *rt = s->priv_data; int ret; ret = ff_rtsp_connect(s); if (ret) return ret; if (rtsp_write_record(s) < 0) { ff_rtsp_close_streams(s); url_close(rt->rtsp_hd); return AVERROR_INVALIDDATA; } return 0; }
static int rtsp_write_close(AVFormatContext *s) { RTSPState *rt = s->priv_data; // If we want to send RTCP_BYE packets, these are sent by av_write_trailer. // Thus call this on all streams before doing the teardown. This is // done within ff_rtsp_undo_setup. ff_rtsp_undo_setup(s, 1); ff_rtsp_send_cmd_async(s, "TEARDOWN", rt->control_uri, NULL); ff_rtsp_close_streams(s); ff_rtsp_close_connections(s); ff_network_close(); return 0; }
static int rtsp_read_close(AVFormatContext *s) { RTSPState *rt = s->priv_data; #if 0 /* NOTE: it is valid to flush the buffer here */ if (rt->lower_transport == RTSP_LOWER_TRANSPORT_TCP) { avio_close(&rt->rtsp_gb); } #endif ff_rtsp_send_cmd_async(s, "TEARDOWN", rt->control_uri, NULL); ff_rtsp_close_streams(s); ff_rtsp_close_connections(s); ff_network_close(); rt->real_setup = NULL; av_freep(&rt->real_setup_cache); return 0; }
static int rtsp_read_header(AVFormatContext *s) { RTSPState *rt = s->priv_data; int ret; if (rt->initial_timeout > 0) rt->rtsp_flags |= RTSP_FLAG_LISTEN; if (rt->rtsp_flags & RTSP_FLAG_LISTEN) { ret = rtsp_listen(s); if (ret) return ret; } else { ret = ff_rtsp_connect(s); if (ret) return ret; rt->real_setup_cache = !s->nb_streams ? NULL : av_mallocz(2 * s->nb_streams * sizeof(*rt->real_setup_cache)); if (!rt->real_setup_cache && s->nb_streams) return AVERROR(ENOMEM); rt->real_setup = rt->real_setup_cache + s->nb_streams; if (rt->initial_pause) { /* do not start immediately */ } else { if (rtsp_read_play(s) < 0) { ff_rtsp_close_streams(s); ff_rtsp_close_connections(s); return AVERROR_INVALIDDATA; } } } return 0; }