1 /*
2  * Copyright (C) 2017-2018 Julien Chavanton jchavanton@gmail.com
3  *
4  * This file is part of Kamailio, a free SIP server.
5  *
6  * Kamailio is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version
10  *
11  * Kamailio is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
19  */
20 
21 #ifndef rms_media_h
22 #define rms_media_h
23 
24 #include "../../core/mem/shm.h"
25 #include <mediastreamer2/mediastream.h>
26 #include <mediastreamer2/msrtp.h>
27 #include <mediastreamer2/dtmfgen.h>
28 #include <mediastreamer2/msfileplayer.h>
29 #include <mediastreamer2/msfilerec.h>
30 #include <mediastreamer2/msrtp.h>
31 #include <mediastreamer2/mstonedetector.h>
32 #include <mediastreamer2/msfilter.h>
33 #include <mediastreamer2/mscommon.h>
34 #include <ortp/ortp.h>
35 #include <ortp/port.h>
36 
37 #include "rtp_media_server.h"
38 typedef struct rms_action rms_action_t;
39 
40 
41 typedef struct call_leg_media
42 {
43 	MSFactory *ms_factory;
44 	RtpSession *rtps;
45 	RtpProfile *rtp_profile;
46 	PayloadType *pt;
47 	MSTicker *ms_ticker;
48 	MSFilter *ms_encoder;
49 	MSFilter *ms_decoder;
50 	MSFilter *ms_rtprecv;
51 	MSFilter *ms_rtpsend;
52 	MSFilter *ms_resampler;
53 	MSFilter *ms_player;
54 	MSFilter *ms_recorder;
55 	MSFilter *ms_dtmfgen;
56 	MSFilter *ms_tonedet;
57 	MSFilter *ms_voidsource;
58 	MSFilter *ms_voidsink;
59 	str local_ip;
60 	int local_port;
61 	str remote_ip;
62 	int remote_port;
63 	const struct rms_dialog_info *di;
64 } call_leg_media_t;
65 
66 int create_call_leg_media(call_leg_media_t *m);
67 int create_session_payload(call_leg_media_t *m);
68 
69 int rms_media_init();
70 void rms_media_destroy();
71 
72 MSFactory *rms_get_factory();
73 
74 int rms_stop_media(call_leg_media_t *m);
75 int rms_playfile(call_leg_media_t *m, rms_action_t *a);
76 int rms_start_media(call_leg_media_t *m, char *file_name);
77 int rms_bridge(call_leg_media_t *m1, call_leg_media_t *m2);
78 int rms_stop_bridge(call_leg_media_t *m1, call_leg_media_t *m2);
79 
80 extern MSFilterDesc ms_pcap_file_player_desc;
81 extern MSFilterDesc ms_rtp_send_desc;
82 extern MSFilterDesc ms_rtp_recv_desc;
83 extern MSFilterDesc ms_udp_send_desc;
84 extern MSFilterDesc ms_alaw_dec_desc;
85 extern MSFilterDesc ms_alaw_enc_desc;
86 extern MSFilterDesc ms_ulaw_dec_desc;
87 extern MSFilterDesc ms_ulaw_enc_desc;
88 extern MSFilterDesc ms_dtmf_gen_desc;
89 extern MSFilterDesc ms_volume_desc;
90 extern MSFilterDesc ms_equalizer_desc;
91 extern MSFilterDesc ms_channel_adapter_desc;
92 extern MSFilterDesc ms_audio_mixer_desc;
93 extern MSFilterDesc ms_tone_detector_desc;
94 extern MSFilterDesc ms_genericplc_desc;
95 extern MSFilterDesc ms_file_player_desc;
96 extern MSFilterDesc ms_file_rec_desc;
97 extern MSFilterDesc ms_vad_dtx_desc;
98 extern MSFilterDesc ms_speex_dec_desc;
99 extern MSFilterDesc ms_speex_enc_desc;
100 extern MSFilterDesc ms_speex_ec_desc;
101 extern MSFilterDesc ms_opus_enc_desc;
102 extern MSFilterDesc ms_opus_dec_desc;
103 extern MSFilterDesc ms_resample_desc;
104 
105 #endif
106