TextStream *text_stream_new_with_sessions(const MSMediaStreamSessions *sessions) { TextStream *stream = (TextStream *)ms_new0(TextStream, 1); stream->pt_red = 0; stream->pt_t140 = 0; stream->ms.type = MSText; stream->ms.sessions = *sessions; media_stream_init(&stream->ms, ms_factory_get_fallback()); ms_filter_enable_statistics(TRUE); ms_filter_reset_statistics(); if (sessions->zrtp_context != NULL) { ms_zrtp_set_stream_sessions(sessions->zrtp_context, &(stream->ms.sessions)); } if (sessions->dtls_context != NULL) { ms_dtls_srtp_set_stream_sessions(sessions->dtls_context, &(stream->ms.sessions)); } rtp_session_resync(stream->ms.sessions.rtp_session); /*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.sessions.rtp_session); ms_quality_indicator_set_label(stream->ms.qi, "text"); stream->ms.process_rtcp = text_stream_process_rtcp; return stream; }
void media_stream_init(MediaStream *stream, MSFactory *factory, const MSMediaStreamSessions *sessions) { stream->sessions = *sessions; stream->evd = ortp_ev_dispatcher_new(stream->sessions.rtp_session); stream->evq = ortp_ev_queue_new(); stream->factory = factory; /*the factory is used later to instanciate everything in mediastreamer2.*/ rtp_session_register_event_queue(stream->sessions.rtp_session, stream->evq); /*we give to the zrtp and dtls sessions a backpointer to all the stream sessions*/ if (sessions->zrtp_context != NULL) { ms_zrtp_set_stream_sessions(sessions->zrtp_context, &stream->sessions); } if (sessions->dtls_context != NULL) { ms_dtls_srtp_set_stream_sessions(sessions->dtls_context, &stream->sessions); } }
void media_stream_free(MediaStream *stream) { if (stream->sessions.zrtp_context != NULL) { ms_zrtp_set_stream_sessions(stream->sessions.zrtp_context, NULL); } if (stream->sessions.dtls_context != NULL) { ms_dtls_srtp_set_stream_sessions(stream->sessions.dtls_context, NULL); } if (stream->sessions.rtp_session != NULL) rtp_session_unregister_event_queue(stream->sessions.rtp_session, stream->evq); if (stream->evq != NULL) ortp_ev_queue_destroy(stream->evq); if (stream->evd != NULL) ortp_ev_dispatcher_destroy(stream->evd); if (stream->owns_sessions) ms_media_stream_sessions_uninit(&stream->sessions); if (stream->rc != NULL) ms_bitrate_controller_destroy(stream->rc); if (stream->rtpsend != NULL) ms_filter_destroy(stream->rtpsend); if (stream->rtprecv != NULL) ms_filter_destroy(stream->rtprecv); if (stream->encoder != NULL) ms_filter_destroy(stream->encoder); if (stream->decoder != NULL) ms_filter_destroy(stream->decoder); if (stream->voidsink != NULL) ms_filter_destroy(stream->voidsink); if (stream->qi) ms_quality_indicator_destroy(stream->qi); }