×עך ××Ö·×עך××Ö·× ×€×× ××¢× ×ַך×××§× ××× ××¢× ×××¢× ×€×× ××××
× ××Š× TShark ×Š× ×Ö·× ×Ö·×××× 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