แž€แžถแžšแžšแžปแž€แžšแž€แž˜แŸ‰แžถแžŸแŸŠแžธแž“ Mediastreamer2 VoIP แŸ” แž•แŸ’แž“แŸ‚แž€แž‘แžธ 7

แžŸแž˜แŸ’แž—แžถแžšแŸˆแž“แŸƒแžขแžแŸ’แžแž”แž‘แž‚แžบแž™แž€แž–แžธแžแŸ’แž‰แžปแŸ† แž”แŸ‰แžปแžŸแŸ’แžแžทแŸ zen.

แž€แžถแžšแžšแžปแž€แžšแž€แž˜แŸ‰แžถแžŸแŸŠแžธแž“ Mediastreamer2 VoIP แŸ” แž•แŸ’แž“แŸ‚แž€แž‘แžธ 7

แž€แžถแžšแž”แŸ’แžšแžพแž”แŸ’แžšแžถแžŸแŸ‹ TShark แžŠแžพแž˜แŸ’แž”แžธแžœแžทแž—แžถแž‚แž€แž‰แŸ’แž…แž”แŸ‹แž–แŸแžแŸŒแž˜แžถแž“ RTP

แž€แžถแžšแžšแžปแž€แžšแž€แž˜แŸ‰แžถแžŸแŸŠแžธแž“ Mediastreamer2 VoIP แŸ” แž•แŸ’แž“แŸ‚แž€แž‘แžธ 7

แž€แŸ’แž“แžปแž„โ€‹แžขแžแžธแžแž€แžถแž› แžขแžแŸ’แžแž”แž‘ แž™แžพแž„แž”แžถแž“แž”แŸ’แžšแž˜แžผแž›แž•แŸ’แžแžปแŸ†แžŸแŸ€แž‚แŸ’แžœแžธแž”แž‰แŸ’แž‡แžถแž–แžธแž…แž˜แŸ’แž„แžถแž™แž–แžธแž˜แŸ‰แžถแžŸแŸŠแžธแž“แž”แž„แŸ’แž€แžพแžแžŸแž˜แŸ’แž›แŸแž„ แž“แžทแž„แžงแž”แž€แžšแžŽแŸแž…แžถแž”แŸ‹แžŸแŸ†แžกแŸแž„ แž€แžถแžšแž‘แŸ†แž“แžถแž€แŸ‹แž‘แŸ†แž“แž„แžšแžœแžถแž„แž‚แŸ’แž“แžถแžแŸ’แžšแžผแžœแž”แžถแž“แžขแž“แžปแžœแžแŸ’แžแžŠแŸ„แž™แž”แŸ’แžšแžพแž…แžšแž“แŸ’แž RTP แŸ”

แž“แŸ…แž€แŸ’แž“แžปแž„แžขแžแŸ’แžแž”แž‘แž“แŸแŸ‡ แž™แžพแž„แž”แž“แŸ’แžแžŸแžทแž€แŸ’แžŸแžถแž€แžถแžšแž”แž‰แŸ’แž‡แžผแž“แžŸแž‰แŸ’แž‰แžถแžŸแŸ†แžกแŸแž„แžŠแŸ„แž™แž”แŸ’แžšแžพแž–แžทแž’แžธแž€แžถแžš 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 แž“แŸ…แž€แŸ’แž“แžปแž„แž€แžปแž„แžŸแžผแž›แž”แž‰แŸ’แž‡แžผแž“ แž แžพแž™แž€แžถแžšแž†แŸ’แž›แžพแž™แžแž”แž…แŸ†แž–แŸ„แŸ‡แž–แžฝแž€แž‚แŸแž‚แžฝแžšแžแŸ‚แž”แž„แŸ’แž แžถแž‰แž“แŸ…แž€แŸ’แž“แžปแž„แž€แžปแž„แžŸแžผแž›แžขแŸ’แž“แž€แž‘แž‘แžฝแž›แŸ” แžŸแŸ†แžกแŸแž„แž‚แžฝแžšแžแŸ‚แžฎแž“แŸ…แž€แŸ’แž“แžปแž„แžงแž”แž€แžšแžŽแŸแž”แŸ†แž–แž„แžŸแŸ†แžกแŸแž„แŸ” แž”แŸ’แžšแžŸแžทแž“แž”แžพแžขแŸ’แžœแžธแŸ—แž‚แŸ’แžšแž”แŸ‹แž™แŸ‰แžถแž„แž‚แžบแžŠแžผแž…แŸ’แž“แŸแŸ‡ แž“แŸ„แŸ‡แž™แžพแž„แž”แžถแž“แž”แž„แŸ’แž€แžพแžแž€แžถแžšแžแž—แŸ’แž‡แžถแž”แŸ‹แžšแžœแžถแž„แžขแŸ’แž“แž€แž‘แž‘แžฝแž› แž“แžทแž„แžงแž”แž€แžšแžŽแŸแž”แž‰แŸ’แž‡แžผแž“ - แž˜แžถแž“แž€แžถแžšแž”แž‰แŸ’แž‡แžผแž“แž”แž“แŸ’แžแž“แŸƒแž€แž‰แŸ’แž…แž”แŸ‹แž–แŸแžแŸŒแž˜แžถแž“ RTP แž–แžธแžงแž”แž€แžšแžŽแŸแž”แž‰แŸ’แž‡แžผแž“แž‘แŸ…แž€แžถแž“แŸ‹แžขแŸ’แž“แž€แž‘แž‘แžฝแž›แŸ”

แžฅแžกแžผแžœแž“แŸแŸ‡แžŠแž›แŸ‹แž–แŸแž›แžŠแŸ‚แž›แžแŸ’แžšแžผแžœแžŠแŸ†แžกแžพแž„แžงแž”แž€แžšแžŽแŸแžœแžทแž—แžถแž‚แž…แžšแžถแž…แžšแžŽแŸแž แžพแž™ แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžšแžฟแž„แž“แŸแŸ‡ แž™แžพแž„แž“แžนแž„แžŠแŸ†แžกแžพแž„แž€แŸ†แžŽแŸ‚แž€แžปแž„แžŸแžผแž›แž“แŸƒแž€แž˜แŸ’แž˜แžœแžทแž’แžธ Wireshark แžŠแŸแž›แŸ’แžขแžฅแžแžแŸ’แž…แŸ„แŸ‡ - แžœแžถแžแŸ’แžšแžผแžœแž”แžถแž“แž‚แŸแž แŸ…แžแžถ TShark แŸ” แžแŸ’แž‰แžปแŸ†แž”แžถแž“แž‡แŸ’แžšแžพแžŸแžšแžพแžŸ TShark แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž–แžทแž—แžถแž€แŸ’แžŸแžถแž”แž“แŸ’แžแŸ‚แž˜ แžŠแžพแž˜แŸ’แž”แžธแž‡แžฝแž™แžŸแž˜แŸ’แžšแžฝแž›แžŠแž›แŸ‹แž€แžถแžšแž–แžทแž–แžŽแŸŒแž“แžถแžขแŸ†แž–แžธแž€แžถแžšแž‚แŸ’แžšแž”แŸ‹แž‚แŸ’แžšแž„แž€แž˜แŸ’แž˜แžœแžทแž’แžธแŸ” แž‡แžถแž˜แžฝแž™แž“แžนแž„ Wireshark แžแŸ’แž‰แžปแŸ†แž“แžนแž„แžแŸ’แžšแžผแžœแž€แžถแžšแžšแžผแž”แžแžแžขแŸแž€แŸ’แžšแž„แŸ‹ แžŠแŸ‚แž›แžขแžถแž…แž“แžนแž„แž แžฝแžŸแžŸแž˜แŸแž™แž—แŸ’แž›แžถแž˜แŸ— แž“แŸ…แž–แŸแž›แžŠแŸ‚แž›แž€แŸ†แžŽแŸ‚แžแŸ’แž˜แžธแžšแž”แžŸแŸ‹ Wireshark แžแŸ’แžšแžผแžœแž”แžถแž“แž…แŸแž‰แž•แŸ’แžŸแžถแž™แŸ”

แž”แŸ’แžšแžŸแžทแž“แž”แžพแžขแŸ’แž“แž€แžŠแžนแž„แž–แžธแžšแž”แŸ€แž”แž”แŸ’แžšแžพ Wireshark แžขแŸ’แž“แž€แžขแžถแž…แž”แŸ’แžšแžพแžœแžถแžŠแžพแž˜แŸ’แž”แžธแžŸแžทแž€แŸ’แžŸแžถแžงแž‘แžถแž แžšแžŽแŸแžšแž”แžŸแŸ‹แž™แžพแž„แŸ” แž”แŸ‰แžปแž“แŸ’แžแŸ‚แž‘แŸ„แŸ‡แž”แžธแž‡แžถแž€แŸ’แž“แžปแž„แž€แžšแžŽแžธแž“แŸแŸ‡แž€แŸแžŠแŸ„แž™ แžแŸ’แž‰แžปแŸ†แžŸแžผแž˜แžŽแŸ‚แž“แžถแŸ†แžฑแŸ’แž™แžขแŸ’แž“แž€แž’แŸ’แžœแžพแž‡แžถแž˜แŸ’แž…แžถแžŸแŸ‹ TShark แž–แŸ’แžšแŸ„แŸ‡แžœแžถแž“แžนแž„แž‡แžฝแž™แžขแŸ’แž“แž€แžฑแŸ’แž™แž’แŸ’แžœแžพแžแŸแžŸแŸ’แžแžŠแŸ„แž™แžŸแŸ’แžœแŸแž™แž”แŸ’แžšแžœแžแŸ’แžแžทแž“แžผแžœแž€แž˜แŸ’แž˜แžœแžทแž’แžธ VoIP แžšแž”แžŸแŸ‹แžขแŸ’แž“แž€ แž€แŸแžŠแžผแž…แž‡แžถแž’แŸ’แžœแžพแž€แžถแžšแž…แžถแž”แŸ‹แž™แž€แž–แžธแž…แž˜แŸ’แž„แžถแž™แž•แž„แžŠแŸ‚แžšแŸ”

แžŠแŸ†แžกแžพแž„ TShark แžŠแŸ„แž™แž”แŸ’แžšแžพแž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแŸ–

$ sudo apt-get install tshark

แž‡แžถแž”แŸ’แžšแž–แŸƒแžŽแžธ แž™แžพแž„แž–แžทแž“แžทแžแŸ’แž™แž›แž‘แŸ’แž’แž•แž›แžŠแŸ†แžกแžพแž„แžŠแŸ„แž™แžŸแžฝแžšแžšแž€แž€แŸ†แžŽแŸ‚แž€แž˜แŸ’แž˜แžœแžทแž’แžธแŸ–

$ tshark --version

แž”แŸ’แžšแžŸแžทแž“แž”แžพแž‘แž‘แžฝแž›แž”แžถแž“แž…แž˜แŸ’แž›แžพแž™แž‚แŸ’แžšแž”แŸ‹แž‚แŸ’แžšแžถแž“แŸ‹ แž™แžพแž„แž”แž“แŸ’แžแž”แž“แŸ’แžแž‘แŸ€แžแŸ”

แžŠแŸ„แž™แžŸแžถแžšแž€แž‰แŸ’แž…แž”แŸ‹แž–แŸแžแŸŒแž˜แžถแž“แžšแž”แžŸแŸ‹แž™แžพแž„แž…แžผแž›แžแŸ‚แž€แŸ’แž“แžปแž„แž€แžปแŸ†แž–แŸ’แž™แžผแž‘แŸแžšแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž–แŸแž›แž“แŸแŸ‡ แž™แžพแž„แžขแžถแž…แž”แŸ’แžšแžถแž”แŸ‹ churk แžฑแŸ’แž™แž”แž„แŸ’แž แžถแž‰แžแŸ‚แž€แž‰แŸ’แž…แž”แŸ‹แž–แŸแžแŸŒแž˜แžถแž“แž”แŸ‚แž”แž“แŸแŸ‡แž”แŸ‰แžปแžŽแŸ’แžŽแŸ„แŸ‡แŸ” แžŠแžพแž˜แŸ’แž”แžธแž’แŸ’แžœแžพแžŠแžผแž…แž“แŸแŸ‡แžขแŸ’แž“แž€แžแŸ’แžšแžผแžœแž‡แŸ’แžšแžพแžŸแžšแžพแžŸแž€แžถแžšแž…แžถแž”แŸ‹แž™แž€แž€แž‰แŸ’แž…แž”แŸ‹แž–แŸแžแŸŒแž˜แžถแž“แž–แžธแž…แŸ†แžŽแžปแž…แž”แŸ’แžšแž‘แžถแž€แŸ‹ แžšแž„แŸ’แžœแžทแž›แž‡แžปแŸ† (loopback) แžŠแŸ„แž™แž†แŸ’แž›แž„แž€แžถแžแŸ‹ 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 แŸ”
แž‘แŸ†แž แŸ†แž€แž‰แŸ’แž…แž”แŸ‹แž‚แžทแžแž‡แžถแž”แŸƒแŸ”
แž›แŸแžแž…แŸ’แžšแž€แž”แŸ’แžšแž—แž–แžšแž”แžŸแŸ‹แž€แž‰แŸ’แž…แž”แŸ‹แž–แŸแžแŸŒแž˜แžถแž“ แž“แžทแž„แž›แŸแžแž…แŸ’แžšแž€แž‚แŸ„แž›แžŠแŸ…แžšแž”แžŸแŸ‹แž€แž‰แŸ’แž…แž”แŸ‹แž–แŸแžแŸŒแž˜แžถแž“แŸ”
แž‘แŸ†แž แŸ†แž“แŸƒแž€แž‰แŸ’แž…แž”แŸ‹แž”แž“แŸ’แž‘แžปแž€ แž–แžธแž‘แžธแž“แŸแŸ‡แž™แžพแž„แžขแžถแž…แžŸแž“แŸ’แž“แžทแžŠแŸ’แž‹แžถแž“แž”แžถแž“แžแžถแžงแž”แž€แžšแžŽแŸแž”แž‰แŸ’แž‡แžผแž“แžšแž”แžŸแŸ‹แž™แžพแž„แž”แž„แŸ’แž€แžพแžแž€แž‰แŸ’แž…แž”แŸ‹แž–แŸแžแŸŒแž˜แžถแž“ RTP แžŠแŸ‚แž›แž˜แžถแž“แž‘แŸ†แž แŸ† 172 แž”แŸƒ แžŠแŸ‚แž›แžŠแžผแž…แž‡แžถแž‘แžถแž“แŸ…แž€แŸ’แž“แžปแž„แž‘แŸ’แžšแžผแž„แž˜แžฝแž™ แžŠแŸ‚แž›แž˜แžถแž“แž‘แžธแžแžถแŸ†แž„แž“แŸ…แžแžถแž„แž€แŸ’แž“แžปแž„แž€แž‰แŸ’แž…แž”แŸ‹ UDP แžŠแŸ‚แž›แž˜แžถแž“แž‘แŸ†แž แŸ† 214 แž”แŸƒแŸ”
แžฅแžกแžผแžœแž“แŸแŸ‡แžœแžถแžŠแž›แŸ‹แž–แŸแž›แž แžพแž™แžŠแžพแž˜แŸ’แž”แžธแžšแž€แž˜แžพแž›แž“แŸ…แž€แŸ’แž“แžปแž„แž€แž‰แŸ’แž…แž”แŸ‹ UDP แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž“แŸแŸ‡แž™แžพแž„แž“แžนแž„แž”แžพแž€แžŠแŸ†แžŽแžพแžšแž€แžถแžš TShark แž‡แžถแž˜แžฝแž™แž“แžนแž„แžŸแŸ†แžŽแžปแŸ†แž‚แŸ’แžšแžถแž”แŸ‹แž…แžปแž…แž–แž„แŸ’แžšแžธแž€:

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

แž‡แžถแž›แž‘แŸ’แž’แž•แž› แž›แž‘แŸ’แž’แž•แž›แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž“แžนแž„แžแŸ’แžšแžผแžœแž”แžถแž“แž–แž„แŸ’แžšแžนแž„ - แž€แžถแžšแžŒแžทแž‚แŸ’แžšแžธแž”แž“แŸƒแž˜แžถแžแžทแž€แžถแžแžถแž„แž€แŸ’แž“แžปแž„แž“แŸƒแž€แž‰แŸ’แž…แž”แŸ‹แžŠแŸ‚แž›แž”แžŽแŸ’แžแžถแž›แžฑแŸ’แž™แžœแžถแž“แžนแž„แžแŸ’แžšแžผแžœแž”แžถแž“แž”แž“แŸ’แžแŸ‚แž˜แž‘แŸ…แž–แŸ’แžšแžนแžแŸ’แžแžทแž€แžถแžšแžŽแŸแž“แžธแž˜แžฝแž™แŸ—แŸ” แžŠแžพแž˜แŸ’แž”แžธแž˜แžพแž›แž›แž‘แŸ’แž’แž•แž›แž€แžถแž“แŸ‹แžแŸ‚แž”แŸ’แžšแžŸแžพแžš แžขแŸ’แž“แž€แžขแžถแž…แž”แž‰แŸ’แžˆแž”แŸ‹ TShark แžŠแŸ„แž™แž…แžปแž… Ctrl-C แžฌแž…แž˜แŸ’แž›แž„แž›แž‘แŸ’แž’แž•แž›แžšแž”แžŸแŸ‹แžœแžถแž‘แŸ…แžฏแž€แžŸแžถแžšแžŠแŸ„แž™แž”แž“แŸ’แžแŸ‚แž˜แž”แŸ†แž–แž„แŸ‹แž‘แŸ…แž€แž˜แŸ’แž˜แžœแžทแž’แžธ tee แž‘แŸ…แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแžšแžแŸ‹ แžŠแŸ„แž™แž”แž‰แŸ’แž‡แžถแž€แŸ‹แžˆแŸ’แž˜แŸ„แŸ‡แžฏแž€แžŸแžถแžš tee :

$ 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

แž”แž“แŸ’แžแŸ‚แž˜แž˜แžแžทแž™แŸ„แž”แž›แŸ‹