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; | 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 queue_size) | |||||
| int payload_type, 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 queue_size); | |||||
| int payload_type, 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 && | ||||