static void event_queue_cb(MediaStream *ms, void *user_pointer) { stats_t *st = (stats_t *)user_pointer; OrtpEvent *ev = NULL; if (st->q != NULL) { while ((ev = ortp_ev_queue_get(st->q)) != NULL) { OrtpEventType evt = ortp_event_get_type(ev); OrtpEventData *d = ortp_event_get_data(ev); if (evt == ORTP_EVENT_TMMBR_RECEIVED) { do { if (rtcp_is_RTPFB(d->packet)) { switch (rtcp_RTPFB_get_type(d->packet)) { case RTCP_RTPFB_TMMBR: st->number_of_TMMBR++; break; default: break; } } } while (rtcp_next_packet(d->packet)); } ortp_event_destroy(ev); } } }
static void event_queue_cb(MediaStream *ms, void *user_pointer) { LossRateEstimatorCtx *ctx = (LossRateEstimatorCtx*)user_pointer; if (ctx->q != NULL) { OrtpEvent *ev = NULL; while ((ev = ortp_ev_queue_get(ctx->q)) != NULL) { OrtpEventType evt = ortp_event_get_type(ev); OrtpEventData *evd = ortp_event_get_data(ev); if (evt == ORTP_EVENT_RTCP_PACKET_RECEIVED) { do { const report_block_t *rb=NULL; if (rtcp_is_SR(evd->packet)){ rb=rtcp_SR_get_report_block(evd->packet,0); }else if (rtcp_is_RR(evd->packet)){ rb=rtcp_RR_get_report_block(evd->packet,0); } if (rb&&ortp_loss_rate_estimator_process_report_block(ctx->estimator,&ms->sessions.rtp_session->rtp,rb)){ float diff = fabs(ortp_loss_rate_estimator_get_value(ctx->estimator) - ctx->loss_rate); CU_ASSERT_IN_RANGE(diff, 0, 10); } } while (rtcp_next_packet(evd->packet)); } ortp_event_destroy(ev); } } }
static void media_stream_process_rtcp(MediaStream *stream, mblk_t *m, time_t curtime){ stream->last_packet_time=curtime; ms_message("%s stream [%p]: receiving RTCP %s%s",media_stream_type_str(stream),stream,(rtcp_is_SR(m)?"SR":""),(rtcp_is_RR(m)?"RR":"")); do{ if (stream->rc_enable && stream->rc) ms_bitrate_controller_process_rtcp(stream->rc,m); if (stream->qi) ms_quality_indicator_update_from_feedback(stream->qi,m); stream->process_rtcp(stream,m); }while(rtcp_next_packet(m)); }
static void parse_rtcp(mblk_t *m){ do{ if (rtcp_is_RR(m)){ ms_message("Receiving RTCP RR"); }else if (rtcp_is_SR(m)){ ms_message("Receiving RTCP SR"); }else if (rtcp_is_SDES(m)){ ms_message("Receiving RTCP SDES"); rtcp_sdes_parse(m,display_items,NULL); }else { ms_message("Receiving unhandled RTCP message"); } }while(rtcp_next_packet(m)); }
static void video_steam_process_rtcp(VideoStream *stream, mblk_t *m){ do{ if (rtcp_is_SR(m)){ const report_block_t *rb; ms_message("video_steam_process_rtcp: receiving RTCP SR"); rb=rtcp_SR_get_report_block(m,0); if (rb){ unsigned int ij; float flost; ij=report_block_get_interarrival_jitter(rb); flost=100.0*report_block_get_fraction_lost(rb)/256.0; ms_message("interarrival jitter=%u , lost packets percentage since last report=%f ",ij,flost); if (stream->adapt_bitrate) video_stream_adapt_bitrate(stream,ij,flost); } } }while(rtcp_next_packet(m)); }
static void audio_steam_process_rtcp(AudioStream *stream, mblk_t *m){ do{ if (rtcp_is_SR(m)){ const report_block_t *rb; //ms_message("audio_steam_process_rtcp: receiving RTCP SR"); rb=rtcp_SR_get_report_block(m,0); if (rb){ unsigned int ij; float flost; ij=report_block_get_interarrival_jitter(rb); flost=(float)(100.0*report_block_get_fraction_lost(rb)/256.0); if(stream->quality_cb!=NULL && stream->userdata!=NULL) stream->quality_cb(stream->userdata,ij,flost); ms_message("Audio RTCP Report: jitter=%u , lost packets percentage=%2.2f%%",ij,flost); } } }while(rtcp_next_packet(m)); }
static void video_steam_process_rtcp(VideoStream *stream, mblk_t *m){ do{ if (rtcp_is_SR(m)){ const report_block_t *rb; ms_message("video_steam_process_rtcp: receiving RTCP SR"); rb=rtcp_SR_get_report_block(m,0); if (rb){ unsigned int ij; float rt=rtp_session_get_round_trip_propagation(stream->ms.session); float flost; ij=report_block_get_interarrival_jitter(rb); flost=(float)(100.0*report_block_get_fraction_lost(rb)/256.0); ms_message("video_steam_process_rtcp: interarrival jitter=%u , lost packets percentage since last report=%f, round trip time=%f seconds",ij,flost,rt); if (stream->ms.rc) ms_bitrate_controller_process_rtcp(stream->ms.rc,m); } } }while(rtcp_next_packet(m)); }
static void parse_rtcp(mblk_t *m) { const report_block_t *rb; do { if (rtcp_is_RR(m)) { ms_message("Receiving RTCP RR"); } else if (rtcp_is_SR(m)) { ms_message("Receiving RTCP SR"); rb=rtcp_SR_get_report_block(m,0); if (rb) { ms_message("interarrival jitter=%u", report_block_get_interarrival_jitter(rb)); } } else if (rtcp_is_SDES(m)) { ms_message("Receiving RTCP SDES"); rtcp_sdes_parse(m,display_items,NULL); } else { ms_message("Receiving unhandled RTCP message"); } } while(rtcp_next_packet(m)); }
static void audio_stream_process_rtcp(AudioStream *stream, mblk_t *m){ do{ const report_block_t *rb=NULL; if (rtcp_is_SR(m)){ rb=rtcp_SR_get_report_block(m,0); }else if (rtcp_is_RR(m)){ rb=rtcp_RR_get_report_block(m,0); } if (rb){ unsigned int ij; float rt=rtp_session_get_round_trip_propagation(stream->ms.session); float flost; ij=report_block_get_interarrival_jitter(rb); flost=(float)(100.0*report_block_get_fraction_lost(rb)/256.0); ms_message("audio_stream_iterate(): remote statistics available\n\tremote's interarrival jitter=%u\n" "\tremote's lost packets percentage since last report=%f\n\tround trip time=%f seconds",ij,flost,rt); if (stream->ms.rc) ms_bitrate_controller_process_rtcp(stream->ms.rc,m); if (stream->ms.qi) ms_quality_indicator_update_from_feedback(stream->ms.qi,m); } }while(rtcp_next_packet(m)); }
static void event_queue_cb(MediaStream *ms, void *user_pointer) { video_stream_tester_stats_t *st = (video_stream_tester_stats_t *)user_pointer; OrtpEvent *ev = NULL; if (st->q != NULL) { while ((ev = ortp_ev_queue_get(st->q)) != NULL) { OrtpEventType evt = ortp_event_get_type(ev); OrtpEventData *d = ortp_event_get_data(ev); if (evt == ORTP_EVENT_RTCP_PACKET_EMITTED) { do { if (rtcp_is_RR(d->packet)) { st->number_of_RR++; } else if (rtcp_is_SR(d->packet)) { st->number_of_SR++; } else if (rtcp_is_SDES(d->packet)) { st->number_of_SDES++; } else if (rtcp_is_PSFB(d->packet)) { switch (rtcp_PSFB_get_type(d->packet)) { case RTCP_PSFB_PLI: st->number_of_PLI++; break; case RTCP_PSFB_SLI: st->number_of_SLI++; break; case RTCP_PSFB_RPSI: st->number_of_RPSI++; break; default: break; } } } while (rtcp_next_packet(d->packet)); } ortp_event_destroy(ev); } } }