static void loss_rate_estimation() { bool_t supported = ms_filter_codec_supported("pcma"); if( supported ) { LossRateEstimatorCtx ctx; stream_manager_t * marielle, * margaux; int loss_rate = 15; start_adaptive_stream(MSAudio, &marielle, &margaux, PCMA8_PAYLOAD_TYPE, 8000, 0, loss_rate, 0, 0); ctx.estimator=ortp_loss_rate_estimator_new(120, 2500, marielle->audio_stream->ms.sessions.rtp_session); ctx.q = ortp_ev_queue_new(); rtp_session_register_event_queue(marielle->audio_stream->ms.sessions.rtp_session, ctx.q); ctx.loss_rate = loss_rate; /*loss rate should be the initial one*/ wait_for_until_with_parse_events(&marielle->audio_stream->ms, &margaux->audio_stream->ms, &loss_rate, 100, 10000, event_queue_cb,&ctx,NULL,NULL); /*let's set some duplication. loss rate should NOT be changed */ rtp_session_set_duplication_ratio(marielle->audio_stream->ms.sessions.rtp_session, 10); wait_for_until_with_parse_events(&marielle->audio_stream->ms, &margaux->audio_stream->ms, &loss_rate, 100, 10000, event_queue_cb,&ctx,NULL,NULL); stop_adaptive_stream(marielle,margaux); ortp_loss_rate_estimator_destroy(ctx.estimator); ortp_ev_queue_destroy(ctx.q); } }
MSQosAnalyzer * ms_simple_qos_analyzer_new(RtpSession *session){ MSSimpleQosAnalyzer *obj=ms_new0(MSSimpleQosAnalyzer,1); obj->session=session; obj->parent.desc=&simple_analyzer_desc; obj->parent.type=MSQosAnalyzerAlgorithmSimple; obj->parent.lre=ortp_loss_rate_estimator_new(LOSS_RATE_MIN_INTERVAL, LOSS_RATE_MIN_TIME, session); return (MSQosAnalyzer*)obj; }
MSQosAnalyzer * ms_simple_qos_analyzer_new(RtpSession *session){ MSSimpleQosAnalyzer *obj=ms_new0(MSSimpleQosAnalyzer,1); obj->session=session; obj->parent.desc=&simple_analyzer_desc; obj->parent.type=Simple; obj->lre=ortp_loss_rate_estimator_new(LOSS_RATE_MIN_INTERVAL, rtp_session_get_seq_number(session)); return (MSQosAnalyzer*)obj; }
MSQosAnalyzer * ms_stateful_qos_analyzer_new(RtpSession *session){ MSStatefulQosAnalyzer *obj=ms_new0(MSStatefulQosAnalyzer,1); obj->session=session; obj->parent.desc=&stateful_analyzer_desc; obj->parent.type=MSQosAnalyzerAlgorithmStateful; obj->parent.lre=ortp_loss_rate_estimator_new(LOSS_RATE_MIN_INTERVAL, LOSS_RATE_MIN_TIME, session); /*burst period will float the upload bandwidth assuming 5 sec RTCP reports interval*/ obj->burst_duration_ms=1000; obj->burst_ratio=9; return (MSQosAnalyzer*)obj; }