X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Frtspenc.c;h=d8e5b0e212a1eb0d00afe7f39df96f7683087f2c;hb=342c43d154e586bc022c86b168fe8d36f69da9d3;hp=c1fc97ca8f8c1ef340e64c3673c617231655aacc;hpb=c3675dfe1e345a81d704fa0dd31151b8d54589ee;p=ffmpeg diff --git a/libavformat/rtspenc.c b/libavformat/rtspenc.c index c1fc97ca8f8..d8e5b0e212a 100644 --- a/libavformat/rtspenc.c +++ b/libavformat/rtspenc.c @@ -21,7 +21,6 @@ #include "avformat.h" -#include #if HAVE_POLL_H #include #endif @@ -32,10 +31,18 @@ #include "avio_internal.h" #include "libavutil/intreadwrite.h" #include "libavutil/avstring.h" +#include "libavutil/time.h" #include "url.h" #define SDP_MAX_SIZE 16384 +static const AVClass rtsp_muxer_class = { + .class_name = "RTSP muxer", + .item_name = av_default_item_name, + .option = ff_rtsp_options, + .version = LIBAVUTIL_VERSION_INT, +}; + int ff_rtsp_setup_output_streams(AVFormatContext *s, const char *addr) { RTSPState *rt = s->priv_data; @@ -138,6 +145,7 @@ static int tcp_write_packet(AVFormatContext *s, RTSPStream *rtsp_st) uint8_t *interleave_header, *interleaved_packet; size = avio_close_dyn_buf(rtpctx->pb, &buf); + rtpctx->pb = NULL; ptr = buf; while (size > 4) { uint32_t packet_len = AV_RB32(ptr); @@ -152,7 +160,7 @@ static int tcp_write_packet(AVFormatContext *s, RTSPStream *rtsp_st) size -= 4; if (packet_len > size || packet_len < 2) break; - if (ptr[1] >= RTCP_SR && ptr[1] <= RTCP_APP) + if (RTP_PT_IS_RTCP(ptr[1])) id = rtsp_st->interleaved_max; /* RTCP */ else id = rtsp_st->interleaved_min; /* RTP */ @@ -164,8 +172,7 @@ static int tcp_write_packet(AVFormatContext *s, RTSPStream *rtsp_st) size -= packet_len; } av_free(buf); - ffio_open_dyn_packet_buf(&rtpctx->pb, RTSP_TCP_MAX_PACKET_SIZE); - return 0; + return ffio_open_dyn_packet_buf(&rtpctx->pb, RTSP_TCP_MAX_PACKET_SIZE); } static int rtsp_write_packet(AVFormatContext *s, AVPacket *pkt) @@ -227,16 +234,14 @@ static int rtsp_write_close(AVFormatContext *s) } AVOutputFormat ff_rtsp_muxer = { - "rtsp", - NULL_IF_CONFIG_SMALL("RTSP output format"), - NULL, - NULL, - sizeof(RTSPState), - CODEC_ID_AAC, - CODEC_ID_MPEG4, - rtsp_write_header, - rtsp_write_packet, - rtsp_write_close, - .flags = AVFMT_NOFILE | AVFMT_GLOBALHEADER, + .name = "rtsp", + .long_name = NULL_IF_CONFIG_SMALL("RTSP output"), + .priv_data_size = sizeof(RTSPState), + .audio_codec = AV_CODEC_ID_AAC, + .video_codec = AV_CODEC_ID_MPEG4, + .write_header = rtsp_write_header, + .write_packet = rtsp_write_packet, + .write_trailer = rtsp_write_close, + .flags = AVFMT_NOFILE | AVFMT_GLOBALHEADER, + .priv_class = &rtsp_muxer_class, }; -