{"id":87043,"date":"2020-07-02T19:42:04","date_gmt":"2020-07-02T17:42:04","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-8"},"modified":"2020-07-02T19:42:04","modified_gmt":"2020-07-02T17:42:04","slug":"izuchaem-voip-dvizhok-mediastreamer2-chast-8","status":"publish","type":"post","link":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-8","title":{"rendered":"Laten we de VoIP-engine Mediastreamer2 bestuderen. Deel 8","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Het materiaal van dit artikel is afkomstig van mijn <noindex><a rel=\"nofollow\" href=\"https:\/\/zen.yandex.ru\/id\/5e3f8e0751f5346faab4fc7a\">zen-kanaal<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Laten we de VoIP-engine Mediastreamer2 bestuderen. Deel 8\" src=\"\/wp-content\/uploads\/2020\/07\/ddc5dba3a090dec9927b46a82dda760f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"struktura-rtp-paketa\">Structuur van het RTP-pakket<\/h2>\n<p><\/p>\n<p>In het verleden <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/496490\/\">artikel<\/a><\/noindex> wij hebben met behulp van <em>TShark<\/em> de RTP-pakketten vastgelegd die werden uitgewisseld tussen onze ontvanger en zender. In deze zullen we de elementen van het pakket in verschillende kleuren kleuren en spreken over hun functies. <\/p>\n<p><\/p>\n<p>Laten we naar hetzelfde pakket kijken, maar nu met gekleurde velden en verklarende teksten:<br \/>\n<img decoding=\"async\" alt=\"Laten we de VoIP-engine Mediastreamer2 bestuderen. Deel 8\" src=\"\/wp-content\/uploads\/2020\/07\/a2ee8fb10bc6daa48dcd0bc9a8596fd7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>In de onderste helft van de listing zijn de bytes gekleurd die het RTP-pakket vormen, dat op zijn beurt de nuttige lading van het UDP-pakket is (de header is omcirkeld met een zwarte lijn). De gekleurde achtergronden geven de bytes van de RTP-header aan, terwijl het groene gedeelte het datablok markeert dat de nuttige lading van het RTP-pakket bevat. De gegevens worden gepresenteerd in hexadecimale indeling. In ons geval is dit een geluidssignaal dat is gecomprimeerd volgens de u-wet (mu-wet), dat wil zeggen dat \u00e9\u00e9n monster 1 byte groot is. Aangezien we de standaard samplingfrequentie (8000 Hz) hebben gebruikt, moet elk RTP-pakket bij een frequentie van 50 Hz 160 bytes nuttige lading bevatten. Dit zullen we zien door de bytes in het groene gebied te tellen, er zouden 10 regels moeten zijn. <\/p>\n<p><\/p>\n<p>Volgens de standaard moet de hoeveelheid gegevens in de nuttige lading een veelvoud van vier zijn, of met andere woorden, het moet een geheel aantal vierbytewoorden bevatten. Als het gebeurt dat uw nuttige lading niet aan deze regel voldoet, moeten aan het einde van de nuttige lading bytes met nulwaarden worden toegevoegd en moet de Padding-bit worden ingesteld. Deze bit bevindt zich in de eerste byte van de RTP-header, die in turquoise kleur is gemarkeerd. Houd er rekening mee dat alle bytes in de nuttige lading de waarde 0xFF hebben \u2013 zo ziet stilte eruit in het u-law formaat.<\/p>\n<p><\/p>\n<p>De RTP-header bestaat uit 12 verplichte bytes, maar in twee gevallen kan deze langer zijn:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Wanneer het pakket een geluidssignaal bevat dat is verkregen door het mengen van signalen van verschillende bronnen (RTP-stromen), dan komt na de eerste 12 bytes van de header een tabel met een lijst van de identificatoren van de bronnen waarvan de nuttige ladingen zijn gebruikt voor het maken van de nuttige lading van dit pakket. Hierbij bevinden zich in de laagste vier bits van de eerste byte van de header (veld <em>Aantal bijdragende bronidentificaties<\/em>) geeft het aantal bronnen aan. Het veld is 4 bits groot, dus de tabel kan tot 15 bronidentificatoren bevatten, die elk 4 bytes innemen. Deze tabel wordt gebruikt bij het organiseren van conferentiecommunicatie.<\/p>\n<p>\n<\/li>\n<li>\n<p>Wanneer de header een extensie heeft. In dit geval wordt in de eerste byte van de header een bit ingesteld. <strong>X<\/strong>. In de uitgebreide header, na de deelnemerslijst (indien van toepassing), bevindt zich de extensieheader van \u00e9\u00e9n woord, gevolgd door de extensiewoorden. De extensie is een set bytes die je kunt gebruiken om extra gegevens door te geven. De standaard specificeert het format van deze gegevens niet \u2014 het kan van alles zijn. Bijvoorbeeld, dit kunnen extra instellingen zijn voor het apparaat dat RTP-pakketten ontvangt. Voor sommige toepassingen zijn echter standaarden voor de uitgebreide header ontwikkeld. Dit is bijvoorbeeld zo gedaan voor communicatiemiddelen in de standaard <em>ED-137 (Interoperabiliteitsstandaarden voor VoIP-ATM-componenten)<\/em>. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Laten we nu de headervelden in meer detail bekijken. Hieronder is een canonieke afbeelding met de structuur van de RTP-header, die ik ook in dezelfde kleuren heb gekleurd.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Laten we de VoIP-engine Mediastreamer2 bestuderen. Deel 8\" src=\"\/wp-content\/uploads\/2020\/07\/b8839a56fbe4ee484c9d6b19714b541e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<strong>VER<\/strong> \u2014 het versie nummer van het protocol (huidige versie 2);<\/p>\n<p><\/p>\n<p><strong>P<\/strong> \u2014 een vlag die wordt ingesteld in gevallen waarin het RTP-pakket wordt aangevuld met lege bytes aan het einde;<\/p>\n<p><\/p>\n<p><strong>X<\/strong> \u2014 een vlag die aangeeft dat de header uitgebreid is;<\/p>\n<p><\/p>\n<p><strong>CC<\/strong> \u2014 bevat het aantal CSRC-identificatoren dat volgt na de vaste header (na de woorden 1..3), de tabel is in de afbeelding niet getoond;<\/p>\n<p><\/p>\n<p><strong>M<\/strong> \u2014 marker voor het begin van een frame of aanwezigheid van spraak in de kanalen (indien er een spraakpauzedetector wordt gebruikt). Als de ontvanger geen spraakpauzedetector bevat, moet deze bit altijd zijn ingesteld;<\/p>\n<p><\/p>\n<p><strong>PTYPE<\/strong> \u2014 geeft het formaat van de nuttige lading aan;<\/p>\n<p><\/p>\n<p><strong>Volgnummer<\/strong> \u2014 pakketnummer, wordt gebruikt om de volgorde van de afspelen van de pakketten te herstellen, aangezien het in werkelijkheid kan voorkomen dat pakketten in een andere volgorde bij de ontvanger aankomen dan waarvoor ze zijn verzonden. De beginwaarde moet willekeurig zijn, dit is om het moeilijker te maken om de RTP-stroom te kraken als encryptie wordt toegepast. Dit veld maakt ook het detecteren van gemiste pakketten mogelijk;<\/p>\n<p><\/p>\n<p><strong>Timestamp<\/strong> \u2014 tijdstempel. De tijd wordt gemeten in signal samples, dat wil zeggen, als een pakket 160 samples bevat, zal de tijdstempel van het volgende pakket met 160 toenemen. De initi\u00eble waarde van de tijdstempel moet willekeurig zijn;<\/p>\n<p><\/p>\n<p><strong>SSRC<\/strong> \u2014 de identifier van de pakketbron, deze moet uniek zijn. Het is beter om deze willekeurig te genereren v\u00f3\u00f3r de start van de RTP-stroom.<\/p>\n<p><\/p>\n<p>Als u uw RTP-pakketzender of -ontvanger ontwikkelt, moet u uw pakketten regelmatig bekijken om de prestaties te verbeteren. Ik raad u aan om de filterfunctionaliteit in TShark te leren kennen, waarmee u alleen de pakketten kunt vastleggen die voor u interessant zijn. In een omgeving waar tientallen RTP-apparaten actief zijn, is dit van groot belang. In de TShark-opdrachtregel worden filterparameters ingesteld met de optie \"-f\". We hebben deze optie gebruikt toen we pakketten van poort 8010 wilden vastleggen:<br \/>\n<code>-f \"udp port 8010\"<\/code><br \/>\nDe filterparameters zijn in feite een set criteria waaraan het \"vastgelegde\" pakket moet voldoen. De voorwaarde kan het adres, de poort of de waarde van een bepaald byte in het pakket controleren. Voorwaarden kunnen worden gecombineerd met logische bewerkingen zoals \"EN\", \"OF\", enz. Het is een zeer krachtig hulpmiddel.<\/p>\n<p><\/p>\n<p>Als je de dynamiek van de veranderingen in de velden binnen de pakketten wilt bekijken, moet je de uitvoer dupliceren <em>TShark<\/em> naar een bestand, zoals eerder in het artikel is getoond, met behulp van het doorgeven van de uitvoer <em>TShark<\/em> aan de invoer <em>tee<\/em>. Vervolgens kun je het logbestand openen met <em>less, vim<\/em> of een ander hulpmiddel dat snel met enorme tekstbestanden kan werken en stringsearching kan uitvoeren, om alle nuances van het gedrag van de velden in de RTP-stroom te begrijpen.<\/p>\n<p><\/p>\n<p>Als je het signaal dat via de RTP-stroom wordt verzonden wilt beluisteren, moet je de versie gebruiken <em>TShark<\/em> met een grafische interface <em>Wireshark<\/em>. Met een paar muisklikken kun je daar luisteren en de oscilloscoop van het signaal zien. Maar slechts onder \u00e9\u00e9n voorwaarde \u2014 als het gecodeerd is in het formaat u-law of a-law.<\/p>\n<p><\/p>\n<p>In de volgende <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/496874\/\">artikel<\/a><\/noindex> we gaan samen een duplex communicatiesysteem maken. Zorg voor een paar headsets en \u00e9\u00e9n gesprekspartner.<\/p>\n<p>Bron: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/496666\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0437\u044f\u0442 \u0441 \u043c\u043e\u0435\u0433\u043e \u0434\u0437\u0435\u043d-\u043a\u0430\u043d\u0430\u043b\u0430. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 RTP-\u043f\u0430\u043a\u0435\u0442\u0430 \u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e TShark \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0438 \u0437\u0430\u0445\u0432\u0430\u0442 RTP-\u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u043d\u0430\u0448\u0438 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a. \u041d\u0443 \u0430 \u0432 \u044d\u0442\u043e\u0439 \u043c\u044b \u0440\u0430\u0441\u043a\u0440\u0430\u0441\u0438\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u0430\u043a\u0435\u0442\u0430 \u0432 \u0440\u0430\u0437\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430 \u0438 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0431 \u0438\u0445 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438. \u0412\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0430\u043a\u0435\u0442, \u043d\u043e \u0443\u0436\u0435 \u0441 \u043f\u043e\u0434\u043a\u0440\u0430\u0448\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u0438 \u0441 \u043f\u043e\u044f\u0441\u043d\u044f\u044e\u0449\u0438\u043c\u0438 \u043d\u0430\u0434\u043f\u0438\u0441\u044f\u043c\u0438: \u0412 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":87044,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-87043","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0437\u044f\u0442 \u0441 \u043c\u043e\u0435\u0433\u043e \u0434\u0437\u0435\u043d-\u043a\u0430\u043d\u0430\u043b\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-8\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u0437\u0443\u0447\u0430\u0435\u043c VoIP-\u0434\u0432\u0438\u0436\u043e\u043a Mediastreamer2. \u0427\u0430\u0441\u0442\u044c 8 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0437\u044f\u0442 \u0441 \u043c\u043e\u0435\u0433\u043e \u0434\u0437\u0435\u043d-\u043a\u0430\u043d\u0430\u043b\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-8\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-02T17:42:04+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-02T17:42:04+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Leren over de VoIP-engine Mediastreamer2. Deel 8 | ProHoster","description":"Het materiaal van dit artikel is afkomstig van mijn Zen-kanaal.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-8","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0418\u0437\u0443\u0447\u0430\u0435\u043c VoIP-\u0434\u0432\u0438\u0436\u043e\u043a Mediastreamer2. \u0427\u0430\u0441\u0442\u044c 8 | ProHoster","og:description":"\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0437\u044f\u0442 \u0441 \u043c\u043e\u0435\u0433\u043e \u0434\u0437\u0435\u043d-\u043a\u0430\u043d\u0430\u043b\u0430.","og:url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-8","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-02T17:42:04+00:00","article:modified_time":"2020-07-02T17:42:04+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"87043","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:59:56","updated":"2022-10-07 20:48:50","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/87043","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=87043"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/87043\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/87044"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=87043"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=87043"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=87043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}