示例#1
0
DirectorConference::~DirectorConference()
{
	// 释放所有 sources, sinks, ...
	do {
		ost::MutexLock al(cs_graphics_);
		GRAPHICS::iterator it;
		for (it = graphics_.begin(); it != graphics_.end(); ++it) {
			delete *it;
		}
		graphics_.clear();
	} while (0);

	do {
		ost::MutexLock al(cs_sinks_);
		SINKS::iterator it;
		for (it = sinks_.begin(); it != sinks_.end(); ++it) {
			del_sink(*it);
			delete *it;
		}
		sinks_.clear();
	} while (0);

	do {
		ost::MutexLock al(cs_streams_);
		STREAMS::iterator it;
		for (it = streams_.begin(); it != streams_.end(); ++it) {
			del_stream(*it);
			delete *it;
		}
		streams_.clear();
	} while (0);

	do {
		ost::MutexLock al(cs_sources_);
		SOURCES::iterator it;
		for (it = sources_.begin(); it != sources_.end(); ++it) {
			del_source(*it);
			delete *it;
		}
		sources_.clear();
	} while (0);

	pause_audio();
	pause_video();

	ms_ticker_destroy(audio_ticker_);
	ms_ticker_destroy(video_ticker_);

	ms_filter_destroy(audio_resample_);
	ms_filter_destroy(audio_encoder_);
	ms_filter_destroy(audio_mixer_);
	ms_filter_destroy(video_mixer_);
	ms_filter_destroy(audio_publisher_);
	ms_filter_destroy(video_publisher_);
	ms_filter_destroy(video_tee_);

	if (filter_tee_) ms_filter_destroy(filter_tee_);
	if (filter_sink_) ms_filter_destroy(filter_sink_);
}
void ms_media_stream_sessions_uninit(MSMediaStreamSessions *sessions){
	if (sessions->srtp_session) {
		RtpTransport *rtptr=NULL,*rtcptr=NULL;
		ortp_srtp_dealloc(sessions->srtp_session);
		if (sessions->rtp_session){
			rtp_session_get_transports(sessions->rtp_session,&rtptr,&rtcptr);
			rtp_session_set_transports(sessions->rtp_session,NULL,NULL);
			if (rtptr) srtp_transport_destroy(rtptr);
			if (rtcptr) srtp_transport_destroy(rtcptr);
		}
		sessions->srtp_session=NULL;
	}
	if (sessions->rtp_session) {
		rtp_session_destroy(sessions->rtp_session);
		sessions->rtp_session=NULL;
	}
	if (sessions->zrtp_context != NULL) {
		ortp_zrtp_context_destroy(sessions->zrtp_context);
		sessions->zrtp_context = NULL;
	}
	if (sessions->ticker){
		ms_ticker_destroy(sessions->ticker);
		sessions->ticker=NULL;
	}
}
示例#3
0
int main(int argc, char *argv[]){
	MSFilter *f1,*f2;
	MSSndCard *card;
	MSTicker *ticker;
	char *card_id=NULL;
	ms_init();
	
	signal(SIGINT,stop);

	if (argc>1)
		card_id=argv[1];

	if (card_id!=NULL)
		card=ms_snd_card_manager_get_card(ms_snd_card_manager_get(),card_id);
	else card=ms_snd_card_manager_get_default_card(ms_snd_card_manager_get());
	if (card==NULL){
		ms_error("No card.");
		return -1;
	}
	f1=ms_snd_card_create_reader(card);
	f2=ms_snd_card_create_writer(card);
	ticker=ms_ticker_new();
	ms_filter_link(f1,0,f2,0);
	ms_ticker_attach(ticker,f1);
	while(run)
		sleep(1);
	ms_ticker_detach(ticker,f1);
	ms_ticker_destroy(ticker);
	ms_filter_unlink(f1,0,f2,0);
	ms_filter_destroy(f1);
	ms_filter_destroy(f2);
	return 0;
}
示例#4
0
SinkBase::~SinkBase(void)
{
	ms_ticker_destroy(ticker_);
	ms_filter_destroy(f_void_);
	ms_filter_destroy(f_recv_);
	rtp_session_destroy(rtp_);
}
示例#5
0
void VodWnd::stop_vod()
{
    if (ticker_) {
        char opt[128];
        snprintf(opt, sizeof(opt), "sinkid=%d", sinkid_);
        zk_xmpp_uac_send_cmd(uac_, mcu_jid_.c_str(), "test.fc.del_sink", opt, 0, 0);

        ms_ticker_detach(ticker_, filter_rtp_);

        ms_filter_destroy(filter_rtp_);
        filter_rtp_ = 0;
        ms_filter_destroy(filter_decoder_);
        filter_decoder_ = 0;
        ms_filter_destroy(filter_sink_);
        filter_sink_ = 0;

        rtp_session_destroy(rtp_);
        rtp_ = 0;
        ortp_ev_queue_destroy(evq_);
        evq_ = 0;

        ms_ticker_destroy(ticker_);
        ticker_ = 0;

        if (render_) {
            rv_close(render_);
            render_ = 0;
        }
    }
}
示例#6
0
/* this code is not part of the library itself, it is part of the mediastream program */
void video_stream_free (VideoStream * stream)
{
	if (stream->session!=NULL){
		rtp_session_unregister_event_queue(stream->session,stream->evq);
		rtp_session_destroy(stream->session);
	}
	if (stream->rtprecv != NULL)
		ms_filter_destroy (stream->rtprecv);
	if (stream->rtpsend!=NULL) 
		ms_filter_destroy (stream->rtpsend);
	if (stream->source != NULL)
		ms_filter_destroy (stream->source);
	if (stream->output != NULL)
		ms_filter_destroy (stream->output);
	if (stream->decoder != NULL)
		ms_filter_destroy (stream->decoder);
	if (stream->sizeconv != NULL)
		ms_filter_destroy (stream->sizeconv);
	if (stream->pixconv!=NULL)
		ms_filter_destroy(stream->pixconv);
	if (stream->tee!=NULL)
		ms_filter_destroy(stream->tee);
	if (stream->ticker != NULL)
		ms_ticker_destroy (stream->ticker);
	if (stream->evq!=NULL)
		ortp_ev_queue_destroy(stream->evq);
	ms_free (stream);
}
示例#7
0
static void ecc_deinit_filters(EcCalibrator *ecc) {
    if (ecc->audio_uninit_cb != NULL) {
        (*ecc->audio_uninit_cb)(ecc->cb_data);
    }

    ms_ticker_detach(ecc->ticker,ecc->sndread);
    ms_ticker_detach(ecc->ticker,ecc->play);

    ms_filter_unlink(ecc->play,0,ecc->gen,0);
    ms_filter_unlink(ecc->gen,0,ecc->write_resampler,0);
    ms_filter_unlink(ecc->write_resampler,0,ecc->sndwrite,0);

    ms_filter_unlink(ecc->sndread,0,ecc->read_resampler,0);
    ms_filter_unlink(ecc->read_resampler,0,ecc->det,0);
    ms_filter_unlink(ecc->det,0,ecc->rec,0);

    ms_filter_destroy(ecc->sndread);
    ms_filter_destroy(ecc->det);
    ms_filter_destroy(ecc->rec);
    ms_filter_destroy(ecc->play);
    ms_filter_destroy(ecc->gen);
    ms_filter_destroy(ecc->read_resampler);
    ms_filter_destroy(ecc->write_resampler);
    ms_filter_destroy(ecc->sndwrite);

    ms_ticker_destroy(ecc->ticker);
}
示例#8
0
void ring_stop(RingStream *stream){
	ms_ticker_detach(stream->ticker,stream->source);
	ms_filter_unlink(stream->source,0,stream->sndwrite,0);
	ms_ticker_destroy(stream->ticker);
	ms_filter_destroy(stream->source);
	ms_filter_destroy(stream->sndwrite);
	ms_free(stream);
}
示例#9
0
static void webcam_free(ConfWebCam *localcam){

	if (localcam->ticker!=NULL) ms_ticker_destroy(localcam->ticker);
	if (localcam->webcam!=NULL) ms_filter_destroy(localcam->webcam);
	if (localcam->pixconv!=NULL) ms_filter_destroy(localcam->pixconv);
	if (localcam->sizeconv!=NULL) ms_filter_destroy(localcam->sizeconv);
	if (localcam->itc_sink!=NULL) ms_filter_destroy(localcam->itc_sink);
	ms_free(localcam);
}
示例#10
0
static void snd_card_free(ConfSoundCard *sndcard)
{
	if (sndcard->ticker!=NULL) ms_ticker_destroy(sndcard->ticker);
	if (sndcard->capture_card!=NULL) ms_filter_destroy(sndcard->capture_card);
	if (sndcard->itc_source!=NULL) ms_filter_destroy(sndcard->itc_source);
	if (sndcard->playback_card!=NULL) ms_filter_destroy(sndcard->playback_card);
	if (sndcard->itc_sink!=NULL) ms_filter_destroy(sndcard->itc_sink);

	ms_free(sndcard);
}
示例#11
0
static void conf_stream_free(LinphoneConferenceStream *stream)
{
	if(stream->audio_ticker!=NULL)ms_ticker_destroy(stream->audio_ticker);
	if(stream->audio_fileplayer!=NULL) ms_filter_destroy(stream->audio_fileplayer);
	if(stream->audio_filerecorder!=NULL) ms_filter_destroy(stream->audio_filerecorder);
	if(stream->audio_mixer!=NULL) ms_filter_destroy(stream->audio_mixer);
	if(stream->audio_record_sink!=NULL) ms_filter_destroy(stream->audio_record_sink);
	if(stream->video_record_sink!=NULL) ms_filter_destroy(stream->video_record_sink);

	MSList *list = stream->audio_ports;

	for(;list!=NULL;list=list->next){
		ConfAudioPort* port = (ConfAudioPort*) list->data;
		audio_slot_destory(port);
	}

	ms_list_free(stream->audio_ports);

	if(stream->has_video){
		if(stream->video_ticker!=NULL){
			ms_cond_destroy(&stream->video_ticker->cond);
			ms_ticker_destroy(stream->video_ticker);
		}

		if(stream->video_mixer!=NULL) ms_filter_destroy(stream->video_mixer);
		if(stream->video_output!=NULL) ms_filter_destroy(stream->video_output);
		if(stream->video_static_image!=NULL) ms_filter_destroy(stream->video_static_image);
		if(stream->video_static_image_tee!=NULL) ms_filter_destroy(stream->video_static_image_tee);
		MSList *list = stream->video_ports;

		for(;list!=NULL;list=list->next){
			ConfVideoPort* port = (ConfVideoPort*) list->data;
			video_slot_destory(port);
		}
		ms_list_free(stream->video_ports);
	}

	if(stream->display_name!=NULL) ms_free(stream->display_name);
	if(stream->static_image_path!=NULL) ms_free(stream->static_image_path);

	ms_free(stream);
}
示例#12
0
void ring_stop(RingStream *stream){
	ms_ticker_detach(stream->ticker,stream->source);
	ms_filter_unlink(stream->source,0,stream->sndwrite,0);
	ms_ticker_destroy(stream->ticker);
	ms_filter_destroy(stream->source);
	ms_filter_destroy(stream->sndwrite);
	ms_free(stream);
#ifdef _WIN32_WCE
	ms_warning("Sleeping a bit after closing the audio device...");
	ms_sleep(1);
#endif
}
示例#13
0
/* this code is not part of the library itself, it is part of the mediastream program */
void audio_stream_free(AudioStream *stream)
{
	if (stream->session!=NULL) rtp_session_destroy(stream->session);
	if (stream->rtpsend!=NULL) ms_filter_destroy(stream->rtpsend);
	if (stream->rtprecv!=NULL) ms_filter_destroy(stream->rtprecv);
	if (stream->soundread!=NULL) ms_filter_destroy(stream->soundread);
	if (stream->soundwrite!=NULL) ms_filter_destroy(stream->soundwrite);
	if (stream->encoder!=NULL) ms_filter_destroy(stream->encoder);
	if (stream->decoder!=NULL) ms_filter_destroy(stream->decoder);
	if (stream->dtmfgen!=NULL) ms_filter_destroy(stream->dtmfgen);
	if (stream->ec!=NULL)	ms_filter_destroy(stream->ec);
	if (stream->ticker!=NULL) ms_ticker_destroy(stream->ticker);
	ms_free(stream);
}
示例#14
0
int CameraStream::close()
{
	if (rtp_) {
		ms_ticker_detach(ticker_sender_, filter_h264_sender_);
		ms_ticker_detach(ticker_recver_, filter_rtp_recver_);

		ms_ticker_destroy(ticker_sender_);
		ms_ticker_destroy(ticker_recver_);
		
		ms_filter_destroy(filter_h264_sender_);
		ms_filter_destroy(filter_rtp_sender_);
		ms_filter_destroy(filter_rtp_recver_);
		ms_filter_destroy(filter_decoder_);
		ms_filter_destroy(filter_yuv_sink_);

		rtp_session_destroy(rtp_);
		rtp_ = 0;
	}

	if (cap_) {
		cvReleaseCapture(&cap_);
		cap_ = 0;
	}

	if (sws_) {
		avpicture_free(&pic_);
		sws_freeContext(sws_);
		sws_ = 0;
	}

	if (encoder_) {
		x264_encoder_close(encoder_);
		encoder_ = 0;
	}

	return 0;
}
示例#15
0
void linphone_sound_daemon_destroy(LinphoneSoundDaemon *obj){
	int i;
	MSConnectionPoint mp;
	ms_ticker_detach(obj->ticker,obj->soundout);
	mp.filter=obj->mixer;
	for(i=0;i<MAX_BRANCHES;++i){
		mp.pin=i;
		if (i!=0) linphone_sound_daemon_release_player(obj,&obj->branches[i]);
		lsd_player_uninit (&obj->branches[i],mp);
	}
	ms_filter_unlink(obj->mixer,0,obj->soundout,0);
	ms_ticker_destroy(obj->ticker);
	ms_filter_destroy(obj->soundout);
	ms_filter_destroy(obj->mixer);
}
static void video_mail_record_free(VideoMailRecord *vp)
{
	if(vp->display_name!=NULL) ms_free(vp->display_name);

	if(vp->ticker!=NULL) ms_ticker_destroy(vp->ticker);
	if(vp->snd_read!=NULL) ms_filter_destroy(vp->snd_read);
	if(vp->snd_sink!=NULL) ms_filter_destroy(vp->snd_sink);
	if(vp->sizeconv!=NULL) ms_filter_destroy(vp->sizeconv);
	if(vp->pixconv!=NULL) ms_filter_destroy(vp->pixconv);
	if(vp->video_tee!=NULL) ms_filter_destroy(vp->video_tee);
	if(vp->video_sink!=NULL) ms_filter_destroy(vp->video_sink);
	if(vp->video_source!=NULL) ms_filter_destroy(vp->video_source);
	if(vp->video_output!=NULL) ms_filter_destroy(vp->video_output);

	ms_free(vp);
}
示例#17
0
/* this code is not part of the library itself, it is part of the mediastream program */
void video_stream_free (VideoStream * stream)
{
	if (stream->ortpZrtpContext)
		ortp_zrtp_context_destroy(stream->ortpZrtpContext);
	if (stream->session!=NULL){
		rtp_session_unregister_event_queue(stream->session,stream->evq);
		rtp_session_destroy(stream->session);
	}
	if (stream->rtprecv != NULL)
		ms_filter_destroy (stream->rtprecv);
	if (stream->rtpsend!=NULL)
		ms_filter_destroy (stream->rtpsend);
	if (stream->source != NULL)
		ms_filter_destroy (stream->source);
	if (stream->output != NULL)
		ms_filter_destroy (stream->output);
	if (stream->encoder != NULL)
		ms_filter_destroy (stream->encoder);
	if (stream->decoder != NULL)
		ms_filter_destroy (stream->decoder);
	if (stream->sizeconv != NULL)
		ms_filter_destroy (stream->sizeconv);
	if (stream->pixconv!=NULL)
		ms_filter_destroy(stream->pixconv);
	if (stream->tee!=NULL)
		ms_filter_destroy(stream->tee);
	if (stream->tee2!=NULL)
		ms_filter_destroy(stream->tee2);
	if (stream->jpegwriter!=NULL)
		ms_filter_destroy(stream->jpegwriter);
	if (stream->output2!=NULL)
		ms_filter_destroy(stream->output2);
	if (stream->voidsink!=NULL)
		ms_filter_destroy(stream->voidsink);
	if (stream->ticker != NULL)
		ms_ticker_destroy (stream->ticker);
	if (stream->evq!=NULL)
		ortp_ev_queue_destroy(stream->evq);
	if (stream->display_name!=NULL)
		ms_free(stream->display_name);
	if (stream->rc!=NULL){
		ms_bitrate_controller_destroy(stream->rc);
	}

	ms_free (stream);
}
示例#18
0
/* this code is not part of the library itself, it is part of the mediastream program */
void video_stream_free (VideoStream * stream)
{
	if (stream->session!=NULL){
		rtp_session_unregister_event_queue(stream->session,stream->evq);
		rtp_session_destroy(stream->session);
	}
	if (stream->rtprecv != NULL)
		ms_filter_destroy (stream->rtprecv);
	if (stream->rtpsend!=NULL) 
		ms_filter_destroy (stream->rtpsend);
	if (stream->source != NULL)
		ms_filter_destroy (stream->source);
	if (stream->output != NULL)
		ms_filter_destroy (stream->output);
	if (stream->encoder != NULL)
		ms_filter_destroy (stream->encoder);
	if (stream->decoder != NULL)
		ms_filter_destroy (stream->decoder);
	if (stream->sizeconv != NULL)
		ms_filter_destroy (stream->sizeconv);
	if (stream->pixconv!=NULL)
		ms_filter_destroy(stream->pixconv);
	if (stream->tee!=NULL)
		ms_filter_destroy(stream->tee);
	if (stream->tee2!=NULL)
		ms_filter_destroy(stream->tee2);
	if (stream->jpegwriter!=NULL)
		ms_filter_destroy(stream->jpegwriter);
	if(stream->video_record!=NULL)
		ms_filter_destroy(stream->video_record);
	if (stream->output2!=NULL)
		ms_filter_destroy(stream->output2);
#ifdef ENABLE_UDT
	if (stream->udt!=NULL)
		ms_filter_destroy(stream->udt);
#endif // ENABLE_UDT
	if (stream->ticker != NULL)
		ms_ticker_destroy (stream->ticker);
	if (stream->evq!=NULL)
		ortp_ev_queue_destroy(stream->evq);
	if (stream->display_name!=NULL)
		ms_free(stream->display_name);
	
	ms_free (stream);
}
示例#19
0
void ring_stop(RingStream *stream){
	MSConnectionHelper h;
	ms_ticker_detach(stream->ticker,stream->source);

	ms_connection_helper_start(&h);
	ms_connection_helper_unlink(&h,stream->source,-1,0);
	ms_connection_helper_unlink(&h,stream->gendtmf,0,0);
	if (stream->write_resampler)
		ms_connection_helper_unlink(&h,stream->write_resampler,0,0);
	ms_connection_helper_unlink(&h,stream->sndwrite,0,-1);

	ms_ticker_destroy(stream->ticker);
	ms_filter_destroy(stream->source);
	ms_filter_destroy(stream->gendtmf);
	ms_filter_destroy(stream->sndwrite);
	if (stream->write_resampler)
		ms_filter_destroy(stream->write_resampler);
	ms_free(stream);
}
示例#20
0
static void ecc_deinit_filters(EcCalibrator *ecc){
	ms_ticker_detach(ecc->ticker,ecc->play);
	ms_ticker_detach(ecc->ticker,ecc->sndread);

	ms_filter_unlink(ecc->play,0,ecc->gen,0);
	ms_filter_unlink(ecc->gen,0,ecc->resampler,0);
	ms_filter_unlink(ecc->resampler,0,ecc->sndwrite,0);

	ms_filter_unlink(ecc->sndread,0,ecc->det,0);
	ms_filter_unlink(ecc->det,0,ecc->rec,0);

	ms_filter_destroy(ecc->sndread);
	ms_filter_destroy(ecc->det);
	ms_filter_destroy(ecc->rec);
	ms_filter_destroy(ecc->play);
	ms_filter_destroy(ecc->gen);
	ms_filter_destroy(ecc->resampler);
	ms_filter_destroy(ecc->sndwrite);

	ms_ticker_destroy(ecc->ticker);
}
示例#21
0
void ring_stop(RingStream *stream){
	MSConnectionHelper h;
	ms_ticker_detach(stream->ticker,stream->source);

	ms_connection_helper_start(&h);
	ms_connection_helper_unlink(&h,stream->source,-1,0);
	ms_connection_helper_unlink(&h,stream->gendtmf,0,0);
	if (stream->write_resampler)
		ms_connection_helper_unlink(&h,stream->write_resampler,0,0);
	ms_connection_helper_unlink(&h,stream->sndwrite,0,-1);

	ms_ticker_destroy(stream->ticker);
	ms_filter_destroy(stream->source);
	ms_filter_destroy(stream->gendtmf);
	ms_filter_destroy(stream->sndwrite);
	ms_free(stream);
#ifdef _WIN32_WCE
	ms_warning("Sleeping a bit after closing the audio device...");
	ms_sleep(1);
#endif
}
示例#22
0
static int uninit_bench(struct bench_config *bench)
{
	MSList *it;
	for(it=bench->tsessions;it!=NULL;it=bench->tsessions){
		struct test_session *ts = (struct test_session *)it->data;
		bench->tsessions = ms_list_remove_link(bench->tsessions, it);

		ms_ticker_detach(bench->ticker,ts->fplayer);
		ms_ticker_detach(bench->ticker,ts->rtprecv);

		ms_filter_call_method_noarg(ts->frecorder,MS_FILE_REC_CLOSE);

		if (strstr(bench->wavfile, ".au")==NULL)
			{
				ms_filter_unlink(ts->fplayer,0,ts->encoder,0);
				ms_filter_unlink(ts->encoder,0,ts->rtpsend,0);
			}
		else
			{
				ms_filter_unlink(ts->fplayer,0,ts->rtpsend,0);
			}

		ms_filter_unlink(ts->rtprecv,0,ts->decoder,0);
		ms_filter_unlink(ts->decoder,0,ts->frecorder,0);

		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);
	}

	ms_ticker_destroy(bench->ticker);
	return 0;
}
示例#23
0
void ms_media_stream_sessions_uninit(MSMediaStreamSessions *sessions){
	if (sessions->srtp_context) {
		ms_srtp_context_delete(sessions->srtp_context);
		sessions->srtp_context=NULL;
	}
	if (sessions->rtp_session) {
		rtp_session_destroy(sessions->rtp_session);
		sessions->rtp_session=NULL;
	}
	if (sessions->zrtp_context != NULL) {
		ms_zrtp_context_destroy(sessions->zrtp_context);
		sessions->zrtp_context = NULL;
	}
	if (sessions->dtls_context != NULL) {
		ms_dtls_srtp_context_destroy(sessions->dtls_context);
		sessions->dtls_context = NULL;
	}
	if (sessions->ticker){
		ms_ticker_destroy(sessions->ticker);
		sessions->ticker=NULL;
	}
}
示例#24
0
int main()
{
	ms_init();

	MSFilter *source = get_source();
	MSFilter *render = get_render();

	ms_filter_link(source, 0, render, 0);

	MSTicker *ticker = ms_ticker_new();
	ms_ticker_attach(ticker, source);

	while (true) {
		ms_sleep(1);
	}

	ms_ticker_destroy(ticker);

	ms_filter_destroy(render);
	ms_filter_destroy(source);

	return 0;
}
示例#25
0
/* this code is not part of the library itself, it is part of the mediastream program */
void audio_stream_free(AudioStream *stream)
{
	if (stream->session!=NULL) {
		rtp_session_unregister_event_queue(stream->session,stream->evq);
		rtp_session_destroy(stream->session);
	}
	if (stream->evq) ortp_ev_queue_destroy(stream->evq);
	if (stream->rtpsend!=NULL) ms_filter_destroy(stream->rtpsend);
	if (stream->rtprecv!=NULL) ms_filter_destroy(stream->rtprecv);
	if (stream->soundread!=NULL) ms_filter_destroy(stream->soundread);
	if (stream->soundwrite!=NULL) ms_filter_destroy(stream->soundwrite);
	if (stream->encoder!=NULL) ms_filter_destroy(stream->encoder);
	if (stream->decoder!=NULL) ms_filter_destroy(stream->decoder);
	if (stream->dtmfgen!=NULL) ms_filter_destroy(stream->dtmfgen);
#ifndef ENABLED_MCU_MEDIA_SERVER
	if (stream->ec!=NULL)	ms_filter_destroy(stream->ec);
	if (stream->volrecv!=NULL) ms_filter_destroy(stream->volrecv);
	if (stream->volsend!=NULL) ms_filter_destroy(stream->volsend);
	if (stream->equalizer!=NULL) ms_filter_destroy(stream->equalizer);
#endif // ENABLED_MCU_MEDIA_SERVER
	if (stream->ticker!=NULL) ms_ticker_destroy(stream->ticker);
#ifdef ENABLE_UDT
	if (stream->udt!=NULL) ms_filter_destroy(stream->udt);
#endif // ENABLE_UDT
	if (stream->read_resampler!=NULL) ms_filter_destroy(stream->read_resampler);
	if (stream->write_resampler!=NULL) ms_filter_destroy(stream->write_resampler);

	if (stream->mic_tee!=NULL) ms_filter_destroy(stream->mic_tee);
	if (stream->spk_tee!=NULL) ms_filter_destroy(stream->spk_tee);
	if (stream->filewriter!=NULL) ms_filter_destroy(stream->filewriter);
	if (stream->recordmixer!=NULL) ms_filter_destroy(stream->recordmixer);

	if (stream->tee2!=NULL) ms_filter_destroy(stream->tee2);
	if (stream->audio_record!=NULL) ms_filter_destroy(stream->audio_record);
	if (stream->dtmfgen_rtp!=NULL) ms_filter_destroy(stream->dtmfgen_rtp);
	ms_free(stream);
}
示例#26
0
/* this code is not part of the library itself, it is part of the mediastream program */
void audio_stream_free(AudioStream *stream)
{
	if (stream->session!=NULL)
	{
		rtp_session_unregister_event_queue(stream->session,stream->evq);
		rtp_session_destroy(stream->session);
	}
	if (stream->rtpsend!=NULL) ms_filter_destroy(stream->rtpsend);
	if (stream->rtprecv!=NULL) ms_filter_destroy(stream->rtprecv);
	if (stream->soundread!=NULL) ms_filter_destroy(stream->soundread);
	if (stream->soundwrite!=NULL) ms_filter_destroy(stream->soundwrite);
	if (stream->encoder!=NULL) ms_filter_destroy(stream->encoder);
	if (stream->decoder!=NULL) ms_filter_destroy(stream->decoder);
	if (stream->dtmfgen!=NULL) ms_filter_destroy(stream->dtmfgen);
	if (stream->ec!=NULL)	ms_filter_destroy(stream->ec);
	if (stream->volrecv!=NULL) ms_filter_destroy(stream->volrecv);
	if (stream->volsend!=NULL) ms_filter_destroy(stream->volsend);
	if (stream->equalizer!=NULL) ms_filter_destroy(stream->equalizer);
	if (stream->ticker!=NULL) ms_ticker_destroy(stream->ticker);
	if (stream->read_resampler!=NULL) ms_filter_destroy(stream->read_resampler);
	if (stream->write_resampler!=NULL) ms_filter_destroy(stream->write_resampler);
	if (stream->evq!=NULL) ortp_ev_queue_destroy(stream->evq);
	ms_free(stream);
}
示例#27
0
int main(int argc, char *argv[]){
	MSFilter *src, *gen, *det, *rec;
	MSTicker *ticker;

	ms_base_init();
	ortp_set_log_level_mask (ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL);

	src=ms_filter_new(MS_FILE_PLAYER_ID);
	rec=ms_filter_new(MS_FILE_REC_ID);
	gen=ms_filter_new(MS_DTMF_GEN_ID);
	det=ms_filter_new(MS_TONE_DETECTOR_ID);
	
	ms_filter_link(src,0,gen,0);
	ms_filter_link(gen,0,det,0);
	//ms_filter_link(gen,0,rec,0);
	ms_filter_link(det,0,rec,0);

	ticker=ms_ticker_new();

	ms_ticker_attach(ticker,src);

	ms_filter_call_method(rec,MS_FILE_REC_OPEN,"/tmp/output.wav");
	ms_filter_call_method_noarg(rec,MS_FILE_REC_START);
	{
		/*generate and detect the tones*/
		MSDtmfGenCustomTone tone;
		MSToneDetectorDef expected_tone;
		char dtmf='*';
			
		tone.frequency=2000;
		tone.duration=400;
		tone.amplitude=0.6;

		expected_tone.frequency=2000;
		expected_tone.min_duration=200;
		expected_tone.min_amplitude=0.5;
		ms_filter_set_notify_callback(det,(MSFilterNotifyFunc)tone_detected_cb,NULL);
		ms_filter_set_notify_callback(gen,(MSFilterNotifyFunc)tone_sent_cb,NULL);
		
		ms_filter_call_method(det,MS_TONE_DETECTOR_ADD_SCAN,&expected_tone);

		ms_filter_call_method(gen,MS_DTMF_GEN_PLAY,&dtmf);
		ms_sleep(1);
		
		ms_filter_call_method(gen,MS_DTMF_GEN_PLAY_CUSTOM,&tone);
		ms_sleep(1);
		ms_filter_call_method(gen,MS_DTMF_GEN_PLAY_CUSTOM,&tone);
		ms_sleep(1);
		ms_filter_call_method(gen,MS_DTMF_GEN_PLAY_CUSTOM,&tone);
		ms_sleep(1);
		tone.frequency=1500;
		tone.amplitude=1.0;
		ms_filter_call_method(gen,MS_DTMF_GEN_PLAY_CUSTOM,&tone);
		ms_sleep(1);
	}

	ms_filter_call_method_noarg(rec,MS_FILE_REC_CLOSE);
	ms_ticker_detach(ticker,src);

	ms_filter_unlink(src,0,gen,0);
	ms_filter_unlink(gen,0,det,0);
	//ms_filter_unlink(gen,0,rec,0);
	ms_filter_unlink(det,0,rec,0);

	ms_ticker_destroy(ticker);

	ms_filter_destroy(src);
	ms_filter_destroy(gen);
	ms_filter_destroy(det);
	ms_filter_destroy(rec);

	ms_base_exit();
	return 0;
}
void ms_tester_destroy_ticker(void) {
	if (ms_tester_ticker) {
		ms_ticker_destroy(ms_tester_ticker);
		ms_tester_ticker = NULL;
	}
}
示例#29
0
void ms_audio_conference_destroy(MSAudioConference *obj){
	ms_ticker_destroy(obj->ticker);
	ms_filter_destroy(obj->mixer);
	ms_free(obj);
}
示例#30
0
int main(int argc, char *argv[]){
	MSFilter *f1,*f2;
	MSSndCard *card_capture;
	MSSndCard *card_playback;
	MSTicker *ticker;
	MSFactory *factory;
	
	char *capt_card=NULL,*play_card=NULL;
	int rate = 8000;
	int i;
#ifdef __linux
	const char *alsadev=NULL;
#endif

	ortp_init();
	ortp_set_log_level_mask(ORTP_LOG_DOMAIN, ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL);
	
	factory = ms_factory_new_with_voip();

#ifndef _WIN32_WCE
	signal(SIGINT,stop);
#endif

#ifdef __linux
	alsadev=getenv("MS2_ALSADEV");
	if (alsadev!=NULL){
		ms_snd_card_manager_add_card( ms_factory_get_snd_card_manager(factory),
			ms_alsa_card_new_custom (alsadev,alsadev));
	}
#endif
	
	for(i=1;i<argc;++i){
		if (strcmp(argv[i],"--help")==0){
			print_usage();
		}else if (strcmp(argv[i],"--card")==0){
			i++;
			capt_card=play_card=argv[i];
		}else if (strcmp(argv[i],"--capt-card")==0){
			i++;
			capt_card=argv[i];
		}else if (strcmp(argv[i],"--play-card")==0){
			i++;
			play_card=argv[i];
		}
	}

	if (capt_card)
		card_capture = ms_snd_card_manager_get_card(ms_factory_get_snd_card_manager(factory),capt_card);
	else card_capture = ms_snd_card_manager_get_default_capture_card(ms_factory_get_snd_card_manager(factory));
	if (play_card)
		card_playback = ms_snd_card_manager_get_card(ms_factory_get_snd_card_manager(factory),play_card);
	else card_playback = ms_snd_card_manager_get_default_playback_card(ms_factory_get_snd_card_manager(factory));
	
	if (card_playback==NULL || card_capture==NULL){
		ms_error("No card.");
		return -1;
	}
	f1=ms_snd_card_create_reader(card_capture);
	f2=ms_snd_card_create_writer(card_playback);

	ms_filter_call_method (f1, MS_FILTER_SET_SAMPLE_RATE,
		&rate);
	ms_filter_call_method (f2, MS_FILTER_SET_SAMPLE_RATE,
		&rate);

	ticker=ms_ticker_new();
	ms_filter_link(f1,0,f2,0);
	ms_ticker_attach(ticker,f1);
#ifndef _WIN32_WCE
	while(run)
		ms_sleep(1);
#else
	ms_sleep(5);
#endif
	ms_ticker_detach(ticker,f1);
	ms_ticker_destroy(ticker);
	ms_filter_unlink(f1,0,f2,0);
	ms_filter_destroy(f1);
	ms_filter_destroy(f2);
	
	ms_factory_destroy(factory);
	return 0;
}