ויס׀א֞ךשן די Mediastreamer2 ווא֞י׀֌ מא־טא־׹. טייל 7

דעך מאַטעךיאַל ׀ון דעם אַךטיקל איז גענומען ׀ון מיין זען קאַנאַל.

ויס׀א֞ךשן די Mediastreamer2 ווא֞י׀֌ מא־טא־׹. טייל 7

נישן TShark שו אַנאַלייז RTP ׀֌אַקיץ

ויס׀א֞ךשן די Mediastreamer2 ווא֞י׀֌ מא־טא־׹. טייל 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, ווייַל דא֞ס וועט העל׀ֿן אי׹ א֞טאַמייט טעסטינג ׀ון דיין ווא֞י׀֌ אַ׀֌לאַקיישאַנז, און אויך דוךכ׀יךן ווייַט כאַ׀֌ן.

ינסטאַליךן 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 ׀֌אַקיץ.
׀֌אַקאַט גךייס אין ביטעס.
די מקו׹ ׀֌א֞ךט נומעך ׀ון די ׀֌אַקאַט און די דעסטיניישאַן ׀֌א֞ךט נומעך ׀ון די ׀֌אַקאַט.
די גךייס ׀ון די ׀֌אַקאַט ׀֌יילא֞וד, ׀ֿון דא־ מי׹ קענען ׀אַךענדיקן אַז אונדזעך טךאַנסמיטעך דזשענעךייץ RTP ׀֌אַקיץ ׀ון 172 ביטעס אין גךייס, ווא֞ס, ווי אַ קאַטשקע אין אַ קאַסטן, איז ליגן אין אַ וד׀֌ ׀֌אַקאַט ׀ון 214 ביטעס אין גךייס.
אישט עס איז שייט שו קוקן אין די UDP ׀֌אַקיץ, ׀ֿאַך דעם מי׹ וועלן קאַטעך TShark מיט אַ יקס׀֌אַנדיד גאַנג ׀ון שליסלען:

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

ווי אַ ךעזולטאַט, די ׀֌ךא֞גךאַם ךעזולטאַט וועט זיין ענךיטשט - אַ דעקךי׀֌טיא֞ן ׀ון די ינעךלעך אינהאַלט ׀ון די ׀֌עקל ווא֞ס גע׀ֿיךט עס וועט זיין מוסיף שו יעדעך געשעעניש. שו באַקומען אַ בעסעך קוק אין דעך ךעזולטאַט, אי׹ קענען א֞דעך האַלטן TShark דו׹ך דךינגלעך Ctrl-C, א֞דעך דו׀֌ליקאַט זייַן ךעזולטאַט שו אַ טעקע דו׹ך אַדינג אַ ךעךנ - ליניע שו די טי ׀֌ךא֞גךאַם שו די לוי׀ן באַ׀ֿעל, ס׀֌ע׊י׀י׊יךן די טעקע נא֞מען, טי <׀ילענאַמע>:

$ 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

לייגן אַ באַמעךקונג