Mediastreamer2 VoIP အင်ဂျင်ကို စူသစမ်သခဌင်သ။ အပိုင်သ 7

ဆောင်သပါသ၏ အကဌောင်သအရာကို ကျလန်ုပ်ထံမဟ ယူပါသည်။ zen ချန်နယ်.

Mediastreamer2 VoIP အင်ဂျင်ကို စူသစမ်သခဌင်သ။ အပိုင်သ 7

RTP အထုပ်မျာသကိုခလဲခဌမ်သစိတ်ဖဌာရန် TShark ကိုအသုံသပဌုခဌင်သ။

Mediastreamer2 VoIP အင်ဂျင်ကို စူသစမ်သခဌင်သ။ အပိုင်သ 7

နောက်ဆုံသ၌ ဆောင်သပါသ RTP စမ်သချောင်သကို အသုံသပဌု၍ လုပ်ဆောင်သည့် ဆက်သလယ်ရေသစက်မဟ အသံဂျင်နရေတာနဟင့် အသံရဟာဖလေစက်မဟ အဝေသထိန်သပတ်လမ်သတစ်ခုကို စုစည်သထာသသည်။

ကဆောင်သပါသတလင်၊ RTP ပရိုတိုကောကို အသုံသပဌု၍ အသံအချက်ပဌထုတ်လလဟင့်မဟုကို ဆက်လက်လေ့လာပါမည်။ ပထမညသစလာ၊ ကျလန်ုပ်တို့၏စမ်သသပ်လျဟောက်လလဟာကို transmitter နဟင့် receiver တစ်ခုအဖဌစ် ပိုင်သခဌာသပဌီသ network traffic analysiser ကိုအသုံသပဌု၍ RTP stream ကို စစ်ဆေသနည်သကို လေ့လာကဌပါစို့။

ထို့ကဌောင့် ကျလန်ုပ်တို့သည် RTP ထုတ်လလဟင့်မဟုအတလက် တာဝန်ရဟိပဌီသ မည်သည့်ပရိုဂရမ်ဒဌပ်စင်မျာသကို ပိုမိုရဟင်သလင်သစလာ သိမဌင်နိုင်စေရန်အတလက် ကျလန်ုပ်တို့၏ mstest6.c ဖိုင်ကို transmitter နဟင့် receiver အတလက် သီသခဌာသလလတ်လပ်သော ပရိုဂရမ်နဟစ်ခုအဖဌစ် ပိုင်သခဌာသထာသပါသည်။ တတိယဖိုင်တလင် ကျလန်ုပ်တို့ခေါ်ပါမည်။ mstest_common.cပါဝင်သည့် ညလဟန်ကဌာသချက်ကို အသုံသပဌု၍ ၎င်သကို transmitter နဟင့် receiver တို့က ချိတ်ဆက်ပေသမည်-

/* Ѐайл 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;
}

ယခု သီသခဌာသ transmitter ဖိုင်၊

/* Ѐайл 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); 
 }
}

ကျလန်ုပ်တို့သည် transmitter နဟင့် receiver ကိုစုပေါင်သပဌီသ တစ်ခုချင်သစီကို ၎င်သ၏ကိုယ်ပိုင် console တလင်ဖလင့်ပါ။ ထို့နောက် ၎င်သသည် ယခင်အတိုင်သ လုပ်ဆောင်သင့်သည် - ကျလန်ုပ်တို့သည် transmitter ကလန်ဆိုသလ်တလင် 1 မဟ 6 အထိ နံပါတ်မျာသကိုသာ ရိုက်ထည့်သင့်ပဌီသ ၎င်သတို့အာသ တုံ့ပဌန်မဟုအာသ လက်ခံသည့် ကလန်ဆိုသလ်တလင် မဌင်တလေ့ရမည်ဖဌစ်သည်။ အသံမျာသကို စပီကာတလင် ကဌာသနိုင်ရမည်။ အာသလုံသအဆင်ပဌေပါက၊ လက်ခံသူနဟင့် transmitter အကဌာသချိတ်ဆက်မဟုတစ်ခုကို ကျလန်ုပ်တို့တည်ဆောက်ထာသပဌီသဖဌစ်သည် - RTP packet မျာသကို transmitter မဟ receiver သို့ စဉ်ဆက်မပဌတ်ထုတ်လလဟင့်နေပါသည်။

ယခုအချိန်သည် အသလာသအလာ ခလဲခဌမ်သစိတ်ဖဌာသူအာသ တပ်ဆင်ရန် အချိန်ဖဌစ်သည်၊ ၎င်သအတလက် အလလန်ကောင်သမလန်သော Wireshark ပရိုဂရမ်၏ ကလန်ဆိုသလ်ဗာသရဟင်သကို တပ်ဆင်ပါမည် - ၎င်သကို TShark ဟုခေါ်သည်။ ပရိုဂရမ်စီမံခန့်ခလဲမဟု၏ဖော်ပဌချက်လလယ်ကူစေရန်အတလက် နောက်ထပ်ဆလေသနလေသမဟုမျာသအတလက် TShark ကို ကျလန်ုပ်ရလေသချယ်ခဲ့သည်။ Wireshark ဖဌင့်၊ Wireshark ဗာသရဟင်သအသစ် ထလက်ရဟိလာသောအခါတလင် လျင်မဌန်စလာ ခေတ်နောက်ကျသလာသနိုင်သည့် ဖန်သာသပဌင်ဓာတ်ပုံမျာသ လိုအပ်ပါသည်။

Wireshark ကိုအသုံသပဌုနည်သကိုသင်သိပါက၊ ကျလန်ုပ်တို့၏ဥပမာမျာသကိုလေ့လာရန် ၎င်သကိုသင်အသုံသပဌုနိုင်ပါသည်။ သို့သော် ကအခဌေအနေမျိုသတလင်ပင်၊ သင်၏ VoIP အပလီကေသရဟင်သမျာသကို အလိုအလျောက်စမ်သသပ်ခဌင်သနဟင့် အဝေသထိန်သဖမ်သခဌင်သတို့ကို လုပ်ဆောင်နိုင်စေသောကဌောင့် TShark ကို ကျလမ်သကျင်စေရန် အကဌံပဌုလိုပါသည်။

Command ဖဌင့် TShark ကို install လုပ်ပါ။

$ sudo apt-get install tshark

အစဉ်အလာအာသဖဌင့်၊ ကျလန်ုပ်တို့သည် ပရိုဂရမ်ဗာသရဟင်သကို တောင်သဆိုခဌင်သဖဌင့် တပ်ဆင်မဟုရလဒ်ကို စစ်ဆေသသည်-

$ tshark --version

လုံလောက်တဲ့အဖဌေကိုရရင်၊ ကျလန်တော်တို့ ဆက်လက်လုပ်ဆောင်နေပါတယ်။

ကျလန်ုပ်တို့၏ ပက်ကတ်မျာသသည် ယခုအချိန်တလင် ကလန်ပျူတာအတလင်သသာ ရောက်သလာသသောကဌောင့်၊ ကျလန်ုပ်တို့သည် ထိုကဲ့သို့ ပက်ကေ့ခ်ျမျာသကိုသာ ပဌသရန် tsark အာသ ပဌောနိုင်ပါသည်။ ဒါကိုလုပ်ဖို့၊ အင်တာဖေ့စ်ကနေ packet capture ကို ရလေသရပါမယ်။ တကယ ရလေသချယ်ခလင့် TShark ကိုဖဌတ်သန်သခဌင်သဖဌင့် (loopback) -ilo:

$ sudo tshark -i lo

ကျလန်ုပ်တို့၏ transmitter မဟပေသပို့သော packet မျာသအကဌောင်သ မက်ဆေ့ချ်မျာသသည် ကလန်ဆိုသလ်ထဲသို့ ချက်ခဌင်သစတင်ပါမည် (အဝေသထိန်သခလုတ်ကို ကျလန်ုပ်တို့ နဟိပ်သည်ဖဌစ်စေ၊ မနဟိပ်သည်ဖဌစ်စေ ဆက်တိုက်ဖဌစ်စေ)။ သင့်ကလန်ပဌူတာတလင် local loop မဟတဆင့် packet မျာသကို ပေသပို့သည့် ပရိုဂရမ်မျာသ ရဟိကောင်သရဟိနိုင်သည်၊ ထိုအခဌေအနေတလင် ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့နဟင့် အခဌာသသူမျာသ၏ packet မျာသကို ရောနဟောပဌီသ လက်ခံရရဟိမည်ဖဌစ်သည်။ စာရင်သထဲတလင် ကျလန်ုပ်တို့၏ အဝေသထိန်သခလုတ်မဟ ပေသပို့သည့် ပက်ကေ့ခ်ျမျာသကိုသာ တလေ့ရကဌောင်သ သေချာစေရန်၊ ကျလန်ုပ်တို့သည် ပို့တ်နံပါတ်ဖဌင့် စစ်ထုတ်ခဌင်သကို ပေါင်သထည့်ပါမည်။ Ctrl-C ကိုနဟိပ်ခဌင်သဖဌင့် ကျလန်ုပ်တို့သည် ခလဲခဌမ်သစိတ်ဖဌာသူအာသ ရပ်တန့်ပဌီသ အဝေသထိန်သကိရိယာမဟ ၎င်သ၏ထုတ်လလဟင့်မဟုအတလက် ညသတည်ရာပေါက်ပေါက်အဖဌစ် အသုံသပဌုသည့် ပို့တ်နံပါတ်အတလက် စစ်ထုတ်မဟုတစ်ခု ထည့်သလင်သပါ (8010)။ -f "udp port 8010". ယခုကျလန်ုပ်တို့၏ command line သည်ကကဲ့သို့ဖဌစ်လိမ့်မည်။

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

အောက်ပါ output သည် console (ပထမ 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

ယခုအချိန်တလင်၊ ၎င်သတို့သည် ပက်ကေ့ခ်ျမျာသမဟုတ်သော်လည်သ လိုင်သတစ်ခုစီသည် အင်တာဖေ့စ်ပေါ်ရဟိ သတိပဌုမိသည့် နောက်ထုပ်ပိုသမဟုအကဌောင်သ မက်ဆေ့ချ်တစ်ခုဖဌစ်သည့် နံပါတ်တပ်ထာသသော ဖဌစ်ရပ်မျာသစာရင်သဖဌစ်သည်။ packet filtering ကို ကျလန်ုပ်တို့ ဂရုစိုက်ပဌီသဖဌစ်သောကဌောင့်၊ ကျလန်ုပ်တို့၏ transmitter မဟ packet မျာသအကဌောင်သ မက်ဆေ့ချ်မျာသကိုသာ စာရင်သပဌုစုထာသပါသည်။ ထို့နောက်၊ ကဇယာသကို ကော်လံနံပါတ်မျာသဖဌင့် ပုံဖော်ကဌည့်ကဌပါစို့။

ပလဲနံပါတ်။
၎င်သ၏ဖဌစ်ပျက်မဟုအချိန်။
ပက်ကတ်၏ အရင်သအမဌစ် IP လိပ်စာနဟင့် ပက်ကတ်၏ ညသတည်ရာ IP လိပ်စာ။
ပက်ကတ်၏ပရိုတိုကောကို UDP အဖဌစ်ပဌသထာသသောကဌောင့် RTP အထုပ်မျာသကို UDP ပက်ခ်မျာသအတလင်သ payload အဖဌစ် ပို့လိုက်သောကဌောင့်ဖဌစ်သည်။
ဘိုက်ဖဌင့် ထုပ်ပိုသအရလယ်အစာသ။
ပက်ကတ်၏ အရင်သအမဌစ် ပို့တ်နံပါတ်နဟင့် ပက်ကတ်၏ ညသတည်ရာ ပို့တ်နံပါတ်။
ထုပ်ပိုသပေသသည့်ပမာဏ၏ အရလယ်အစာသ၊ ကျလန်ုပ်တို့၏ transmitter သည် ရင်ဘတ်ရဟိ ဘဲတစ်ကောင်ကဲ့သို့ အရလယ်အစာသ 172 bytes ရဟိသော UDP packet အတလင်သတလင်ရဟိသော အရလယ်အစာသ 214 bytes ရဟိသော RTP အထုပ်မျာသကို ထုတ်ပေသသည်ဟု ကျလန်ုပ်တို့ ကောက်ချက်ချနိုင်ပါသည်။
ယခု UDP ပက်ကေ့ဂျ်မျာသအတလင်သ ကဌည့်ရဟုရန် အချိန်တန်ပဌီ၊ ၎င်သအတလက် ကျလန်ုပ်တို့သည် တိုသချဲ့သော့အစုံဖဌင့် TShark ကို စတင်ပါမည်။

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

ရလဒ်အနေဖဌင့်၊ ပရိုဂရမ်၏ထလက်ရဟိမဟုကို ကဌလယ်ဝစေလိမ့်မည် - ၎င်သကိုဖဌစ်ပေါ်စေခဲ့သော အထုပ်၏အတလင်သပိုင်သအကဌောင်သအရာမျာသကို ကုဒ်ဝဟက်ခဌင်သတစ်ခုစီကို ဖဌစ်ရပ်တစ်ခုစီသို့ ပေါင်သထည့်မည်ဖဌစ်သည်။ အထလက်ကို ပိုမိုကောင်သမလန်စလာကဌည့်ရဟုရန်၊ Ctrl-C ကိုနဟိပ်ခဌင်သဖဌင့် TShark ကို ရပ်တန့်နိုင်သည် သို့မဟုတ် ၎င်သ၏ tee ပရိုဂရမ်သို့ ပိုက်လိုင်သတစ်ခုထည့်ခဌင်သဖဌင့် run command တလင် ဖိုင်အမည်ကို သတ်မဟတ်ခဌင်သ၊ 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 ပက်ကေ့ဂျ်၏ အတလင်သပိုင်သဖလဲ့စည်သပုံအကဌောင်သ မလလဲမသလေပဌောဆိုပါမည်။

source: www.habr.com

မဟတ်ချက် Add