mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-04-11 03:32:39 +00:00
rtpdec: Move the URLContext used for RTCP RR out from the context, to a parameter
Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
a0b7e28907
commit
3f95f0dda5
@ -226,7 +226,7 @@ static int rtp_valid_packet_in_sequence(RTPStatistics *s, uint16_t seq)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ff_rtp_check_and_send_back_rr(RTPDemuxContext *s, int count)
|
int ff_rtp_check_and_send_back_rr(RTPDemuxContext *s, URLContext *fd, int count)
|
||||||
{
|
{
|
||||||
AVIOContext *pb;
|
AVIOContext *pb;
|
||||||
uint8_t *buf;
|
uint8_t *buf;
|
||||||
@ -242,7 +242,7 @@ int ff_rtp_check_and_send_back_rr(RTPDemuxContext *s, int count)
|
|||||||
uint32_t fraction;
|
uint32_t fraction;
|
||||||
uint64_t ntp_time = s->last_rtcp_ntp_time; // TODO: Get local ntp time?
|
uint64_t ntp_time = s->last_rtcp_ntp_time; // TODO: Get local ntp time?
|
||||||
|
|
||||||
if (!s->rtp_ctx || (count < 1))
|
if (!fd || (count < 1))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* TODO: I think this is way too often; RFC 1889 has algorithm for this */
|
/* TODO: I think this is way too often; RFC 1889 has algorithm for this */
|
||||||
@ -316,7 +316,7 @@ int ff_rtp_check_and_send_back_rr(RTPDemuxContext *s, int count)
|
|||||||
if ((len > 0) && buf) {
|
if ((len > 0) && buf) {
|
||||||
int av_unused result;
|
int av_unused result;
|
||||||
av_dlog(s->ic, "sending %d bytes of RR\n", len);
|
av_dlog(s->ic, "sending %d bytes of RR\n", len);
|
||||||
result = ffurl_write(s->rtp_ctx, buf, len);
|
result = ffurl_write(fd, buf, len);
|
||||||
av_dlog(s->ic, "result from ffurl_write: %d\n", result);
|
av_dlog(s->ic, "result from ffurl_write: %d\n", result);
|
||||||
av_free(buf);
|
av_free(buf);
|
||||||
}
|
}
|
||||||
@ -367,8 +367,7 @@ void ff_rtp_send_punch_packets(URLContext *rtp_handle)
|
|||||||
* rtp demux (otherwise AV_CODEC_ID_MPEG2TS packets are returned)
|
* rtp demux (otherwise AV_CODEC_ID_MPEG2TS packets are returned)
|
||||||
*/
|
*/
|
||||||
RTPDemuxContext *ff_rtp_parse_open(AVFormatContext *s1, AVStream *st,
|
RTPDemuxContext *ff_rtp_parse_open(AVFormatContext *s1, AVStream *st,
|
||||||
URLContext *rtpc, int payload_type,
|
int payload_type, int queue_size)
|
||||||
int queue_size)
|
|
||||||
{
|
{
|
||||||
RTPDemuxContext *s;
|
RTPDemuxContext *s;
|
||||||
|
|
||||||
@ -413,7 +412,6 @@ RTPDemuxContext *ff_rtp_parse_open(AVFormatContext *s1, AVStream *st,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// needed to send back RTCP RR in RTSP sessions
|
// needed to send back RTCP RR in RTSP sessions
|
||||||
s->rtp_ctx = rtpc;
|
|
||||||
gethostname(s->hostname, sizeof(s->hostname));
|
gethostname(s->hostname, sizeof(s->hostname));
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
@ -40,8 +40,7 @@ typedef struct RTPDynamicProtocolHandler RTPDynamicProtocolHandler;
|
|||||||
|
|
||||||
typedef struct RTPDemuxContext RTPDemuxContext;
|
typedef struct RTPDemuxContext RTPDemuxContext;
|
||||||
RTPDemuxContext *ff_rtp_parse_open(AVFormatContext *s1, AVStream *st,
|
RTPDemuxContext *ff_rtp_parse_open(AVFormatContext *s1, AVStream *st,
|
||||||
URLContext *rtpc, int payload_type,
|
int payload_type, int queue_size);
|
||||||
int queue_size);
|
|
||||||
void ff_rtp_parse_set_dynamic_protocol(RTPDemuxContext *s, PayloadContext *ctx,
|
void ff_rtp_parse_set_dynamic_protocol(RTPDemuxContext *s, PayloadContext *ctx,
|
||||||
RTPDynamicProtocolHandler *handler);
|
RTPDynamicProtocolHandler *handler);
|
||||||
int ff_rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt,
|
int ff_rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt,
|
||||||
@ -69,10 +68,10 @@ void ff_rtp_send_punch_packets(URLContext* rtp_handle);
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* some rtp servers assume client is dead if they don't hear from them...
|
* some rtp servers assume client is dead if they don't hear from them...
|
||||||
* so we send a Receiver Report to the provided ByteIO context
|
* so we send a Receiver Report to the provided URLContext
|
||||||
* (we don't have access to the rtcp handle from here)
|
* (we don't have access to the rtcp handle from here)
|
||||||
*/
|
*/
|
||||||
int ff_rtp_check_and_send_back_rr(RTPDemuxContext *s, int count);
|
int ff_rtp_check_and_send_back_rr(RTPDemuxContext *s, URLContext *fd, int count);
|
||||||
|
|
||||||
// these statistics are used for rtcp receiver reports...
|
// these statistics are used for rtcp receiver reports...
|
||||||
typedef struct RTPStatistics {
|
typedef struct RTPStatistics {
|
||||||
@ -158,7 +157,6 @@ struct RTPDemuxContext {
|
|||||||
int read_buf_index;
|
int read_buf_index;
|
||||||
int read_buf_size;
|
int read_buf_size;
|
||||||
/* used to send back RTCP RR */
|
/* used to send back RTCP RR */
|
||||||
URLContext *rtp_ctx;
|
|
||||||
char hostname[256];
|
char hostname[256];
|
||||||
|
|
||||||
/** Statistics for this stream (used by RTCP receiver reports) */
|
/** Statistics for this stream (used by RTCP receiver reports) */
|
||||||
|
@ -643,7 +643,7 @@ int ff_rtsp_open_transport_ctx(AVFormatContext *s, RTSPStream *rtsp_st)
|
|||||||
rtsp_st->dynamic_protocol_context,
|
rtsp_st->dynamic_protocol_context,
|
||||||
rtsp_st->dynamic_handler);
|
rtsp_st->dynamic_handler);
|
||||||
else if (CONFIG_RTPDEC)
|
else if (CONFIG_RTPDEC)
|
||||||
rtsp_st->transport_priv = ff_rtp_parse_open(s, st, rtsp_st->rtp_handle,
|
rtsp_st->transport_priv = ff_rtp_parse_open(s, st,
|
||||||
rtsp_st->sdp_payload_type,
|
rtsp_st->sdp_payload_type,
|
||||||
reordering_queue_size);
|
reordering_queue_size);
|
||||||
|
|
||||||
@ -1860,7 +1860,7 @@ int ff_rtsp_fetch_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
case RTSP_LOWER_TRANSPORT_UDP_MULTICAST:
|
case RTSP_LOWER_TRANSPORT_UDP_MULTICAST:
|
||||||
len = udp_read_packet(s, &rtsp_st, rt->recvbuf, RECVBUF_SIZE, wait_end);
|
len = udp_read_packet(s, &rtsp_st, rt->recvbuf, RECVBUF_SIZE, wait_end);
|
||||||
if (len > 0 && rtsp_st->transport_priv && rt->transport == RTSP_TRANSPORT_RTP)
|
if (len > 0 && rtsp_st->transport_priv && rt->transport == RTSP_TRANSPORT_RTP)
|
||||||
ff_rtp_check_and_send_back_rr(rtsp_st->transport_priv, len);
|
ff_rtp_check_and_send_back_rr(rtsp_st->transport_priv, rtsp_st->rtp_handle, len);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (len == AVERROR(EAGAIN) && first_queue_st &&
|
if (len == AVERROR(EAGAIN) && first_queue_st &&
|
||||||
|
Loading…
Reference in New Issue
Block a user