[FFmpeg-devel] [PATCH v1 2/2] avformat/rtpproto, sdp: write rtcp port to sdp file
Jun Li
junli1026 at gmail.com
Thu Feb 20 21:03:31 EET 2020
On Sun, Feb 9, 2020 at 3:01 PM Jun Li <junli1026 at gmail.com> wrote:
>
>
> On Mon, Feb 3, 2020 at 4:34 PM Jun Li <junli1026 at gmail.com> wrote:
>
>> Fix #8474
>> Write rtcp port attribute to sdp file when necessary.
>>
>> Signed-off-by: Jun Li <junli1026 at gmail.com>
>> ---
>> libavformat/rtpproto.c | 11 +++++++++++
>> libavformat/rtpproto.h | 2 ++
>> libavformat/sdp.c | 12 ++++++++++--
>> 3 files changed, 23 insertions(+), 2 deletions(-)
>>
>> diff --git a/libavformat/rtpproto.c b/libavformat/rtpproto.c
>> index 1f0a82ac7e..81a39cc3de 100644
>> --- a/libavformat/rtpproto.c
>> +++ b/libavformat/rtpproto.c
>> @@ -524,6 +524,17 @@ int ff_rtp_get_local_rtp_port(URLContext *h)
>> return ff_udp_get_local_port(s->rtp_hd);
>> }
>>
>> +/**
>> + * Return the remote rtcp port used by the RTP connection
>> + * @param h media file context
>> + * @return the remote port number
>> + */
>> +int ff_rtp_get_remote_rtcp_port(URLContext *h)
>> +{
>> + RTPContext *s = h->priv_data;
>> + return s->rtcp_port;
>> +}
>> +
>> /**
>> * Return the local rtcp port used by the RTP connection
>> * @param h media file context
>> diff --git a/libavformat/rtpproto.h b/libavformat/rtpproto.h
>> index 131aac5f3c..d42327ea5c 100644
>> --- a/libavformat/rtpproto.h
>> +++ b/libavformat/rtpproto.h
>> @@ -27,4 +27,6 @@ int ff_rtp_set_remote_url(URLContext *h, const char
>> *uri);
>>
>> int ff_rtp_get_local_rtp_port(URLContext *h);
>>
>> +int ff_rtp_get_remote_rtcp_port(URLContext *h);
>> +
>> #endif /* AVFORMAT_RTPPROTO_H */
>> diff --git a/libavformat/sdp.c b/libavformat/sdp.c
>> index 34e9839b67..c3c2909090 100644
>> --- a/libavformat/sdp.c
>> +++ b/libavformat/sdp.c
>> @@ -26,11 +26,13 @@
>> #include "libavutil/opt.h"
>> #include "libavcodec/xiph.h"
>> #include "libavcodec/mpeg4audio.h"
>> +#include "avio_internal.h"
>> #include "avformat.h"
>> #include "internal.h"
>> #include "avc.h"
>> #include "hevc.h"
>> #include "rtp.h"
>> +#include "rtpproto.h"
>> #if CONFIG_NETWORK
>> #include "network.h"
>> #endif
>> @@ -480,10 +482,16 @@ static char *latm_context2config(AVFormatContext
>> *s, AVCodecParameters *par)
>> return config;
>> }
>>
>> -static char *sdp_write_media_attributes(char *buff, int size, AVStream
>> *st, int payload_type, AVFormatContext *fmt)
>> +static char *sdp_write_media_attributes(char *buff, int size, AVStream
>> *st, int payload_type, AVFormatContext *fmt, int port)
>> {
>> char *config = NULL;
>> AVCodecParameters *p = st->codecpar;
>> + URLContext* url_ctx = ffio_geturlcontext(fmt->pb);
>> + if (url_ctx) {
>> + int rtcp_port = ff_rtp_get_remote_rtcp_port(url_ctx);
>> + if (rtcp_port > 0 && rtcp_port != port+1)
>> + av_strlcatf(buff, size, "a=rtcp:%d\r\n", rtcp_port);
>> + }
>>
>> switch (p->codec_id) {
>> case AV_CODEC_ID_DIRAC:
>> @@ -766,7 +774,7 @@ void ff_sdp_write_media(char *buff, int size,
>> AVStream *st, int idx,
>> av_strlcatf(buff, size, "b=AS:%"PRId64"\r\n", p->bit_rate /
>> 1000);
>> }
>>
>> - sdp_write_media_attributes(buff, size, st, payload_type, fmt);
>> + sdp_write_media_attributes(buff, size, st, payload_type, fmt, port);
>> }
>>
>> int av_sdp_create(AVFormatContext *ac[], int n_files, char *buf, int
>> size)
>> --
>> 2.17.1
>>
>>
> Ping
>
Ping x 2
More information about the ffmpeg-devel
mailing list