Signed-off-by: Martin Storsjö <martin@martin.st>tags/n1.1
@@ -226,7 +226,7 @@ static int rtp_valid_packet_in_sequence(RTPStatistics *s, uint16_t seq) | |||
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; | |||
uint8_t *buf; | |||
@@ -242,7 +242,7 @@ int ff_rtp_check_and_send_back_rr(RTPDemuxContext *s, int count) | |||
uint32_t fraction; | |||
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; | |||
/* 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) { | |||
int av_unused result; | |||
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_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) | |||
*/ | |||
RTPDemuxContext *ff_rtp_parse_open(AVFormatContext *s1, AVStream *st, | |||
URLContext *rtpc, int payload_type, | |||
int queue_size) | |||
int payload_type, int queue_size) | |||
{ | |||
RTPDemuxContext *s; | |||
@@ -413,7 +412,6 @@ RTPDemuxContext *ff_rtp_parse_open(AVFormatContext *s1, AVStream *st, | |||
} | |||
} | |||
// needed to send back RTCP RR in RTSP sessions | |||
s->rtp_ctx = rtpc; | |||
gethostname(s->hostname, sizeof(s->hostname)); | |||
return s; | |||
} | |||
@@ -40,8 +40,7 @@ typedef struct RTPDynamicProtocolHandler RTPDynamicProtocolHandler; | |||
typedef struct RTPDemuxContext RTPDemuxContext; | |||
RTPDemuxContext *ff_rtp_parse_open(AVFormatContext *s1, AVStream *st, | |||
URLContext *rtpc, int payload_type, | |||
int queue_size); | |||
int payload_type, int queue_size); | |||
void ff_rtp_parse_set_dynamic_protocol(RTPDemuxContext *s, PayloadContext *ctx, | |||
RTPDynamicProtocolHandler *handler); | |||
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... | |||
* 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) | |||
*/ | |||
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... | |||
typedef struct RTPStatistics { | |||
@@ -158,7 +157,6 @@ struct RTPDemuxContext { | |||
int read_buf_index; | |||
int read_buf_size; | |||
/* used to send back RTCP RR */ | |||
URLContext *rtp_ctx; | |||
char hostname[256]; | |||
/** 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_handler); | |||
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, | |||
reordering_queue_size); | |||
@@ -1860,7 +1860,7 @@ int ff_rtsp_fetch_packet(AVFormatContext *s, AVPacket *pkt) | |||
case RTSP_LOWER_TRANSPORT_UDP_MULTICAST: | |||
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) | |||
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; | |||
} | |||
if (len == AVERROR(EAGAIN) && first_queue_st && | |||