AudioStream *audio_stream_new(int locport, bool_t ipv6){ AudioStream *stream=(AudioStream *)ms_new0(AudioStream,1); stream->session=create_duplex_rtpsession(locport,ipv6); stream->rtpsend=ms_filter_new(MS_RTP_SEND_ID); stream->play_dtmfs=TRUE; return stream; }
AudioStream *audio_stream_new(int loc_rtp_port, int loc_rtcp_port, bool_t ipv6){ AudioStream *stream=(AudioStream *)ms_new0(AudioStream,1); MSFilterDesc *ec_desc=ms_filter_lookup_by_name("MSOslec"); ms_filter_enable_statistics(TRUE); ms_filter_reset_statistics(); stream->ms.type = AudioStreamType; stream->ms.session=create_duplex_rtpsession(loc_rtp_port,loc_rtcp_port,ipv6); /*some filters are created right now to allow configuration by the application before start() */ stream->ms.rtpsend=ms_filter_new(MS_RTP_SEND_ID); stream->ms.ice_check_list=NULL; stream->ms.qi=ms_quality_indicator_new(stream->ms.session); if (ec_desc!=NULL) stream->ec=ms_filter_new_from_desc(ec_desc); else #if defined(BUILD_WEBRTC_AECM) stream->ec=ms_filter_new(MS_WEBRTC_AEC_ID); #else stream->ec=ms_filter_new(MS_SPEEX_EC_ID); #endif stream->ms.evq=ortp_ev_queue_new(); rtp_session_register_event_queue(stream->ms.session,stream->ms.evq); stream->play_dtmfs=TRUE; stream->use_gc=FALSE; stream->use_agc=FALSE; stream->use_ng=FALSE; stream->features=AUDIO_STREAM_FEATURE_ALL; return stream; }
VideoStream *video_stream_new(int locport, bool_t use_ipv6){ VideoStream *stream = (VideoStream *)ms_new0 (VideoStream, 1); stream->session=create_duplex_rtpsession(locport,use_ipv6); stream->evq=ortp_ev_queue_new(); stream->rtpsend=ms_filter_new(MS_RTP_SEND_ID); rtp_session_register_event_queue(stream->session,stream->evq); return stream; }
VideoStream *video_stream_new(int locport, bool_t use_ipv6){ VideoStream *stream = (VideoStream *)ms_new0 (VideoStream, 1); stream->session=create_duplex_rtpsession(locport,use_ipv6); stream->evq=ortp_ev_queue_new(); stream->rtpsend=ms_filter_new(MS_RTP_SEND_ID); rtp_session_register_event_queue(stream->session,stream->evq); stream->sent_vsize.width=MS_VIDEO_SIZE_CIF_W; stream->sent_vsize.height=MS_VIDEO_SIZE_CIF_H; stream->dir=VideoStreamSendRecv; choose_display_name(stream); return stream; }
AudioStream *audio_stream_new(int locport, bool_t ipv6){ AudioStream *stream=(AudioStream *)ms_new0(AudioStream,1); stream->session=create_duplex_rtpsession(locport,ipv6); stream->rtpsend=ms_filter_new(MS_RTP_SEND_ID); stream->evq=ortp_ev_queue_new(); rtp_session_register_event_queue(stream->session,stream->evq); stream->play_dtmfs=TRUE; #ifndef ENABLED_MCU_MEDIA_SERVER stream->use_gc=FALSE; stream->use_agc=FALSE; stream->use_ng=FALSE; #endif // ENABLED_MCU_MEDIA_SERVER return stream; }
static void dtmfgen_enc_rtp_dec_tonedet(void) { MSConnectionHelper h; RtpSession *rtps; unsigned int filter_mask = FILTER_MASK_VOIDSOURCE | FILTER_MASK_DTMFGEN | FILTER_MASK_ENCODER | FILTER_MASK_RTPSEND | FILTER_MASK_RTPRECV | FILTER_MASK_DECODER | FILTER_MASK_TONEDET | FILTER_MASK_VOIDSINK; ms_filter_reset_statistics(); ms_tester_create_ticker(); ms_tester_codec_mime = "pcmu"; ms_tester_create_filters(filter_mask); ms_filter_set_notify_callback(ms_tester_tonedet, (MSFilterNotifyFunc)tone_detected_cb, NULL); rtps = create_duplex_rtpsession(50060, 0, FALSE); rtp_session_set_remote_addr_full(rtps, "127.0.0.1", 50060, NULL, 0); rtp_session_set_payload_type(rtps, 8); rtp_session_enable_rtcp(rtps,FALSE); ms_filter_call_method(ms_tester_rtprecv, MS_RTP_RECV_SET_SESSION, rtps); ms_filter_call_method(ms_tester_rtpsend, MS_RTP_SEND_SET_SESSION, rtps); ms_connection_helper_start(&h); ms_connection_helper_link(&h, ms_tester_voidsource, -1, 0); ms_connection_helper_link(&h, ms_tester_dtmfgen, 0, 0); ms_connection_helper_link(&h, ms_tester_encoder, 0, 0); ms_connection_helper_link(&h, ms_tester_rtpsend, 0, -1); ms_connection_helper_start(&h); ms_connection_helper_link(&h, ms_tester_rtprecv, -1, 0); ms_connection_helper_link(&h, ms_tester_decoder, 0, 0); ms_connection_helper_link(&h, ms_tester_tonedet, 0, 0); ms_connection_helper_link(&h, ms_tester_voidsink, 0, -1); ms_ticker_attach_multiple(ms_tester_ticker, ms_tester_voidsource, ms_tester_rtprecv, NULL); ms_tester_tone_generation_and_detection_loop(); ms_ticker_detach(ms_tester_ticker, ms_tester_voidsource); ms_ticker_detach(ms_tester_ticker, ms_tester_rtprecv); ms_connection_helper_start(&h); ms_connection_helper_unlink(&h, ms_tester_voidsource, -1, 0); ms_connection_helper_unlink(&h, ms_tester_dtmfgen, 0, 0); ms_connection_helper_unlink(&h, ms_tester_encoder, 0, 0); ms_connection_helper_unlink(&h, ms_tester_rtpsend, 0, -1); ms_connection_helper_start(&h); ms_connection_helper_unlink(&h, ms_tester_rtprecv, -1, 0); ms_connection_helper_unlink(&h, ms_tester_decoder, 0, 0); ms_connection_helper_unlink(&h, ms_tester_tonedet, 0, 0); ms_connection_helper_unlink(&h, ms_tester_voidsink, 0, -1); ms_filter_log_statistics(); ms_tester_destroy_filters(filter_mask); ms_tester_destroy_ticker(); rtp_session_destroy(rtps); }
AudioStream *audio_stream_new(int locport, bool_t ipv6){ AudioStream *stream=(AudioStream *)ms_new0(AudioStream,1); stream->session=create_duplex_rtpsession(locport,ipv6); stream->rtpsend=ms_filter_new(MS_RTP_SEND_ID); stream->play_dtmfs=TRUE; stream->use_gc=FALSE; stream->use_agc=FALSE; stream->use_ng=FALSE; stream->use_nr=FALSE; stream->record_enabled=FALSE; stream->quality_cb = NULL; stream->userdata = NULL; stream->evq=ortp_ev_queue_new(); rtp_session_register_event_queue(stream->session,stream->evq); return stream; }
VideoStream *video_stream_new(int loc_rtp_port, int loc_rtcp_port, bool_t use_ipv6){ VideoStream *stream = (VideoStream *)ms_new0 (VideoStream, 1); stream->ms.type = VideoStreamType; stream->ms.session=create_duplex_rtpsession(loc_rtp_port,loc_rtcp_port,use_ipv6); stream->ms.qi=ms_quality_indicator_new(stream->ms.session); stream->ms.evq=ortp_ev_queue_new(); stream->ms.rtpsend=ms_filter_new(MS_RTP_SEND_ID); stream->ms.ice_check_list=NULL; rtp_session_register_event_queue(stream->ms.session,stream->ms.evq); MS_VIDEO_SIZE_ASSIGN(stream->sent_vsize, CIF); stream->dir=VideoStreamSendRecv; stream->display_filter_auto_rotate_enabled=0; stream->source_performs_encoding = FALSE; stream->output_performs_decoding = FALSE; choose_display_name(stream); return stream; }
int init_bench(struct bench_config *bench) { PayloadType *pt; int pos; int val; int count; bench->ticker=ms_ticker_new(); count = 0; /* creates the couple of encoder/decoder */ pt=rtp_profile_get_payload(&av_profile,bench->payload); if (pt==NULL){ ms_error("audiostream.c: undefined payload type."); return count; } if (pt->clock_rate!=8000 && pt->clock_rate!=16000 && pt->clock_rate!=32000){ ms_error("audiostream.c: wrong rate."); return count; } for (pos=0;pos<bench->num_session;pos++) { struct test_session *ts = (struct test_session *)ortp_malloc(sizeof(struct test_session)); memset(ts, 0, sizeof(struct test_session)); ts->rtps = create_duplex_rtpsession(bench->port_origin+pos*2); if (ts->rtps==NULL) { ms_error("bench.c: cannot create rtp_session!"); ortp_free(ts); return count; } rtp_session_set_payload_type(ts->rtps,bench->payload); rtp_session_set_remote_addr_full(ts->rtps, bench->ip_destination, bench->port_destination+pos*2, bench->ip_destination, bench->port_destination+1+pos*2); ts->fplayer = ms_filter_new(MS_FILE_PLAYER_ID); if (strstr(bench->wavfile, ".au")==NULL) ts->encoder = ms_filter_create_encoder(pt->mime_type); ts->rtpsend = ms_filter_new(MS_RTP_SEND_ID); ts->rtprecv = ms_filter_new(MS_RTP_RECV_ID); ts->decoder = ms_filter_create_decoder(pt->mime_type); ts->frecorder = ms_filter_new(MS_FILE_REC_ID); if ((ts->encoder==NULL && strstr(bench->wavfile, ".au")==NULL) || (ts->decoder==NULL )){ ms_error("bench.c: No decoder available for payload %i.",bench->payload); if (ts->fplayer) ms_filter_destroy(ts->fplayer); if (ts->encoder) ms_filter_destroy(ts->encoder); if (ts->rtpsend) ms_filter_destroy(ts->rtpsend); if (ts->rtprecv) ms_filter_destroy(ts->rtprecv); if (ts->decoder) ms_filter_destroy(ts->decoder); if (ts->frecorder) ms_filter_destroy(ts->frecorder); ortp_free(ts); return count; } if (ts->fplayer==NULL){ ms_error("bench.c: missing player filter."); if (ts->fplayer) ms_filter_destroy(ts->fplayer); if (ts->encoder) ms_filter_destroy(ts->encoder); if (ts->rtpsend) ms_filter_destroy(ts->rtpsend); if (ts->rtprecv) ms_filter_destroy(ts->rtprecv); if (ts->decoder) ms_filter_destroy(ts->decoder); if (ts->frecorder) ms_filter_destroy(ts->frecorder); ortp_free(ts); return count; } if (ts->frecorder==NULL){ ms_error("bench.c: missing recorder filter."); if (ts->fplayer) ms_filter_destroy(ts->fplayer); if (ts->encoder) ms_filter_destroy(ts->encoder); if (ts->rtpsend) ms_filter_destroy(ts->rtpsend); if (ts->rtprecv) ms_filter_destroy(ts->rtprecv); if (ts->decoder) ms_filter_destroy(ts->decoder); if (ts->frecorder) ms_filter_destroy(ts->frecorder); ortp_free(ts); return count; } if (ts->rtpsend==NULL){ ms_error("bench.c: missing rtpsend filter."); if (ts->fplayer) ms_filter_destroy(ts->fplayer); if (ts->encoder) ms_filter_destroy(ts->encoder); if (ts->rtpsend) ms_filter_destroy(ts->rtpsend); if (ts->rtprecv) ms_filter_destroy(ts->rtprecv); if (ts->decoder) ms_filter_destroy(ts->decoder); if (ts->frecorder) ms_filter_destroy(ts->frecorder); ortp_free(ts); return count; } if (ts->rtprecv==NULL){ ms_error("bench.c: missing rtprecv filter."); if (ts->fplayer) ms_filter_destroy(ts->fplayer); if (ts->encoder) ms_filter_destroy(ts->encoder); if (ts->rtpsend) ms_filter_destroy(ts->rtpsend); if (ts->rtprecv) ms_filter_destroy(ts->rtprecv); if (ts->decoder) ms_filter_destroy(ts->decoder); if (ts->frecorder) ms_filter_destroy(ts->frecorder); ortp_free(ts); return count; } ms_filter_call_method(ts->rtpsend,MS_RTP_SEND_SET_SESSION,ts->rtps); ms_filter_call_method(ts->rtprecv,MS_RTP_RECV_SET_SESSION,ts->rtps); ms_filter_call_method (ts->rtprecv, MS_FILTER_SET_SAMPLE_RATE, &pt->clock_rate); ms_filter_call_method (ts->frecorder, MS_FILTER_SET_SAMPLE_RATE, &pt->clock_rate); val = ms_filter_call_method(ts->fplayer,MS_FILE_PLAYER_OPEN,(void*)bench->wavfile); if (val!=0) { ms_error("bench.c: Cannot open wav file (%s)", bench->wavfile); if (ts->fplayer) ms_filter_destroy(ts->fplayer); if (ts->encoder) ms_filter_destroy(ts->encoder); if (ts->rtpsend) ms_filter_destroy(ts->rtpsend); if (ts->rtprecv) ms_filter_destroy(ts->rtprecv); if (ts->decoder) ms_filter_destroy(ts->decoder); if (ts->frecorder) ms_filter_destroy(ts->frecorder); ortp_free(ts); return count; } val=0; ms_filter_call_method (ts->fplayer, MS_FILTER_GET_SAMPLE_RATE, &val); if (val!=pt->clock_rate) { ms_error("bench.c: unsupported rate for wav file: codec=%i / file=%i", pt->clock_rate, val); if (ts->fplayer) ms_filter_destroy(ts->fplayer); if (ts->encoder) ms_filter_destroy(ts->encoder); if (ts->rtpsend) ms_filter_destroy(ts->rtpsend); if (ts->rtprecv) ms_filter_destroy(ts->rtprecv); if (ts->decoder) ms_filter_destroy(ts->decoder); if (ts->frecorder) ms_filter_destroy(ts->frecorder); ortp_free(ts); return count; } ms_filter_call_method (ts->fplayer, MS_FILTER_GET_NCHANNELS, &val); if (val!=1) { ms_error("bench.c: unsupported number of channel for wav file: codec=1 / file=%i", val); if (ts->fplayer) ms_filter_destroy(ts->fplayer); if (ts->encoder) ms_filter_destroy(ts->encoder); if (ts->rtpsend) ms_filter_destroy(ts->rtpsend); if (ts->rtprecv) ms_filter_destroy(ts->rtprecv); if (ts->decoder) ms_filter_destroy(ts->decoder); if (ts->frecorder) ms_filter_destroy(ts->frecorder); ortp_free(ts); return count; } ms_filter_call_method_noarg(ts->fplayer,MS_FILE_PLAYER_START); if (strstr(bench->wavfile, ".au")==NULL) { ms_filter_link(ts->fplayer,0,ts->encoder,0); ms_filter_link(ts->encoder,0,ts->rtpsend,0); } else { ms_filter_link(ts->fplayer,0,ts->rtpsend,0); } ms_filter_link(ts->rtprecv,0,ts->decoder,0); ms_filter_link(ts->decoder,0,ts->frecorder,0); ms_ticker_attach(bench->ticker,ts->fplayer); ms_ticker_attach(bench->ticker,ts->rtprecv); if (pos < bench->num_session_record) { char rec_file[128]; snprintf(rec_file, sizeof(rec_file), "rec_%s_%i.wav", bench->ip_destination, bench->port_destination+pos*2); ms_filter_call_method(ts->frecorder,MS_FILE_REC_OPEN,(void*)rec_file); ms_filter_call_method_noarg(ts->frecorder,MS_FILE_REC_START); } bench->tsessions = ms_list_append(bench->tsessions, (void*)ts); count++; } return count; }