Mediastreamer2 VoIP แƒซแƒ แƒแƒ•แƒ˜แƒก แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒ. แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 7

แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒ›แƒแƒกแƒแƒšแƒ แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒฉแƒ”แƒ›แƒ˜ แƒ–แƒ”แƒœ แƒแƒ แƒฎแƒ˜.

Mediastreamer2 VoIP แƒซแƒ แƒแƒ•แƒ˜แƒก แƒจแƒ”แƒกแƒฌแƒแƒ•แƒšแƒ. แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 7

TSark-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ 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, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ˜แƒ’แƒ˜ แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒกแƒฌแƒแƒ•แƒšแƒแƒ“. แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜แƒช แƒ™แƒ˜ แƒ’แƒ˜แƒ แƒฉแƒ”แƒ•แƒ—, แƒ“แƒแƒ”แƒฃแƒคแƒšแƒแƒ— TSark-แƒก, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ˜แƒก แƒ“แƒแƒ’แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒแƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ VoIP แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒแƒชแƒ˜แƒแƒจแƒ˜, แƒแƒกแƒ”แƒ•แƒ” แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ แƒ˜ แƒ’แƒแƒ“แƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒแƒจแƒ˜.

แƒ“แƒแƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ— TShark แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒ—:

$ sudo apt-get install tshark

แƒขแƒ แƒแƒ“แƒ˜แƒชแƒ˜แƒฃแƒšแƒแƒ“, แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ— แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒ—:

$ tshark --version

แƒ—แƒฃ แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ‘แƒ แƒแƒ“แƒ”แƒ™แƒ•แƒแƒขแƒฃแƒ แƒ˜ แƒžแƒแƒกแƒฃแƒฎแƒ˜, แƒ•แƒแƒ’แƒ แƒซแƒ”แƒšแƒ”แƒ‘แƒ— แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒก.

แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒฉแƒ•แƒ”แƒœแƒ˜ แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜ แƒฏแƒ”แƒ  แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ™แƒแƒ›แƒžแƒ˜แƒฃแƒขแƒ”แƒ แƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— แƒจแƒ”แƒ“แƒ˜แƒก, แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ tshark-แƒก แƒ•แƒฃแƒ—แƒฎแƒ แƒแƒ— แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒกแƒ”แƒ—แƒ˜ แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ. แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒแƒ˜แƒ แƒฉแƒ˜แƒแƒ— แƒžแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ’แƒแƒ“แƒแƒฆแƒ”แƒ‘แƒ แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜แƒ“แƒแƒœ แƒ›แƒแƒ แƒงแƒฃแƒŸแƒ˜ (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 แƒ‘แƒแƒ˜แƒขแƒ˜แƒก แƒ–แƒแƒ›แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช, แƒ แƒแƒ’แƒแƒ แƒช แƒ˜แƒฎแƒ•แƒ˜ แƒ’แƒฃแƒšแƒ›แƒ™แƒ”แƒ แƒ“แƒจแƒ˜, แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒก 214 แƒ‘แƒแƒ˜แƒขแƒ˜แƒก แƒ–แƒแƒ›แƒ˜แƒก UDP แƒžแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒจแƒ˜แƒ’แƒœแƒ˜แƒ—.
แƒแƒฎแƒšแƒ แƒ“แƒ แƒแƒ แƒจแƒ”แƒ•แƒฎแƒ”แƒ“แƒแƒ— UDP แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒก, แƒแƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ•แƒฃแƒจแƒ•แƒ˜แƒ— TSark แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒœแƒแƒ™แƒ แƒ”แƒ‘แƒ˜แƒ—:

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

แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“, แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒ’แƒแƒ›แƒ“แƒ˜แƒ“แƒ แƒ“แƒ”แƒ‘แƒ - แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒš แƒ›แƒแƒ•แƒšแƒ”แƒœแƒแƒก แƒ“แƒแƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ แƒžแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒจแƒ˜แƒ“แƒ แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒ˜แƒก แƒ’แƒแƒจแƒ˜แƒคแƒ•แƒ แƒ, แƒ แƒแƒ›แƒแƒช แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ˜แƒ แƒ˜แƒ’แƒ˜. แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒšแƒ˜แƒก แƒฃแƒ™แƒ”แƒ— แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘แƒแƒ“, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒจแƒ”แƒแƒฉแƒ”แƒ แƒแƒ— TSark Ctrl-C-แƒ–แƒ” แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒ—, แƒแƒœ แƒ“แƒแƒแƒ™แƒแƒžแƒ˜แƒ แƒแƒ— แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒจแƒ˜, แƒ“แƒแƒแƒ›แƒแƒขแƒแƒ— แƒ›แƒ˜แƒšแƒกแƒแƒ“แƒ”แƒœแƒ˜ tee แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒจแƒ˜ Run แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒแƒจแƒ˜, แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒแƒ— แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜, 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

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ