ΠΠ°ΡΠ΅ΡΠΈΡΠ°Π»ΠΎΡ Π½Π° ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π΅ ΠΏΡΠ΅Π·Π΅ΠΌΠ΅Π½ ΠΎΠ΄ ΠΌΠΎΠ΅ΡΠΎ .

ΠΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° TShark Π·Π° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° RTP ΠΏΠ°ΠΊΠ΅ΡΠΈ

ΠΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΎΡ Π‘ΠΎΠ±ΡΠ°Π²ΠΌΠ΅ ΠΊΠΎΠ»ΠΎ Π·Π° Π΄Π°Π»Π΅ΡΠΈΠ½ΡΠΊΠΎ ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΠΎΠ΄ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π½Π° ΡΠΎΠ½ΠΎΠ²ΠΈ ΠΈ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ Π·Π° ΡΠΎΠ½ΠΎΠ²ΠΈ, ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° ΠΌΠ΅ΡΡ ΠΊΠΎΡΠ° ΡΠ΅ Π²ΡΡΠ΅ΡΠ΅ ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° RTP ΠΏΠΎΡΠΎΠΊ.
ΠΠΎ ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ°, ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΡΠ²Π°ΠΌΠ΅ Π΄Π° Π³ΠΎ ΠΏΡΠΎΡΡΡΠ²Π°ΠΌΠ΅ ΠΏΡΠ΅Π½ΠΎΡΠΎΡ Π½Π° Π°ΡΠ΄ΠΈΠΎ ΡΠΈΠ³Π½Π°Π» ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΡ RTP. ΠΡΠ²ΠΎ, Π°ΡΠ΄Π΅ Π΄Π° ΡΠ° ΠΏΠΎΠ΄Π΅Π»ΠΈΠΌΠ΅ Π½Π°ΡΠ°ΡΠ° ΡΠ΅ΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π½Π° ΠΏΡΠ΅Π΄Π°Π²Π°ΡΠ΅Π» ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊ ΠΈ Π΄Π° Π½Π°ΡΡΠΈΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΎ ΠΈΡΠΏΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΡ RTP ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ Π½Π° ΠΌΡΠ΅ΠΆΠ΅Π½ ΡΠΎΠΎΠ±ΡΠ°ΡΠ°Ρ.
Π’Π°ΠΊΠ°, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌΠ΅ ΠΏΠΎΡΠ°ΡΠ½ΠΎ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠ΅ ΠΊΠΎΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ ΡΠ΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ½ΠΈ Π·Π° ΠΏΡΠ΅Π½ΠΎΡ Π½Π° RTP, Π° ΠΊΠΎΠΈ ΡΠ΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ½ΠΈ Π·Π° ΠΏΡΠΈΠΌΠ°ΡΠ΅, ΡΠ° Π΄Π΅Π»ΠΈΠΌΠ΅ Π½Π°ΡΠ°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° mstest6.c Π½Π° Π΄Π²Π΅ Π½Π΅Π·Π°Π²ΠΈΡΠ½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Π·Π° ΠΏΡΠ΅Π΄Π°Π²Π°ΡΠ΅Π»ΠΎΡ ΠΈ ΠΏΡΠΈΠΌΠ°ΡΠΎΡ, ΡΠ΅ Π³ΠΈ ΡΡΠ°Π²ΠΈΠΌΠ΅ Π·Π°Π΅Π΄Π½ΠΈΡΠΊΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠΎ Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΈ Π΄Π²Π°ΡΡΠ°ΡΠ° Π²ΠΎ ΡΡΠ΅ΡΠ°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° , ΠΊΠΎΡΠ° ΡΠ΅ ΡΠ° Π½Π°ΡΠ΅ΡΠ΅ΠΌΠ΅ mstest_common.Π², ΡΠ΅ Π±ΠΈΠ΄Π΅ ΠΏΠΎΠ²ΡΠ·Π°Π½ ΡΠΎ ΠΏΡΠ΅Π΄Π°Π²Π°ΡΠ΅Π»ΠΎΡ ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΡ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π°ΡΠ° Π·Π° Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΠ΅:
/* Π€Π°ΠΉΠ» 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, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΡΠΎΠ° ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° Π³ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° Π²Π°ΡΠΈΡΠ΅ 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 Π±Π°ΡΡΠΈ, ΠΊΠΎΠΈ, ΠΊΠ°ΠΊΠΎ ΠΏΠ°ΡΠΊΠ° Π²ΠΎ Π³ΡΠ°Π΄ΠΈΡΠ΅, ΡΠ΅ Π½Π°ΠΎΡΠ°Π°Ρ Π²ΠΎ UDP ΠΏΠ°ΠΊΠ΅Ρ ΡΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° ΠΎΠ΄ 214 Π±Π°ΡΡΠΈ.
Π‘Π΅Π³Π° Π΅ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ Π²Π½Π°ΡΡΠ΅ Π²ΠΎ UDP ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅, Π·Π° ΠΎΠ²Π° ΡΠ΅ Π³ΠΎ Π»Π°Π½ΡΠΈΡΠ°ΠΌΠ΅ TShark ΡΠΎ ΠΏΡΠΎΡΠΈΡΠ΅Π½ ΡΠ΅Ρ Π½Π° ΠΊΠ»ΡΡΠ΅Π²ΠΈ:
sudo tshark -i lo -f "udp port 8010" -P -V -O rtp -o rtp.heuristic_rtp:TRUE -xΠΠ°ΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ°, ΠΈΠ·Π»Π΅Π·ΠΎΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΡΠ΅ Π±ΠΈΠ΄Π΅ Π·Π±ΠΎΠ³Π°ΡΠ΅Π½ - Π½Π° ΡΠ΅ΠΊΠΎΡ Π½Π°ΡΡΠ°Π½ ΡΠ΅ ΡΠ΅ Π΄ΠΎΠ΄Π°Π΄Π΅ Π΄Π΅ΡΠΈΡΡΠΈΡΠ°ΡΠ΅ Π½Π° Π²Π½Π°ΡΡΠ΅ΡΠ½Π°ΡΠ° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ ΡΡΠΎ Π³ΠΎ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°. ΠΠ° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΎ Π΄Π° Π³ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ ΠΈΠ·Π»Π΅Π·ΠΎΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ»ΠΈ Π΄Π° Π³ΠΎ Π·Π°ΠΏΡΠ΅ΡΠ΅ TShark ΡΠΎ ΠΏΡΠΈΡΠΈΡΠΊΠ°ΡΠ΅ Π½Π° Ctrl-C ΠΈΠ»ΠΈ Π΄Π° Π³ΠΎ Π΄ΡΠΏΠ»ΠΈΡΠ°ΡΠ΅ Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ ΠΈΠ·Π»Π΅Π· Π²ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΡΠΎ Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅ Π½Π° ΡΠ΅Π²ΠΊΠΎΠ²ΠΎΠ΄ Π²ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Tee Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅, Π½Π°Π²Π΅Π΄ΡΠ²Π°ΡΡΠΈ Π³ΠΎ ΠΈΠΌΠ΅ΡΠΎ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ°, tee <ΠΈΠΌΠ΅ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°>:
$ 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
