rt->nb_byes = 0;
if (!(rt->server_type == RTSP_SERVER_REAL && rt->need_subscription)) {
+ if (rt->transport == RTSP_TRANSPORT_RTP) {
+ for (i = 0; i < rt->nb_rtsp_streams; i++) {
+ RTSPStream *rtsp_st = rt->rtsp_streams[i];
+ RTPDemuxContext *rtpctx = rtsp_st->transport_priv;
+ if (!rtpctx)
+ continue;
+ ff_rtp_reset_packet_queue(rtpctx);
+ rtpctx->last_rtcp_ntp_time = AV_NOPTS_VALUE;
+ rtpctx->first_rtcp_ntp_time = AV_NOPTS_VALUE;
+ rtpctx->base_timestamp = 0;
+ rtpctx->rtcp_ts_offset = 0;
+ }
+ }
if (rt->state == RTSP_STATE_PAUSED) {
cmd[0] = 0;
} else {
if (reply->status_code != RTSP_STATUS_OK) {
return -1;
}
- if (rt->transport == RTSP_TRANSPORT_RTP) {
+ if (rt->transport == RTSP_TRANSPORT_RTP &&
+ reply->range_start != AV_NOPTS_VALUE) {
for (i = 0; i < rt->nb_rtsp_streams; i++) {
RTSPStream *rtsp_st = rt->rtsp_streams[i];
RTPDemuxContext *rtpctx = rtsp_st->transport_priv;
AVStream *st = NULL;
- if (!rtpctx)
+ if (!rtpctx || rtsp_st->stream_index < 0)
continue;
- if (rtsp_st->stream_index >= 0)
- st = s->streams[rtsp_st->stream_index];
- ff_rtp_reset_packet_queue(rtpctx);
- if (reply->range_start != AV_NOPTS_VALUE) {
- rtpctx->last_rtcp_ntp_time = AV_NOPTS_VALUE;
- rtpctx->first_rtcp_ntp_time = AV_NOPTS_VALUE;
- rtpctx->base_timestamp = 0;
- rtpctx->rtcp_ts_offset = 0;
- if (st)
- rtpctx->range_start_offset =
- av_rescale_q(reply->range_start, AV_TIME_BASE_Q,
- st->time_base);
- }
+ st = s->streams[rtsp_st->stream_index];
+ rtpctx->range_start_offset =
+ av_rescale_q(reply->range_start, AV_TIME_BASE_Q,
+ st->time_base);
}
}
}