Mercurial > libavformat.hg
diff rtsp.c @ 5864:0ff0826b6c3d libavformat
Add support for TCP as lower transport in the RTSP muxer
author | mstorsjo |
---|---|
date | Mon, 22 Mar 2010 15:07:05 +0000 |
parents | 57fc219dc951 |
children | 80c95562a705 |
line wrap: on
line diff
--- a/rtsp.c Mon Mar 22 14:44:28 2010 +0000 +++ b/rtsp.c Mon Mar 22 15:07:05 2010 +0000 @@ -584,7 +584,13 @@ if (s->oformat) { AVFormatContext *rtpctx = rtsp_st->transport_priv; av_write_trailer(rtpctx); + if (rt->lower_transport == RTSP_LOWER_TRANSPORT_TCP) { + uint8_t *ptr; + url_close_dyn_buf(rtpctx->pb, &ptr); + av_free(ptr); + } else { url_fclose(rtpctx->pb); + } av_metadata_free(&rtpctx->streams[0]->metadata); av_metadata_free(&rtpctx->metadata); av_free(rtpctx->streams[0]); @@ -644,11 +650,20 @@ av_free(rtpctx->streams[0]->codec); rtpctx->streams[0]->codec = st->codec; + if (handle) { url_fdopen(&rtpctx->pb, handle); + } else + url_open_dyn_packet_buf(&rtpctx->pb, RTSP_TCP_MAX_PACKET_SIZE); ret = av_write_header(rtpctx); if (ret) { + if (handle) { url_fclose(rtpctx->pb); + } else { + uint8_t *ptr; + url_close_dyn_buf(rtpctx->pb, &ptr); + av_free(ptr); + } av_free(rtpctx->streams[0]); av_free(rtpctx); return NULL; @@ -1464,11 +1479,12 @@ lower_transport_mask = (1 << RTSP_LOWER_TRANSPORT_NB) - 1; if (s->oformat) { - /* Only UDP output is supported at the moment. */ - lower_transport_mask &= 1 << RTSP_LOWER_TRANSPORT_UDP; + /* Only UDP or TCP - UDP multicast isn't supported. */ + lower_transport_mask &= (1 << RTSP_LOWER_TRANSPORT_UDP) | + (1 << RTSP_LOWER_TRANSPORT_TCP); if (!lower_transport_mask) { av_log(s, AV_LOG_ERROR, "Unsupported lower transport method, " - "only UDP is supported for output.\n"); + "only UDP and TCP are supported for output.\n"); err = AVERROR(EINVAL); goto fail; }