void media_stream_iterate(MediaStream *stream){ time_t curtime=ms_time(NULL); if (stream->ice_check_list) ice_check_list_process(stream->ice_check_list,stream->sessions.rtp_session); /*we choose to update the quality indicator as much as possible, since local statistics can be computed realtime. */ if (stream->state==MSStreamStarted){ if (stream->qi && curtime>stream->last_iterate_time) ms_quality_indicator_update_local(stream->qi); } stream->last_iterate_time=curtime; if (stream->rc) ms_bitrate_controller_update(stream->rc); if (stream->evq){ OrtpEvent *ev=NULL; while ((ev=ortp_ev_queue_get(stream->evq))!=NULL){ OrtpEventType evt=ortp_event_get_type(ev); if (evt==ORTP_EVENT_RTCP_PACKET_RECEIVED){ mblk_t *m=ortp_event_get_data(ev)->packet; media_stream_process_rtcp(stream,m,curtime); }else if (evt==ORTP_EVENT_RTCP_PACKET_EMITTED){ ms_message("%s_stream_iterate[%p]: local statistics available\n\tLocal's current jitter buffer size:%f ms", media_stream_type_str(stream), stream, rtp_session_get_jitter_stats(stream->sessions.rtp_session)->jitter_buffer_size_ms); }else if ((evt==ORTP_EVENT_STUN_PACKET_RECEIVED)&&(stream->ice_check_list)){ ice_handle_stun_packet(stream->ice_check_list,stream->sessions.rtp_session,ortp_event_get_data(ev)); } else if (evt == ORTP_EVENT_ZRTP_ENCRYPTION_CHANGED) { OrtpEventData *evd=ortp_event_get_data(ev); stream->sessions.is_secured=evd->info.zrtp_stream_encrypted; ms_message("%s_stream_iterate[%p]: is %s ",media_stream_type_str(stream) , stream, stream->sessions.is_secured ? "encrypted" : "not encrypted"); } ortp_event_destroy(ev); } } }
int media_stream_set_dscp(MediaStream *stream, int dscp) { ms_message("Setting DSCP to %i for %s stream.", dscp, media_stream_type_str(stream)); stream->dscp = dscp; if ((stream->sessions.rtp_session != NULL) && (stream->sessions.rtp_session->rtp.gs.rem_addr.ss_family != AF_UNSPEC)) return rtp_session_set_dscp(stream->sessions.rtp_session, dscp); return 0; }
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)); }
void media_stream_start_ticker(MediaStream *stream) { MSTickerParams params = {0}; char name[32] = {0}; if (stream->sessions.ticker) return; snprintf(name, sizeof(name) - 1, "%s MSTicker", media_stream_type_str(stream)); name[0] = toupper(name[0]); params.name = name; params.prio = __ms_get_default_prio((stream->type == MSVideo) ? TRUE : FALSE); stream->sessions.ticker = ms_ticker_new_with_params(¶ms); }
int media_stream_set_dscp(MediaStream *stream, int dscp) { ms_message("Setting DSCP to %i for %s stream.", dscp, media_stream_type_str(stream)); return rtp_session_set_dscp(stream->sessions.rtp_session, dscp); }