Mediastreamer2 āĻ­āĻŋāĻ“āĻ†āĻ‡āĻĒāĻŋ āĻ‡āĻžā§āĻœāĻŋāĻ¨ āĻ…āĻ¨ā§āĻŦā§‡āĻˇāĻŖ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡āĨ¤ āĻĒāĻžāĻ°ā§āĻŸ 7

āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡āĻ° āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ†āĻŽāĻžāĻ° āĻĨā§‡āĻ•ā§‡ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻœā§‡āĻ¨ āĻšā§āĻ¯āĻžāĻ¨ā§‡āĻ˛.

Mediastreamer2 āĻ­āĻŋāĻ“āĻ†āĻ‡āĻĒāĻŋ āĻ‡āĻžā§āĻœāĻŋāĻ¨ āĻ…āĻ¨ā§āĻŦā§‡āĻˇāĻŖ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡āĨ¤ āĻĒāĻžāĻ°ā§āĻŸ 7

RTP āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ•āĻ°āĻ¤ā§‡ TShark āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡

Mediastreamer2 āĻ­āĻŋāĻ“āĻ†āĻ‡āĻĒāĻŋ āĻ‡āĻžā§āĻœāĻŋāĻ¨ āĻ…āĻ¨ā§āĻŦā§‡āĻˇāĻŖ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡āĨ¤ āĻĒāĻžāĻ°ā§āĻŸ 7

āĻļā§‡āĻˇā§‡ āĻĒā§āĻ°āĻŦāĻ¨ā§āĻ§ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻŸā§‹āĻ¨ āĻœā§‡āĻ¨āĻžāĻ°ā§‡āĻŸāĻ° āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻŸā§‹āĻ¨ āĻĄāĻŋāĻŸā§‡āĻ•ā§āĻŸāĻ° āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ°āĻŋāĻŽā§‹āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛ āĻ¸āĻžāĻ°ā§āĻ•āĻŋāĻŸ āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤ āĻ•āĻ°ā§‡āĻ›āĻŋ, āĻ¯āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻāĻ•āĻŸāĻŋ RTP āĻ¸ā§āĻŸā§āĻ°āĻŋāĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤

āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡, āĻ†āĻŽāĻ°āĻž RTP āĻĒā§āĻ°ā§‹āĻŸā§‹āĻ•āĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ…āĻĄāĻŋāĻ“ āĻ¸āĻ‚āĻ•ā§‡āĻ¤ āĻ¸āĻ‚āĻ•ā§āĻ°āĻŽāĻŖ āĻ…āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨ āĻšāĻžāĻ˛āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻšā§āĻ›āĻŋāĨ¤ āĻĒā§āĻ°āĻĨāĻŽā§‡, āĻ†āĻ¸ā§āĻ¨ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻŽāĻŋāĻŸāĻžāĻ° āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ°āĻŋāĻ¸āĻŋāĻ­āĻžāĻ°ā§‡ āĻ­āĻžāĻ— āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻŸā§āĻ°āĻžāĻĢāĻŋāĻ• āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻ• āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ RTP āĻ¸ā§āĻŸā§āĻ°āĻŋāĻŽ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧ āĻ¤āĻž āĻļāĻŋāĻ–āĻŋāĨ¤

āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻ¯āĻžāĻ¤ā§‡ āĻ†āĻŽāĻ°āĻž āĻ†āĻ°āĻ“ āĻ¸ā§āĻĒāĻˇā§āĻŸāĻ­āĻžāĻŦā§‡ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ āĻ¯ā§‡ āĻ•ā§‹āĻ¨ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ†āĻ°āĻŸāĻŋāĻĒāĻŋ āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻŽāĻŋāĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĻāĻžāĻ¯āĻŧā§€ āĻāĻŦāĻ‚ āĻ•ā§‹āĻ¨āĻŸāĻŋ āĻ—ā§āĻ°āĻšāĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĻāĻžāĻ¯āĻŧā§€, āĻ†āĻŽāĻ°āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° mstest6.c āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋāĻ•ā§‡ āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻŽāĻŋāĻŸāĻžāĻ° āĻāĻŦāĻ‚ āĻ°āĻŋāĻ¸āĻŋāĻ­āĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĻā§āĻŸāĻŋ āĻ¸ā§āĻŦāĻžāĻ§ā§€āĻ¨ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽā§‡ āĻ­āĻžāĻ— āĻ•āĻ°āĻŋ; āĻ†āĻŽāĻ°āĻž āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ°āĻžāĻ–āĻŦ āĻ¯āĻž āĻ‰āĻ­āĻ¯āĻŧāĻ‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¤ā§ƒāĻ¤ā§€āĻ¯āĻŧ āĻĢāĻžāĻ‡āĻ˛ā§‡, āĻ¯āĻž āĻ†āĻŽāĻ°āĻž āĻ•āĻ˛ āĻ•āĻ°āĻŦ mstest_common.c, āĻāĻŸāĻŋ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻŋāĻ•āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻŽāĻŋāĻŸāĻžāĻ° āĻāĻŦāĻ‚ āĻ°āĻŋāĻ¸āĻŋāĻ­āĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻŦā§‡:

/* ФаКĐģ mstest_common.c ОбŅ‰Đ¸Đĩ Ņ„ŅƒĐŊĐēŅ†Đ¸Đ¸ Đ´ĐģŅ ĐŋĐĩŅ€ĐĩĐ´Đ°Ņ‚Ņ‡Đ¸ĐēĐ° и ĐŋŅ€Đ¸ĐĩĐŧĐŊиĐēĐ°. */
#include <mediastreamer2/msfilter.h>
#include <mediastreamer2/msticker.h>
#include <mediastreamer2/msrtp.h>
#include <ortp/rtpsession.h>
#include <ortp/payloadtype.h>

define PCMU 0

/*---------------------------------------------------------*/
/* ФŅƒĐŊĐēŅ†Đ¸Ņ Ņ€ĐĩĐŗиŅŅ‚Ņ€Đ°Ņ†Đ¸Đ¸ Ņ‚иĐŋОв ĐŋĐžĐģĐĩСĐŊŅ‹Ņ… ĐŊĐ°ĐŗŅ€ŅƒĐˇĐžĐē. */
void register_payloads(void)
{  
 /* Đ ĐĩĐŗиŅŅ‚Ņ€Đ¸Ņ€ŅƒĐĩĐŧ Ņ‚иĐŋŅ‹ ĐŊĐ°ĐŗŅ€ŅƒĐˇĐžĐē в Ņ‚Đ°ĐąĐģиŅ†Đĩ ĐŋŅ€ĐžŅ„иĐģĐĩĐš. ПоздĐŊĐĩĐĩ, ĐŋĐž иĐŊĐ´ĐĩĐēŅŅƒ    вСŅŅ‚ĐžĐŧŅƒ 
     иС СаĐŗĐžĐģОвĐēĐ° RTP-ĐŋĐ°ĐēĐĩŅ‚Đ° иС ŅŅ‚ОК Ņ‚Đ°ĐąĐģиŅ†Ņ‹ ĐąŅƒĐ´ŅƒŅ‚ иСвĐģĐĩĐēĐ°Ņ‚ŅŒŅŅ    ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€Ņ‹ 
     ĐŊĐ°ĐŗŅ€ŅƒĐˇĐēи, ĐŊĐĩОйŅ…ОдиĐŧŅ‹Đĩ Đ´ĐģŅ Đ´ĐĩĐēОдиŅ€ĐžĐ˛Đ°ĐŊиŅ Đ´Đ°ĐŊĐŊŅ‹Ņ… ĐŋĐ°ĐēĐĩŅ‚Đ°. */
  rtp_profile_set_payload (&av_profile, PCMU, &payload_type_pcm8000);
}

/*---------------------------------------------------------*/
/* Đ­Ņ‚Đ° Ņ„ŅƒĐŊĐēŅ†Đ¸Ņ ŅĐžĐˇĐ´Đ°ĐŊĐ° иС Ņ„ŅƒĐŊĐēŅ†Đ¸Đ¸ create_duplex_rtpsession() в audiostream.c   ĐŧĐĩдиаŅŅ‚Ņ€Đ¸ĐŧĐĩŅ€Đ°2. */
 static RtpSession *create_rtpsession (int loc_rtp_port, int loc_rtcp_port,  bool_t ipv6, RtpSessionMode mode)
{  
  RtpSession *rtpr;  rtpr = rtp_session_new ((int) mode);  
  rtp_session_set_scheduling_mode (rtpr, 0);  
  rtp_session_set_blocking_mode (rtpr, 0);
  rtp_session_enable_adaptive_jitter_compensation (rtpr, TRUE);
  rtp_session_set_symmetric_rtp (rtpr, TRUE); 
  rtp_session_set_local_addr (rtpr, ipv6 ? "::" : "0.0.0.0", loc_rtp_port,  loc_rtcp_port); 
  rtp_session_signal_connect (rtpr, "timestamp_jump",  (RtpCallback) rtp_session_resync, 0);
  rtp_session_signal_connect (rtpr, "ssrc_changed",  (RtpCallback) rtp_session_resync, 0);
  rtp_session_set_ssrc_changed_threshold (rtpr, 0);
  rtp_session_set_send_payload_type(rtpr, PCMU);

  /* По ŅƒĐŧĐžĐģŅ‡Đ°ĐŊиŅŽ вŅ‹ĐēĐģŅŽŅ‡Đ°ĐĩĐŧ RTCP-ŅĐĩŅŅĐ¸ŅŽ, Ņ‚Đ°Đē ĐēĐ°Đē ĐŊĐ°Ņˆ ĐŋŅƒĐģŅŒŅ‚ ĐŊĐĩ ĐąŅƒĐ´ĐĩŅ‚ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ 
  ĐĩŅ‘. */  
 rtp_session_enable_rtcp (rtpr, FALSE);
 return rtpr;
}

āĻāĻ–āĻ¨ āĻĒā§ƒāĻĨāĻ• āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻŽāĻŋāĻŸāĻžāĻ° āĻĢāĻžāĻ‡āĻ˛:

/* ФаКĐģ mstest6.c ИĐŧиŅ‚Đ°Ņ‚ĐžŅ€ ĐŋŅƒĐģŅŒŅ‚Đ° ŅƒĐŋŅ€Đ°Đ˛ĐģĐĩĐŊиŅ (ĐŋĐĩŅ€ĐĩĐ´Đ°Ņ‚Ņ‡Đ¸ĐēĐ°). */
#include <mediastreamer2/dtmfgen.h>
#include <mediastreamer2/msrtp.h>
#include "mstest_common.c"

/*----------------------------------------------------------*/
int main()
{ 
  ms_init();

/* ХОСдаĐĩĐŧ ŅĐēСĐĩĐŧĐŋĐģŅŅ€Ņ‹ Ņ„иĐģŅŒŅ‚Ņ€ĐžĐ˛. */
  MSFilter *voidsource = ms_filter_new(MS_VOID_SOURCE_ID); 
  MSFilter *dtmfgen = ms_filter_new(MS_DTMF_GEN_ID);

/* ХОСдаĐĩĐŧ Ņ„иĐģŅŒŅ‚Ņ€ ĐēОдĐĩŅ€Đ°. */
  MSFilter *encoder = ms_filter_create_encoder("PCMU");

/* Đ ĐĩĐŗиŅŅ‚Ņ€Đ¸Ņ€ŅƒĐĩĐŧ Ņ‚иĐŋŅ‹ ĐŊĐ°ĐŗŅ€ŅƒĐˇĐēи. */
  register_payloads();

/* ХОСдаĐĩĐŧ RTP-ŅĐĩŅŅĐ¸ŅŽ ĐŋĐĩŅ€ĐĩĐ´Đ°Ņ‚Ņ‡Đ¸ĐēĐ°. */
  RtpSession *tx_rtp_session = create_rtpsession (8010, 8011, FALSE, RTP_SESSION_SENDONLY);  
 rtp_session_set_remote_addr_and_port(tx_rtp_session,"127.0.0.1", 7010, 7011); 
 rtp_session_set_send_payload_type(tx_rtp_session, PCMU);  
 MSFilter *rtpsend = ms_filter_new(MS_RTP_SEND_ID); 
 ms_filter_call_method(rtpsend, MS_RTP_SEND_SET_SESSION, tx_rtp_session);

/* ХОСдаĐĩĐŧ иŅŅ‚ĐžŅ‡ĐŊиĐē Ņ‚Đ°ĐēŅ‚Ов - Ņ‚иĐēĐĩŅ€. */ 
 MSTicker *ticker_tx = ms_ticker_new();

/* ĐĄĐžĐĩдиĐŊŅĐĩĐŧ Ņ„иĐģŅŒŅ‚Ņ€Ņ‹ ĐŋĐĩŅ€ĐĩĐ´Đ°Ņ‚Ņ‡Đ¸ĐēĐ°. */ 
 ms_filter_link(voidsource, 0, dtmfgen, 0);  
 ms_filter_link(dtmfgen, 0, encoder, 0);
 ms_filter_link(encoder, 0, rtpsend, 0);

/* ПодĐēĐģŅŽŅ‡Đ°ĐĩĐŧ иŅŅ‚ĐžŅ‡ĐŊиĐē Ņ‚Đ°ĐēŅ‚Ов. */
  ms_ticker_attach(ticker_tx, voidsource);

/* НаŅŅ‚Ņ€Đ°Đ¸Đ˛Đ°ĐĩĐŧ ŅŅ‚Ņ€ŅƒĐēŅ‚ŅƒŅ€Ņƒ, ŅƒĐŋŅ€Đ°Đ˛ĐģŅŅŽŅ‰ŅƒŅŽ вŅ‹Ņ…ОдĐŊŅ‹Đŧ ŅĐ¸ĐŗĐŊĐ°ĐģĐžĐŧ ĐŗĐĩĐŊĐĩŅ€Đ°Ņ‚ĐžŅ€Đ°. */ 
 MSDtmfGenCustomTone dtmf_cfg; 
 dtmf_cfg.tone_name[0] = 0; 
 dtmf_cfg.duration = 1000; 
 dtmf_cfg.frequencies[0] = 440;

/* БŅƒĐ´ĐĩĐŧ ĐŗĐĩĐŊĐĩŅ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ОдиĐŊ Ņ‚ĐžĐŊ, Ņ‡Đ°ŅŅ‚ĐžŅ‚Ņƒ вŅ‚ĐžŅ€ĐžĐŗĐž Ņ‚ĐžĐŊĐ° ŅƒŅŅ‚Đ°ĐŊОвиĐŧ в 0. */  
 dtmf_cfg.frequencies[1] = 0; 
 dtmf_cfg.amplitude = 1.0; 
 dtmf_cfg.interval = 0.;  
 dtmf_cfg.repeat_count = 0.;

/* ОŅ€ĐŗĐ°ĐŊиСŅƒĐĩĐŧ Ņ†Đ¸ĐēĐģ ŅĐēĐ°ĐŊиŅ€ĐžĐ˛Đ°ĐŊиŅ ĐŊĐ°ĐļĐ°Ņ‚Ņ‹Ņ… ĐēĐģавиŅˆ. Ввод ĐŊŅƒĐģŅ СавĐĩŅ€ŅˆĐ°ĐĩŅ‚
* Ņ†Đ¸ĐēĐģ и Ņ€Đ°ĐąĐžŅ‚Ņƒ ĐŋŅ€ĐžĐŗŅ€Đ°ĐŧĐŧŅ‹. */  
 char key='9'; 
 printf("НаĐļĐŧиŅ‚Đĩ ĐēĐģавиŅˆŅƒ ĐēĐžĐŧĐ°ĐŊĐ´Ņ‹, СаŅ‚ĐĩĐŧ ввОд.n"  
"ДĐģŅ СавĐĩŅ€ŅˆĐĩĐŊиŅ ĐŋŅ€ĐžĐŗŅ€Đ°ĐŧĐŧŅ‹ ввĐĩдиŅ‚Đĩ 0.n");  
while(key != '0')  
{
 key = getchar();   
 if ((key >= 49) && (key <= 54)) 
   {
      printf("ОŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐ° ĐēĐžĐŧĐ°ĐŊĐ´Đ°: %cn", key);
      /* ĐŖŅŅ‚Đ°ĐŊавĐģиваĐĩĐŧ Ņ‡Đ°ŅŅ‚ĐžŅ‚Ņƒ ĐŗĐĩĐŊĐĩŅ€Đ°Ņ‚ĐžŅ€Đ° в ŅĐžĐžŅ‚вĐĩŅ‚ŅŅ‚вии Ņ
       * ĐēОдОĐŧ ĐŊĐ°ĐļĐ°Ņ‚ОК ĐēĐģавиŅˆĐ¸. */
      dtmf_cfg.frequencies[0] = 440 + 100*(key-49);

      /* ВĐēĐģŅŽŅ‡Đ°ĐĩĐŧ СвŅƒĐēОвОК ĐŗĐĩĐŊĐĩŅ€Đ°Ņ‚ĐžŅ€ c ОйĐŊОвĐģĐĩĐŊĐŊОК Ņ‡Đ°ŅŅ‚ĐžŅ‚ОК. */
      ms_filter_call_method(dtmfgen, MS_DTMF_GEN_PLAY_CUSTOM,      (void*)&dtmf_cfg); 
   }
   /* ĐŖĐēĐģĐ°Đ´Ņ‹Đ˛Đ°ĐĩĐŧ Ņ‚Ņ€ĐĩĐ´ в ŅĐŋŅŅ‡ĐēŅƒ ĐŊĐ° 20ĐŧŅ, Ņ‡Ņ‚ОйŅ‹ Đ´Ņ€ŅƒĐŗиĐĩ Ņ‚Ņ€ĐĩĐ´Ņ‹ 
   * ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиŅ ĐŋĐžĐģŅƒŅ‡Đ¸Đģи вŅ€ĐĩĐŧŅ ĐŊĐ° Ņ€Đ°ĐąĐžŅ‚Ņƒ. */ 
  ms_usleep(20000);
  }
}

āĻāĻŦāĻ‚ āĻ…āĻŦāĻļā§‡āĻˇā§‡, āĻ°āĻŋāĻ¸āĻŋāĻ­āĻžāĻ° āĻĢāĻžāĻ‡āĻ˛:

/* ФаКĐģ mstest7.c ИĐŧиŅ‚Đ°Ņ‚ĐžŅ€ ĐŋŅ€Đ¸ĐĩĐŧĐŊиĐēĐ°. */
include <mediastreamer2/mssndcard.h>
include <mediastreamer2/mstonedetector.h>
include <mediastreamer2/msrtp.h>

/* ПодĐēĐģŅŽŅ‡Đ°ĐĩĐŧ СаĐŗĐžĐģОвОŅ‡ĐŊŅ‹Đš Ņ„Đ°ĐšĐģ Ņ Ņ„ŅƒĐŊĐēŅ†Đ¸ŅĐŧи ŅƒĐŋŅ€Đ°Đ˛ĐģĐĩĐŊиŅ ŅĐžĐąŅ‹Ņ‚иŅĐŧи  ĐŧĐĩдиаŅŅ‚Ņ€Đ¸ĐŧĐĩŅ€Đ°.*/
include <mediastreamer2/mseventqueue.h>
/* ПодĐēĐģŅŽŅ‡Đ°ĐĩĐŧ Ņ„Đ°ĐšĐģ ОйŅ‰Đ¸Ņ… Ņ„ŅƒĐŊĐēŅ†Đ¸Đš. */
include "mstest_common.c"

/* ФŅƒĐŊĐēŅ†Đ¸Ņ ОйŅ€Đ°Ņ‚ĐŊĐžĐŗĐž вŅ‹ĐˇĐžĐ˛Đ°, ĐžĐŊĐ° ĐąŅƒĐ´ĐĩŅ‚ вŅ‹ĐˇĐ˛Đ°ĐŊĐ° Ņ„иĐģŅŒŅ‚Ņ€ĐžĐŧ, ĐēĐ°Đē Ņ‚ĐžĐģŅŒĐēĐž ĐžĐŊ   ОйĐŊĐ°Ņ€ŅƒĐļиŅ‚ ŅĐžĐ˛ĐŋĐ°Đ´ĐĩĐŊиĐĩ Ņ…Đ°Ņ€Đ°ĐēŅ‚ĐĩŅ€Đ¸ŅŅ‚иĐē вŅ…ОдĐŊĐžĐŗĐž ŅĐ¸ĐŗĐŊĐ°ĐģĐ° Ņ СадаĐŊĐŊŅ‹Đŧи. */
static void tone_detected_cb(void *data, MSFilter *f, unsigned int event_id,MSToneDetectorEvent *ev)
{ 
 printf("ПŅ€Đ¸ĐŊŅŅ‚Đ° ĐēĐžĐŧĐ°ĐŊĐ´Đ°: %sn", ev->tone_name);
}

/*----------------------------------------------------------*/
int main()
{ 
 ms_init();

/* ХОСдаĐĩĐŧ ŅĐēСĐĩĐŧĐŋĐģŅŅ€Ņ‹ Ņ„иĐģŅŒŅ‚Ņ€ĐžĐ˛. */  
 MSSndCard *card_playback =  ms_snd_card_manager_get_default_card(ms_snd_card_manager_get()); 
 MSFilter *snd_card_write = ms_snd_card_create_writer(card_playback); 
 MSFilter *detector = ms_filter_new(MS_TONE_DETECTOR_ID);

/* ОŅ‡Đ¸Ņ‰Đ°ĐĩĐŧ ĐŧĐ°ŅŅĐ¸Đ˛ ĐŊĐ°Ņ…ОдŅŅ‰Đ¸ĐšŅŅ вĐŊŅƒŅ‚Ņ€Đ¸ Đ´ĐĩŅ‚ĐĩĐēŅ‚ĐžŅ€Đ° Ņ‚ĐžĐŊОв, ĐžĐŊ ĐžĐŋиŅŅ‹Đ˛Đ°ĐĩŅ‚
* ĐžŅĐžĐąŅ‹Đĩ ĐŋŅ€Đ¸ĐŧĐĩŅ‚Ņ‹ Ņ€Đ°ĐˇŅ‹ŅĐēиваĐĩĐŧŅ‹Ņ… ŅĐ¸ĐŗĐŊĐ°ĐģОв.*/
  ms_filter_call_method(detector, MS_TONE_DETECTOR_CLEAR_SCANS, 0);

/* ПодĐēĐģŅŽŅ‡Đ°ĐĩĐŧ Đē Ņ„иĐģŅŒŅ‚Ņ€Ņƒ Ņ„ŅƒĐŊĐēŅ†Đ¸ŅŽ ОйŅ€Đ°Ņ‚ĐŊĐžĐŗĐž вŅ‹ĐˇĐžĐ˛Đ°. */  
ms_filter_set_notify_callback(detector,  (MSFilterNotifyFunc)tone_detected_cb, NULL);

/* ХОСдаĐĩĐŧ ĐŧĐ°ŅŅĐ¸Đ˛, ĐēĐ°ĐļĐ´Ņ‹Đš ŅĐģĐĩĐŧĐĩĐŊŅ‚ ĐēĐžŅ‚ĐžŅ€ĐžĐŗĐž ĐžĐŋиŅŅ‹Đ˛Đ°ĐĩŅ‚ Ņ…Đ°Ņ€Đ°ĐēŅ‚ĐĩŅ€Đ¸ŅŅ‚иĐēŅƒ
* ОдĐŊĐžĐŗĐž иС Ņ‚ĐžĐŊОв, ĐēĐžŅ‚ĐžŅ€Ņ‹Đš Ņ‚Ņ€ĐĩĐąŅƒĐĩŅ‚ŅŅ ОйĐŊĐ°Ņ€ŅƒĐļиваŅ‚ŅŒ:
ĐĸĐĩĐēŅŅ‚ОвОĐĩ иĐŧŅ
* Đ´Đ°ĐŊĐŊĐžĐŗĐž ŅĐģĐĩĐŧĐĩĐŊŅ‚Đ°, Ņ‡Đ°ŅŅ‚ĐžŅ‚Đ° в ĐŗĐĩŅ€Ņ†Đ°Ņ…, Đ´ĐģиŅ‚ĐĩĐģŅŒĐŊĐžŅŅ‚ŅŒ в ĐŧиĐģĐģиŅĐĩĐēŅƒĐŊĐ´Đ°Ņ…,
* ĐŧиĐŊиĐŧĐ°ĐģŅŒĐŊŅ‹Đš ŅƒŅ€ĐžĐ˛ĐĩĐŊŅŒ ĐžŅ‚ĐŊĐžŅĐ¸Ņ‚ĐĩĐģŅŒĐŊĐž 0,775В. */
  MSToneDetectorDef scan[6]= 
 {   
    {"V+",440, 100, 0.1}, /* КоĐŧĐ°ĐŊĐ´Đ° "ĐŖвĐĩĐģиŅ‡Đ¸Ņ‚ŅŒ ĐŗŅ€ĐžĐŧĐēĐžŅŅ‚ŅŒ". */
    {"V-",540, 100, 0.1}, /* КоĐŧĐ°ĐŊĐ´Đ° "ĐŖĐŧĐĩĐŊŅŒŅˆĐ¸Ņ‚ŅŒ ĐŗŅ€ĐžĐŧĐēĐžŅŅ‚ŅŒ". */
    {"C+",640, 100, 0.1}, /* КоĐŧĐ°ĐŊĐ´Đ° "ĐŖвĐĩĐģиŅ‡Đ¸Ņ‚ŅŒ ĐŊĐžĐŧĐĩŅ€ ĐēĐ°ĐŊĐ°ĐģĐ°". */
    {"C-",740, 100, 0.1}, /* КоĐŧĐ°ĐŊĐ´Đ° "ĐŖĐŧĐĩĐŊŅŒŅˆĐ¸Ņ‚ŅŒ ĐŊĐžĐŧĐĩŅ€ ĐēĐ°ĐŊĐ°ĐģĐ°". */
    {"ON",840, 100, 0.1}, /* КоĐŧĐ°ĐŊĐ´Đ° "ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ Ņ‚ĐĩĐģĐĩвиСОŅ€". */
    {"OFF", 940, 100, 0.1}/* КоĐŧĐ°ĐŊĐ´Đ° "ВŅ‹ĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ Ņ‚ĐĩĐģĐĩвиСОŅ€". */
  };

/* ПĐĩŅ€ĐĩĐ´Đ°ĐĩĐŧ "ĐŋŅ€Đ¸ĐŧĐĩŅ‚Ņ‹" ŅĐ¸ĐŗĐŊĐ°ĐģОв Đ´ĐĩŅ‚ĐĩĐēŅ‚ĐžŅ€ Ņ‚ĐžĐŊОв. */
  int i; 
 for (i = 0; i < 6; i++) 
 { 
   ms_filter_call_method(detector, MS_TONE_DETECTOR_ADD_SCAN,    &scan[i]); 
 }

/* ХОСдаĐĩĐŧ Ņ„иĐģŅŒŅ‚Ņ€ Đ´ĐĩĐēОдĐĩŅ€Đ° */
  MSFilter *decoder=ms_filter_create_decoder("PCMU");

/* Đ ĐĩĐŗиŅŅ‚Ņ€Đ¸Ņ€ŅƒĐĩĐŧ Ņ‚иĐŋŅ‹ ĐŊĐ°ĐŗŅ€ŅƒĐˇĐēи. */
  register_payloads();

/* ХОСдаĐĩĐŧ RTP-ŅĐĩŅŅĐ¸ŅŽ ĐŋŅ€Đ¸ĐĩĐŧĐŊиĐēĐ°. */
  MSFilter *rtprecv = ms_filter_new(MS_RTP_RECV_ID);
  RtpSession *rx_rtp_session = create_rtpsession (7010, 7011, FALSE, RTP_SESSION_RECVONLY);
  ms_filter_call_method(rtprecv, MS_RTP_RECV_SET_SESSION, rx_rtp_session);

/* ХОСдаĐĩĐŧ иŅŅ‚ĐžŅ‡ĐŊиĐē Ņ‚Đ°ĐēŅ‚Ов - Ņ‚иĐēĐĩŅ€. */ 
 MSTicker *ticker_rx = ms_ticker_new();

/* ĐĄĐžĐĩдиĐŊŅĐĩĐŧ Ņ„иĐģŅŒŅ‚Ņ€Ņ‹ ĐŋŅ€Đ¸Ņ‘ĐŧĐŊиĐēĐ°. */
  ms_filter_link(rtprecv, 0, decoder, 0);
  ms_filter_link(decoder, 0, detector, 0);
  ms_filter_link(detector, 0, snd_card_write, 0);

/* ПодĐēĐģŅŽŅ‡Đ°ĐĩĐŧ иŅŅ‚ĐžŅ‡ĐŊиĐē Ņ‚Đ°ĐēŅ‚Ов. */
  ms_ticker_attach(ticker_rx, rtprecv);
  char key='9';
  printf( "ДĐģŅ СавĐĩŅ€ŅˆĐĩĐŊиŅ ĐŋŅ€ĐžĐŗŅ€Đ°ĐŧĐŧŅ‹ ввĐĩдиŅ‚Đĩ 0.n");
  while(key != '0') 
 {
    key = getchar();
   /* ĐŖĐēĐģĐ°Đ´Ņ‹Đ˛Đ°ĐĩĐŧ Ņ‚Ņ€ĐĩĐ´ в ŅĐŋŅŅ‡ĐēŅƒ ĐŊĐ° 20ĐŧŅ, Ņ‡Ņ‚ОйŅ‹ Đ´Ņ€ŅƒĐŗиĐĩ Ņ‚Ņ€ĐĩĐ´Ņ‹    * ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиŅ ĐŋĐžĐģŅƒŅ‡Đ¸Đģи вŅ€ĐĩĐŧŅ ĐŊĐ° Ņ€Đ°ĐąĐžŅ‚Ņƒ. */
   ms_usleep(20000); 
 }
}

āĻ†āĻŽāĻ°āĻž āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻŽāĻŋāĻŸāĻžāĻ° āĻāĻŦāĻ‚ āĻ°āĻŋāĻ¸āĻŋāĻ­āĻžāĻ° āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛ āĻ•āĻ°āĻŋ, āĻ¤āĻžāĻ°āĻĒāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋāĻ•ā§‡ āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ•āĻ¨āĻ¸ā§‹āĻ˛ā§‡ āĻ˛āĻžā§āĻš āĻ•āĻ°āĻŋāĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻāĻŸāĻŋ āĻ†āĻ—ā§‡āĻ° āĻŽāĻ¤ā§‹ āĻ•āĻžāĻœ āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤ - āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻŽāĻŋāĻŸāĻžāĻ° āĻ•āĻ¨āĻ¸ā§‹āĻ˛ā§‡ 1 āĻĨā§‡āĻ•ā§‡ 6 āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻšāĻŦā§‡ āĻāĻŦāĻ‚ āĻ¤āĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ°āĻŋāĻ¸āĻŋāĻ­āĻžāĻ° āĻ•āĻ¨āĻ¸ā§‹āĻ˛ā§‡ āĻ‰āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤ āĻšāĻ“āĻ¯āĻŧāĻž āĻ‰āĻšāĻŋāĻ¤āĨ¤ āĻ¸ā§āĻĒā§€āĻ•āĻžāĻ°ā§‡ āĻŸā§‹āĻ¨ āĻļā§āĻ°āĻŦāĻŖāĻ¯ā§‹āĻ—ā§āĻ¯ āĻšāĻ“āĻ¯āĻŧāĻž āĻ‰āĻšāĻŋāĻ¤āĨ¤ āĻ¯āĻĻāĻŋ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ¤āĻžāĻ‡ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻŽāĻ°āĻž āĻ°āĻŋāĻ¸āĻŋāĻ­āĻžāĻ° āĻāĻŦāĻ‚ āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻŽāĻŋāĻŸāĻžāĻ°ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§‡āĻ›āĻŋ - āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻŽāĻŋāĻŸāĻžāĻ° āĻĨā§‡āĻ•ā§‡ āĻ°āĻŋāĻ¸āĻŋāĻ­āĻžāĻ°ā§‡ āĻ†āĻ°āĻŸāĻŋāĻĒāĻŋ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸāĻ—ā§āĻ˛āĻŋāĻ° āĻ•ā§āĻ°āĻŽāĻžāĻ—āĻ¤ āĻ¸āĻ‚āĻ•ā§āĻ°āĻŽāĻŖ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻāĻ–āĻ¨ āĻāĻ•āĻŸāĻŋ āĻŸā§āĻ°ā§āĻ¯āĻžāĻĢāĻŋāĻ• āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻ• āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ; āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ°āĻž āĻšāĻŽā§ŽāĻ•āĻžāĻ° āĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ°āĻļāĻžāĻ°ā§āĻ• āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽā§‡āĻ° āĻ•āĻ¨āĻ¸ā§‹āĻ˛ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖāĻŸāĻŋ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻŦ - āĻāĻŸāĻŋāĻ•ā§‡ TShark āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧāĨ¤ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻžāĻ° āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ¸āĻšāĻœāĻ¤āĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻŋ āĻ†āĻ°āĻ“ āĻ†āĻ˛ā§‹āĻšāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ TShark āĻŦā§‡āĻ›ā§‡ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĨ¤ Wireshark-āĻāĻ° āĻ¸āĻžāĻĨā§‡, āĻ†āĻŽāĻžāĻ° āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻ¨āĻļāĻŸāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽā§āĻĻā§āĻ°ā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻŦā§‡, āĻ¯āĻž Wireshark-āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻĒā§āĻ°āĻ•āĻžāĻļāĻŋāĻ¤ āĻšāĻ˛ā§‡ āĻĻā§āĻ°ā§āĻ¤ āĻĒā§āĻ°āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ Wireshark āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻœāĻžāĻ¨ā§‡āĻ¨ āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ—ā§āĻ˛āĻŋ āĻ…āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻ¤āĻŦā§‡ āĻāĻ‡ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡āĻ“, āĻ†āĻŽāĻŋ āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻ•āĻ°āĻ›āĻŋ āĻ¯ā§‡ āĻ†āĻĒāĻ¨āĻŋ TShark āĻ āĻĻāĻ•ā§āĻˇāĻ¤āĻž āĻ…āĻ°ā§āĻœāĻ¨ āĻ•āĻ°ā§āĻ¨, āĻ•āĻžāĻ°āĻŖ āĻāĻŸāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ­āĻŋāĻ“āĻ†āĻ‡āĻĒāĻŋ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻĻā§‚āĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ•ā§āĻ¯āĻžāĻĒāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ¤āĻž āĻ•āĻ°āĻŦā§‡āĨ¤

āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĻāĻŋāĻ¯āĻŧā§‡ TShark āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°ā§āĻ¨:

$ sudo apt-get install tshark

āĻāĻ¤āĻŋāĻšā§āĻ¯āĻ—āĻ¤āĻ­āĻžāĻŦā§‡, āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻœāĻŋāĻœā§āĻžāĻžāĻ¸āĻž āĻ•āĻ°ā§‡ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ā§‡āĻļāĻ¨ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŋ:

$ tshark --version

āĻ¯āĻĻāĻŋ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°ā§āĻ¯āĻžāĻĒā§āĻ¤ āĻ‰āĻ¤ā§āĻ¤āĻ° āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧ, āĻ†āĻŽāĻ°āĻž āĻ†āĻ°āĻ“ āĻšāĻžāĻ˛āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻŦāĨ¤

āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸāĻ—ā§āĻ˛āĻŋ āĻ†āĻĒāĻžāĻ¤āĻ¤ āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻžāĻ°ā§‡āĻ° āĻ­āĻŋāĻ¤āĻ°ā§‡ āĻ¯āĻžāĻ¯āĻŧ, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻ°āĻž tshark āĻ•ā§‡ āĻŦāĻ˛āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸāĻ—ā§āĻ˛āĻŋ āĻĻā§‡āĻ–āĻžāĻ¤ā§‡āĨ¤ āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻĨā§‡āĻ•ā§‡ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻ•ā§āĻ¯āĻžāĻĒāĻšāĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ˛ā§āĻĒāĻŦā§āĻ¯āĻžāĻ• (āĻ˛ā§āĻĒāĻŦā§āĻ¯āĻžāĻ•) TShark āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāĻŸāĻŋ āĻĒāĻžāĻ¸ āĻ•āĻ°ā§‡ -āĻ‡āĻ˛ā§‹:

$ sudo tshark -i lo

āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻŽāĻŋāĻŸāĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒā§āĻ°ā§‡āĻ°āĻŋāĻ¤ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ—ā§āĻ˛āĻŋ āĻ…āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§‡ āĻ•āĻ¨āĻ¸ā§‹āĻ˛ā§‡ āĻĸāĻžāĻ˛āĻž āĻļā§āĻ°ā§ āĻšāĻŦā§‡ (āĻ†āĻŽāĻ°āĻž āĻ°āĻŋāĻŽā§‹āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛ā§‡ āĻŦā§‹āĻ¤āĻžāĻŽ āĻŸāĻŋāĻĒā§āĻ¨ āĻ•āĻŋ āĻ¨āĻž āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻŦāĻŋāĻļā§‡āĻˇā§‡ āĻ•ā§āĻ°āĻŽāĻžāĻ—āĻ¤)āĨ¤ āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻžāĻ°ā§‡ āĻāĻŽāĻ¨ āĻ•āĻŋāĻ›ā§ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ†āĻ›ā§‡ āĻ¯āĻž āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻ˛ā§āĻĒā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻĒāĻžāĻ āĻžāĻ¯āĻŧ, āĻāĻ‡ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ†āĻŽāĻ°āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ˛ā§‹āĻ•ā§‡āĻ° āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸā§‡āĻ° āĻŽāĻŋāĻļā§āĻ°āĻŖ āĻĒāĻžāĻŦāĨ¤ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻ¯āĻŧ āĻ†āĻŽāĻ°āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ°āĻŋāĻŽā§‹āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒā§āĻ°ā§‡āĻ°āĻŋāĻ¤ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸāĻ—ā§āĻ˛āĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻšā§āĻ›āĻŋ āĻ¤āĻž āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻ°āĻž āĻĒā§‹āĻ°ā§āĻŸ āĻ¨āĻŽā§āĻŦāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻĢāĻŋāĻ˛ā§āĻŸāĻžāĻ° āĻ¯ā§‹āĻ— āĻ•āĻ°āĻŦāĨ¤ Ctrl-C āĻŸāĻŋāĻĒā§‡ āĻ†āĻŽāĻ°āĻž āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻ• āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻĒā§‹āĻ°ā§āĻŸ āĻ¨āĻŽā§āĻŦāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĢāĻŋāĻ˛ā§āĻŸāĻžāĻ° āĻĒā§āĻ°āĻŦā§‡āĻļ āĻ•āĻ°āĻŋ āĻ¯āĻž āĻ°āĻŋāĻŽā§‹āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛ āĻ¤āĻžāĻ° āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻŽāĻŋāĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ—āĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻĒā§‹āĻ°ā§āĻŸ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ (8010): -f "udp āĻĒā§‹āĻ°ā§āĻŸ 8010". āĻāĻ–āĻ¨ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻ‡āĻ¨ āĻāĻ‡ āĻŽāĻ¤ āĻĻā§‡āĻ–āĻžāĻŦā§‡:

$ sudo tshark -i lo -f "udp port 8010"

āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻ•āĻ¨āĻ¸ā§‹āĻ˛ā§‡ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻšāĻŦā§‡ (āĻĒā§āĻ°āĻĨāĻŽ 10 āĻ˛āĻžāĻ‡āĻ¨):

 1 0.000000000    127.0.0.1 → 127.0.0.1    UDP 214 8010 → 7010 Len=172 
 2 0.020059705    127.0.0.1 → 127.0.0.1    UDP 214 8010 → 7010 Len=172
 3 0.040044409    127.0.0.1 → 127.0.0.1    UDP 214 8010 → 7010 Len=172 
 4 0.060057104    127.0.0.1 → 127.0.0.1    UDP 214 8010 → 7010 Len=172
 5 0.080082311    127.0.0.1 → 127.0.0.1    UDP 214 8010 → 7010 Len=172  
 6 0.100597153    127.0.0.1 → 127.0.0.1    UDP 214 8010 → 7010 Len=172 
 7 0.120122668    127.0.0.1 → 127.0.0.1    UDP 214 8010 → 7010 Len=172
 8 0.140204789    127.0.0.1 → 127.0.0.1    UDP 214 8010 → 7010 Len=172
 9 0.160719008    127.0.0.1 → 127.0.0.1    UDP 214 8010 → 7010 Len=172
10 0.180673685    127.0.0.1 → 127.0.0.1    UDP 214 8010 → 7010 Len=172

āĻ†āĻĒāĻžāĻ¤āĻ¤, āĻāĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻ¨āĻ¯āĻŧ, āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĻ¯ā§āĻ•ā§āĻ¤ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž, āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ˛āĻžāĻ‡āĻ¨ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡ āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻ•āĻ°āĻž āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĨ¤ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ†āĻŽāĻ°āĻž āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻĢāĻŋāĻ˛ā§āĻŸāĻžāĻ°āĻŋāĻ‚āĻ¯āĻŧā§‡āĻ° āĻ¯āĻ¤ā§āĻ¨ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻ°āĻž āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻ¯āĻŧ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻŽāĻŋāĻŸāĻžāĻ° āĻĨā§‡āĻ•ā§‡ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻ‡āĨ¤ āĻāĻ° āĻĒāĻ°ā§‡, āĻ•āĻ˛āĻžāĻŽ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻ‡ āĻŸā§‡āĻŦāĻŋāĻ˛āĻŸāĻŋ āĻĒāĻžāĻ ā§‹āĻĻā§āĻ§āĻžāĻ° āĻ•āĻ°āĻž āĻ¯āĻžāĻ•:

āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ āĻ¨āĻŽā§āĻŦāĻ°āĨ¤
āĻāĻ° āĻ¸āĻ‚āĻ˜āĻŸāĻ¨ā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧāĨ¤
āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸā§‡āĻ° āĻ‰ā§ŽāĻ¸ IP āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻāĻŦāĻ‚ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸā§‡āĻ° āĻ—āĻ¨ā§āĻ¤āĻŦā§āĻ¯ IP āĻ āĻŋāĻ•āĻžāĻ¨āĻžāĨ¤
āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸā§‡āĻ° āĻĒā§āĻ°ā§‹āĻŸā§‹āĻ•āĻ˛ UDP āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻĻā§‡āĻ–āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ•āĻžāĻ°āĻŖ RTP āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸāĻ—ā§āĻ˛āĻŋ UDP āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸā§‡āĻ° āĻ­āĻŋāĻ¤āĻ°ā§‡ āĻĒā§‡āĻ˛ā§‹āĻĄ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻĒāĻžāĻ āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧāĨ¤
āĻŦāĻžāĻ‡āĻŸā§‡ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸā§‡āĻ° āĻ†āĻ•āĻžāĻ°āĨ¤
āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸā§‡āĻ° āĻ‰ā§ŽāĻ¸ āĻĒā§‹āĻ°ā§āĻŸ āĻ¨āĻŽā§āĻŦāĻ° āĻāĻŦāĻ‚ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸā§‡āĻ° āĻ—āĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻĒā§‹āĻ°ā§āĻŸ āĻ¨āĻŽā§āĻŦāĻ°āĨ¤
āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻĒā§‡āĻ˛ā§‹āĻĄā§‡āĻ° āĻ†āĻ•āĻžāĻ°, āĻāĻ–āĻžāĻ¨ āĻĨā§‡āĻ•ā§‡ āĻ†āĻŽāĻ°āĻž āĻ‰āĻĒāĻ¸āĻ‚āĻšāĻžāĻ°ā§‡ āĻ†āĻ¸āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ āĻ¯ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻŽāĻŋāĻŸāĻžāĻ°āĻŸāĻŋ 172 āĻŦāĻžāĻ‡āĻŸ āĻ†āĻ•āĻžāĻ°ā§‡āĻ° RTP āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡, āĻ¯āĻž āĻŦā§āĻ•ā§‡āĻ° āĻšāĻžāĻāĻ¸ā§‡āĻ° āĻŽāĻ¤ā§‹, 214 āĻŦāĻžāĻ‡āĻŸ āĻ†āĻ•āĻžāĻ°ā§‡āĻ° UDP āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸā§‡āĻ° āĻ­āĻŋāĻ¤āĻ°ā§‡ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤āĨ¤
āĻāĻ–āĻ¨ UDP āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻŸāĻ—ā§āĻ˛āĻŋāĻ° āĻ­āĻŋāĻ¤āĻ°ā§‡ āĻ¤āĻžāĻ•āĻžāĻ¨ā§‹āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻ¸ā§‡āĻ›ā§‡, āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ°āĻž āĻ•ā§€āĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻ¸ā§‡āĻŸ āĻ¸āĻš TShark āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻŦ:

sudo tshark -i lo -f "udp port 8010"  -P -V -O rtp -o rtp.heuristic_rtp:TRUE -x

āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻ¸āĻŽā§ƒāĻĻā§āĻ§ āĻšāĻŦā§‡ - āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœā§‡āĻ° āĻ…āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§€āĻŖ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻĄāĻŋāĻ•ā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻ¯āĻžāĻ° āĻ•āĻžāĻ°āĻŖā§‡ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸā§‡ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤ āĻ†āĻ‰āĻŸāĻĒā§āĻŸāĻŸāĻŋ āĻ†āĻ°āĻ“ āĻ­āĻžāĻ˛āĻ­āĻžāĻŦā§‡ āĻĻā§‡āĻ–āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻŋ āĻšāĻ¯āĻŧ Ctrl-C āĻŸāĻŋāĻĒā§‡ TShark āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨, āĻ…āĻĨāĻŦāĻž āĻ°āĻžāĻ¨ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡ āĻŸāĻŋ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻžāĻ‡āĻĒāĻ˛āĻžāĻ‡āĻ¨ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻ¨āĻžāĻŽ, tee <filename> āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ– āĻ•āĻ°ā§‡ āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻāĻ° āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻ¨āĻ•āĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨:

$ sudo tshark -i lo -f "udp port 8010"  -P -V -O rtp -o rtp.heuristic_rtp:TRUE -x | tee  log.txt

āĻāĻ–āĻ¨ āĻ†āĻ¸ā§āĻ¨ āĻĻā§‡āĻ–āĻŋ āĻ†āĻŽāĻ°āĻž āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋāĻ¤ā§‡ āĻ•āĻŋ āĻĒā§‡āĻ¯āĻŧā§‡āĻ›āĻŋ, āĻāĻ–āĻžāĻ¨ā§‡ āĻāĻŸāĻŋāĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŸāĻŋ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡:

1 0.000000000    127.0.0.1 → 127.0.0.1    RTP 214 PT=ITU-T G.711 PCMU, SSRC=0x6B8B4567, Seq=58366, Time=355368720
Frame 1: 214 bytes on wire (1712 bits), 214 bytes captured (1712 bits) on interface 0
Ethernet II, Src: 00:00:00_00:00:00 (00:00:00:00:00:00), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00)
Internet Protocol Version 4, Src: 127.0.0.1, Dst: 127.0.0.1User Datagram Protocol, Src Port: 8010, Dst Port: 7010
Real-Time Transport Protocol    [Stream setup by HEUR RT (frame 1)]
        [Setup frame: 1] 
       [Setup Method: HEUR RT]
    10.. .... = Version: RFC 1889 Version (2)
    ..0. .... = Padding: False
    ...0 .... = Extension: False
    .... 0000 = Contributing source identifiers count: 0   
   0... .... = Marker: False
    Payload type: ITU-T G.711 PCMU (0)
    Sequence number: 58366    [Extended sequence number: 58366]
    Timestamp: 355368720
    Synchronization Source identifier: 0x6b8b4567 (1804289383)
    Payload: ffffffffffffffffffffffffffffffffffffffffffffffff...

0000  00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00   ..............E.
0010  00 c8 3c 69 40 00 40 11 ff b9 7f 00 00 01 7f 00   ..<i@.@.........
0020  00 01 1f 4a 1b 62 00 b4 fe c7 80 00 e3 fe 15 2e   ...J.b..........
0030  7f 10 6b 8b 45 67 ff ff ff ff ff ff ff ff ff ff   ..k.Eg..........
0040  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................
0050  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................
0060  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................
0070  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................
0080  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................
0090  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................
00a0  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................
00b0  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................
00c0  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................
00d0  ff ff ff ff ff ff                                  ......

āĻ†āĻŽāĻ°āĻž āĻāĻ‡ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻ¯āĻŧ āĻĨāĻžāĻ•āĻž āĻ¤āĻĨā§āĻ¯ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻ‰āĻ¤ā§āĻ¸āĻ°ā§āĻ— āĻ•āĻ°āĻŦ āĻāĻŦāĻ‚ āĻ…āĻ¨āĻŋāĻŦāĻžāĻ°ā§āĻ¯āĻ­āĻžāĻŦā§‡ RTP āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœā§‡āĻ° āĻ…āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§€āĻŖ āĻ•āĻžāĻ āĻžāĻŽā§‹ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻĨāĻž āĻŦāĻ˛āĻŦāĨ¤

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨