Mediastreamer2 VoIP เจ‡เฉฐเจœเจฃ เจฆเฉ€ เจชเฉœเจšเฉ‹เจฒ เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆเฅค เจญเจพเจ— 7

เจฒเฉ‡เจ– เจธเจฎเฉฑเจ—เจฐเฉ€ เจฎเฉ‡เจฐเฉ‡ เจคเฉ‹เจ‚ เจฒเจˆ เจ—เจˆ เจนเฉˆ เจœเจผเฉˆเจจ เจšเฉˆเจจเจฒ.

Mediastreamer2 VoIP เจ‡เฉฐเจœเจฃ เจฆเฉ€ เจชเฉœเจšเฉ‹เจฒ เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆเฅค เจญเจพเจ— 7

RTP เจชเฉˆเจ•เฉ‡เจŸเจพเจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐเจจ เจฒเจˆ TShark เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ

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 เจคเฉฑเจ• เจจเฉฐเจฌเจฐ เจฆเจฐเจœ เจ•เจฐเจจเฉ‡ เจšเจพเจนเฉ€เจฆเฉ‡ เจนเจจ, เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฆเจพ เจœเจตเจพเจฌ เจฐเจฟเจธเฉ€เจตเจฐ เจ•เฉฐเจธเฉ‹เจฒ เจตเจฟเฉฑเจš เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ. เจธเจชเฉ€เจ•เจฐ เจตเจฟเฉฑเจš เจงเฉเจจ เจธเฉเจฃเจจเจฏเฉ‹เจ— เจนเฉ‹เจฃเฉ€ เจšเจพเจนเฉ€เจฆเฉ€ เจนเฉˆเฅค เจœเฉ‡ เจธเจญ เจ•เฉเจ เจ…เจœเจฟเจนเจพ เจนเฉˆ, เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจฐเจฟเจธเฉ€เจตเจฐ เจ…เจคเฉ‡ เจŸเฉเจฐเจพเจ‚เจธเจฎเฉ€เจŸเจฐ เจตเจฟเจšเจ•เจพเจฐ เจ‡เฉฑเจ• เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจธเจฅเจพเจชเจฟเจค เจ•เฉ€เจคเจพ เจนเฉˆ - เจŸเฉเจฐเจพเจ‚เจธเจฎเฉ€เจŸเจฐ เจคเฉ‹เจ‚ เจฐเจฟเจธเฉ€เจตเจฐ เจคเฉฑเจ• เจ†เจฐเจŸเฉ€เจชเฉ€ เจชเฉˆเจ•เฉ‡เจŸเจพเจ‚ เจฆเจพ เจจเจฟเจฐเฉฐเจคเจฐ เจธเฉฐเจšเจพเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉˆ.

เจนเฉเจฃ เจ‡เฉฑเจ• เจŸเฉเจฐเฉˆเจซเจฟเจ• เจเจจเจพเจฒเจพเจˆเจœเจผเจฐ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจ เจฆเจพ เจธเจฎเจพเจ‚ เจนเฉˆ; เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจธเจผเจพเจจเจฆเจพเจฐ เจตเจพเจ‡เจฐเจธเจผเจพเจฐเจ• เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจฆเจพ เจ•เฉฐเจธเฉ‹เจฒ เจธเฉฐเจธเจ•เจฐเจฃ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจพเจ‚เจ—เฉ‡ - เจ‡เจธเจจเฉ‚เฉฐ TShark เจ•เจฟเจนเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ. เจฎเฉˆเจ‚ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจชเฉเจฐเจฌเฉฐเจงเจจ เจฆเฉ‡ เจตเจฐเจฃเจจ เจฆเฉ€ เจธเจนเฉ‚เจฒเจค เจฒเจˆ เจนเฉ‹เจฐ เจšเจฐเจšเจพ เจฒเจˆ TShark เจจเฉ‚เฉฐ เจšเฉเจฃเจฟเจ†เฅค เจตเจพเจ‡เจฐเจธเจผเจพเจฐเจ• เจฆเฉ‡ เจจเจพเจฒ, เจฎเฉˆเจจเฉ‚เฉฐ เจธเจ•เฉเจฐเฉ€เจจเจธเจผเฉŒเจŸเจธ เจฆเฉ‡ เจ‡เฉฑเจ• เจธเจฎเฉเฉฐเจฆเจฐ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉ‹เจเจ—เฉ€, เจœเฉ‹ เจตเจพเจ‡เจฐเจธเจผเจพเจฐเจ• เจฆเจพ เจจเจตเจพเจ‚ เจธเฉฐเจธเจ•เจฐเจฃ เจœเจพเจฐเฉ€ เจนเฉ‹เจฃ 'เจคเฉ‡ เจœเจฒเจฆเฉ€ เจชเฉเจฐเจพเจฃเฉ€ เจนเฉ‹ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค

เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจœเจพเจฃเจฆเฉ‡ เจนเฉ‹ เจ•เจฟ เจตเจพเจ‡เจฐเจธเจผเจพเจฐเจ• เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจ•เจฐเจจเฉ€ เจนเฉˆ, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจธเจพเจกเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจฆเจพ เจ…เจงเจฟเจเจจ เจ•เจฐเจจ เจฒเจˆ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจชเจฐ เจ‡เจธ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš เจตเฉ€, เจฎเฉˆเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ TShark เจตเจฟเฉฑเจš เจฎเฉเจนเจพเจฐเจค เจนเจพเจธเจฒ เจ•เจฐเจจ เจฆเฉ€ เจธเจฟเจซเจผเจพเจฐเจธเจผ เจ•เจฐเจฆเจพ เจนเจพเจ‚, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจคเฉเจนเจพเจกเฉ€เจ†เจ‚ VoIP เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฆเฉ€ เจธเจตเฉˆเจšเจพเจฒเจค เจœเจพเจ‚เจš เจ•เจฐเจจ เจฆเฉ‡ เจจเจพเจฒ-เจจเจพเจฒ เจฐเจฟเจฎเฉ‹เจŸ เจ•เฉˆเจชเจšเจฐ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจคเฉเจนเจพเจกเฉ€ เจฎเจฆเจฆ เจ•เจฐเฉ‡เจ—เจพเฅค

เจ•เจฎเจพเจ‚เจก เจจเจพเจฒ TShark เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเฉ‹:

$ sudo apt-get install tshark

เจฐเจตเจพเจ‡เจคเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡, เจ…เจธเฉ€เจ‚ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจธเฉฐเจธเจ•เจฐเจฃ เจฒเจˆ เจชเฉเฉฑเจ› เจ•เฉ‡ เจ‡เฉฐเจธเจŸเจพเจฒเฉ‡เจธเจผเจจ เจจเจคเฉ€เจœเฉ‡ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚:

$ tshark --version

เจœเฉ‡เจ•เจฐ เจขเฉเจ•เจตเจพเจ‚ เจœเจตเจพเจฌ เจฎเจฟเจฒเจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจ…เฉฑเจ—เฉ‡ เจตเจงเจฆเฉ‡ เจนเจพเจ‚เฅค

เจ•เจฟเจ‰เจ‚เจ•เจฟ เจธเจพเจกเฉ‡ เจชเฉˆเจ•เฉ‡เจŸ เจธเจฟเจฐเจซเจผ เจ•เฉฐเจชเจฟเจŠเจŸเจฐ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจนเฉ€ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ, เจ…เจธเฉ€เจ‚ เจŸเจธเจผเจพเจฐเจ• เจจเฉ‚เฉฐ เจธเจฟเจฐเจซเจผ เจ…เจœเจฟเจนเฉ‡ เจชเฉˆเจ•เฉ‡เจŸ เจฆเจฟเจ–เจพเจ‰เจฃ เจฒเจˆ เจ•เจนเจฟ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚เฅค เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจคเฉ‹เจ‚ เจชเฉˆเจ•เฉ‡เจŸ เจ•เฉˆเจชเจšเจฐ เจฆเฉ€ เจšเฉ‹เจฃ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจฒเฉ‚เจชเจฌเฉˆเจ• (เจฒเฉ‚เจชเจฌเฉˆเจ•) TShark เจตเจฟเจ•เจฒเจช เจจเฉ‚เฉฐ เจชเจพเจธ เจ•เจฐเจ•เฉ‡ -ilo:

$ sudo tshark -i lo

เจธเจพเจกเฉ‡ เจŸเฉเจฐเจพเจ‚เจธเจฎเฉ€เจŸเจฐ เจฆเฉเจ†เจฐเจพ เจญเฉ‡เจœเฉ‡ เจ—เจ เจชเฉˆเจ•เฉ‡เจŸเจพเจ‚ เจฌเจพเจฐเฉ‡ เจธเฉฐเจฆเฉ‡เจธเจผ เจคเฉเจฐเฉฐเจค เจ•เฉฐเจธเฉ‹เจฒ เจตเจฟเฉฑเจš เจ†เจ‰เจฃเฉ‡ เจธเจผเฉเจฐเฉ‚ เจนเฉ‹ เจœเจพเจฃเจ—เฉ‡ (เจฒเจ—เจพเจคเจพเจฐ, เจ‡เจธ เจ—เฉฑเจฒ เจฆเฉ€ เจชเจฐเจตเจพเจน เจ•เฉ€เจคเฉ‡ เจฌเจฟเจจเจพเจ‚ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจฐเจฟเจฎเฉ‹เจŸ เจ•เฉฐเจŸเจฐเฉ‹เจฒ 'เจคเฉ‡ เจฌเจŸเจจ เจฆเจฌเจพเจ‡เจ† เจนเฉˆ เจœเจพเจ‚ เจจเจนเฉ€เจ‚)เฅค เจธเจผเจพเจ‡เจฆ เจคเฉเจนเจพเจกเฉ‡ เจ•เฉฐเจชเจฟเจŠเจŸเจฐ 'เจคเฉ‡ เจ…เจœเจฟเจนเฉ‡ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจนเจจ เจœเฉ‹ เจธเจฅเจพเจจเจ• เจฒเฉ‚เจช เจฐเจพเจนเฉ€เจ‚ เจชเฉˆเจ•เฉ‡เจŸ เจตเฉ€ เจญเฉ‡เจœเจฆเฉ‡ เจนเจจ, เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจฒเฉ‹เจ•เจพเจ‚ เจฆเฉ‡ เจชเฉˆเจ•เฉ‡เจŸเจพเจ‚ เจฆเจพ เจฎเจฟเจธเจผเจฐเจฃ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค เจ‡เจน เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ•เจฟ เจธเฉ‚เจšเฉ€ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจธเจฟเจฐเจซเจผ เจธเจพเจกเฉ‡ เจฐเจฟเจฎเฉ‹เจŸ เจ•เฉฐเจŸเจฐเฉ‹เจฒ เจฆเฉเจ†เจฐเจพ เจญเฉ‡เจœเฉ‡ เจ—เจ เจชเฉˆเจ•เฉ‡เจŸ เจตเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚, เจ…เจธเฉ€เจ‚ เจชเฉ‹เจฐเจŸ เจจเฉฐเจฌเจฐ เจฆเฉเจ†เจฐเจพ เจ‡เฉฑเจ• เจซเจฟเจฒเจŸเจฐ เจœเฉ‹เฉœเจพเจ‚เจ—เฉ‡เฅค Ctrl-C เจฆเจฌเจพเจ‰เจฃ เจจเจพเจฒ เจ…เจธเฉ€เจ‚ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจจเฉ‚เฉฐ เจฐเฉ‹เจ•เจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจชเฉ‹เจฐเจŸ เจจเฉฐเจฌเจฐ เจฒเจˆ เจ‡เฉฑเจ• เจซเจฟเจฒเจŸเจฐ เจฆเจพเจ–เจฒ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจœเจฟเจธ เจจเฉ‚เฉฐ เจฐเจฟเจฎเฉ‹เจŸ เจ•เฉฐเจŸเจฐเฉ‹เจฒ เจ‡เจธเจฆเฉ‡ เจชเฉเจฐเจธเจพเจฐเจฃ (8010) เจฒเจˆ เจฎเฉฐเจœเจผเจฟเจฒ เจชเฉ‹เจฐเจŸ เจตเจœเฉ‹เจ‚ เจตเจฐเจคเจฆเจพ เจนเฉˆ: -f "เจฏเฉ‚เจกเฉ€เจชเฉ€ เจชเฉ‹เจฐเจŸ 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 เจจเฉ‚เฉฐ เจฐเฉ‹เจ• เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจœเจพเจ‚ เจฐเจจ เจ•เจฎเจพเจ‚เจก เจตเจฟเฉฑเจš เจŸเฉ€ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจตเจฟเฉฑเจš เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจœเฉ‹เฉœ เจ•เฉ‡, เจซเจพเจˆเจฒ เจฆเจพ เจจเจพเจฎ, เจŸเฉ€ <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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹