Mediastreamer2 VoIP programmas izpēte. 8. daļa

Raksta materiāls ņemts no mana zen kanāls.

Mediastreamer2 VoIP programmas izpēte. 8. daļa

RTP pakeŔu struktūra

Pagātnē raksts mēs lietojam TShark uzņemtās RTP paketes, ar kurām apmainÄ«jās mÅ«su uztvērējs un raidÄ«tājs. Nu, Å”ajā mēs krāsosim iepakojuma elementus dažādās krāsās un runāsim par to mērÄ·i.

ApskatÄ«sim to paÅ”u paketi, bet ar tonētiem laukiem un paskaidrojoŔām piezÄ«mēm:
Mediastreamer2 VoIP programmas izpēte. 8. daļa

Saraksta apakŔā ir baiti, kas veido RTP paketi, kas savukārt ir UDP paketes lietderÄ«gā slodze (tās galvene ir iezÄ«mēta melnā krāsā). Krāsaini foni norāda RTP galvenes baitus, un zaļŔ norāda datu bloku, kas satur RTP paketes lietderÄ«go slodzi. Dati ir parādÄ«ti heksadecimālā formātā. MÅ«su gadÄ«jumā tas ir audio signāls, kas saspiests saskaņā ar u-likumu (mu-likumu), t.i. viena parauga izmērs ir 1 baits. Tā kā mēs izmantojām noklusējuma iztverÅ”anas frekvenci (8000 Hz) ar pakeÅ”u ātrumu 50 Hz, katrā RTP paketē ir jāietver 160 baiti lietderÄ«gās slodzes. To mēs redzēsim, saskaitot baitus zaļajā zonā, jābÅ«t 10 rindām.

Saskaņā ar standartu datu apjomam lietderÄ«gajā slodzē ir jābÅ«t četrkārÅ”ai vai, citiem vārdiem sakot, jāsatur četru baitu vārdu vesels skaitlis. Ja gadās, ka jÅ«su krava neatbilst Å”im noteikumam, lietderÄ«gās slodzes beigās jāpievieno baiti ar nulles vērtÄ«bām un jāiestata aizpildÄ«Å”anas bits. Å is bits atrodas RTP galvenes pirmajā baitā un ir tirkÄ«za krāsā. Ņemiet vērā, ka visiem derÄ«gās slodzes baitiem ir vērtÄ«ba 0xFF ā€” Ŕādi izskatās klusums u-likuma formātā.

RTP paketes galvene sastāv no 12 nepiecieŔamajiem baitiem, bet divos gadījumos tā var būt garāka:

  • Ja paketē ir audio signāls, kas iegÅ«ts, sajaucot signālus no vairākiem avotiem (RTP straumēm), tad pēc pirmajiem 12 galvenes baitiem ir tabula ar avota identifikatoru sarakstu, kuru lietderÄ«gās slodzes tika izmantotas Ŕīs paketes lietderÄ«gās slodzes izveidoÅ”anai. Å ajā gadÄ«jumā galvenes pirmā baita apakŔējos četros bitos (lauks IeguldÄ«jumu avotu identifikatoru skaits) ir norādÄ«ts avotu skaits. Lauka lielums ir 4 biti, tāpēc tabulā var bÅ«t lÄ«dz 15 avota identifikatoriem. Katrs no tiem aizņem 4 baitus. Å Ä« tabula tiek izmantota, organizējot konferences zvanu.

  • Ja nosaukumam ir paplaÅ”inājums. Å ajā gadÄ«jumā ir iestatÄ«ts galvenes pirmajā baitā esoÅ”ais bits X. PaplaÅ”inātajā galvenē aiz dalÄ«bnieku tabulas (ja tāda ir) ir viena vārda paplaÅ”inājuma galvene, kam seko paplaÅ”inājuma vārdi. PaplaÅ”inājums ir baitu kopa, ko varat izmantot papildu datu pārsÅ«tÄ«Å”anai. Standarts nenorāda Å”o datu formātu ā€“ tas var bÅ«t jebkas. Piemēram, tie varētu bÅ«t daži papildu iestatÄ«jumi ierÄ«cei, kas saņem RTP paketes. Tomēr dažām lietojumprogrammām ir izstrādāti paplaÅ”ināti galvenes standarti. Tas tiek darÄ«ts, piemēram, standarta sakaru iekārtām ED-137 (VoIP bankomāta komponentu savietojamÄ«bas standarti).

Tagad apskatÄ«sim galvenes laukus sÄ«kāk. Zemāk ir kanonisks attēls ar RTP galvenes struktÅ«ru, kam es arÄ« nevarēju pretoties un krāsoju tādās paŔās krāsās.

Mediastreamer2 VoIP programmas izpēte. 8. daļa
VER ā€” protokola versijas numurs (paÅ”reizējā versija 2);

P ā€” karodziņŔ, kas tiek uzstādÄ«ts gadÄ«jumos, kad RTP pakete beigās tiek papildināta ar tukÅ”iem baitiem;

X ā€” karodziņŔ, ka galvene ir pagarināta;

CC ā€” satur CSRC identifikatoru skaitu aiz konstantes galvenes (pēc vārdiem 1..3), tabula nav parādÄ«ta attēlā;

M ā€” kadra sākuma marÄ·ieris vai runas klātbÅ«tne kanālā (ja tiek izmantots runas pauzes detektors). Ja uztvērējs nesatur runas pauzes detektoru, tad Å”is bits ir jāiestata pastāvÄ«gi;

PTYPE ā€” norāda lietderÄ«gās slodzes formātu;

SecÄ«bas numurs ā€” paketes numurs, ko izmanto, lai atjaunotu pakeÅ”u atskaņoÅ”anas secÄ«bu, jo reālā situācija ir tad, kad paketes var sasniegt saņēmēju citā secÄ«bā, nekā tās tika nosÅ«tÄ«tas. Sākotnējai vērtÄ«bai jābÅ«t nejauÅ”ai; tas tiek darÄ«ts, lai, ja tiek izmantota RTP straumes Å”ifrÄ“Å”ana, to bÅ«tu grÅ«ti uzlauzt. Å is lauks arÄ« ļauj noteikt pakeÅ”u kritumus;

Timestamp - laika zÄ«mogs. Laiks tiek mērÄ«ts signālu paraugos, t.i. ja paketē ir 160 paraugi, tad nākamās paketes laikspiedols bÅ«s par 160 lielāks. Laika zÄ«moga sākuma vērtÄ«bai jābÅ«t nejauÅ”ai;

SSRC ā€” pakotnes avota identifikators, tam jābÅ«t unikālam. Pirms RTP straumes palaiÅ”anas labāk to Ä£enerēt nejauÅ”i.

Ja jÅ«s izstrādājat savu RTP pakeÅ”u raidÄ«tāju vai uztvērēju, jums bÅ«s jāskatās savas paketes vairāk nekā vienu reizi, tāpēc, lai palielinātu produktivitāti, iesaku jums apgÅ«t pakeÅ”u filtrÄ“Å”anas lietoÅ”anu TShark, tas ļauj tvert tikai tās paketes. kas jÅ«s interesē. Apstākļos, kad tÄ«klā darbojas desmitiem RTP ierīču, tas ir ļoti vērtÄ«gi. Komandrindā TShark filtrÄ“Å”anas parametri ir norādÄ«ti ar opciju "-f". Mēs izmantojām Å”o opciju, kad vēlējāmies tvert paketes no porta 8010:
-f "udp port 8010"
FiltrÄ“Å”anas parametri bÅ«tÄ«bā ir kritēriju kopums, kam jāatbilst ā€œnoÄ·ertajaiā€ paketei. NosacÄ«jums var pārbaudÄ«t konkrēta baita adresi, portu vai vērtÄ«bu paketē. NosacÄ«jumus var apvienot, izmantojot loÄ£iskās darbÄ«bas "UN", "OR" utt. Ä»oti spēcÄ«gs instruments.

Ja vēlaties skatÄ«t lauku izmaiņu dinamiku partijās, jums bÅ«s jādublē izvade TShark uz failu, kā tika parādÄ«ts iepriekŔējā rakstā, izmantojot izvades pārsÅ«tÄ«Å”anu TShark pie ieejas tee. Pēc tam atveriet žurnāla failu, izmantojot mazāk, vim vai citu rÄ«ku, kas var ātri strādāt ar milzÄ«giem teksta failiem un meklēt virknes, jÅ«s varat uzzināt visas RTP straumes pakeÅ”u lauku darbÄ«bas nianses.

Ja jums ir nepiecieÅ”ams klausÄ«ties signālu, ko pārraida RTP straume, tad jums ir jāizmanto versija TShark ar vizuālo saskarni Wireshark. Veicot vienkārÅ”as manipulācijas ar peli, jÅ«s varat klausÄ«ties un redzēt signāla oscilogrammu. Bet ar vienu nosacÄ«jumu ā€“ ja tas ir iekodēts u-likumā vai a-low formātā.

Nākamais raksts Mēs ar jums izveidosim duplekso domofonu. Uzkrāj pāris austiņas un vienu sarunu biedru.

Avots: www.habr.com

Pievieno komentāru