{"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\/it\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-8","title":{"rendered":"Esploriamo il motore VoIP Mediastreamer2. Parte 8","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Il materiale dell'articolo \u00e8 tratto dal mio <noindex><a rel=\"nofollow\" href=\"https:\/\/zen.yandex.ru\/id\/5e3f8e0751f5346faab4fc7a\">canale zen<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Esploriamo il motore VoIP Mediastreamer2. Parte 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\">Struttura del pacchetto RTP<\/h2>\n<p><\/p>\n<p>Nell'articolo precedente <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/496490\/\">abbiamo chiarito il corretto completamento dei programmi che utilizzano il mediastreamer.<\/a><\/noindex> abbiamo utilizzato <em>TShark<\/em> per eseguire la cattura dei pacchetti RTP che il nostro ricevitore e trasmettitore si scambiavano. In questa analisi coloreremo gli elementi del pacchetto in diversi colori e parleremo della loro funzionalit\u00e0. <\/p>\n<p><\/p>\n<p>Guardiamo lo stesso pacchetto, ma ora con i campi colorati e le annotazioni esplicative:<br \/>\n<img decoding=\"async\" alt=\"Esploriamo il motore VoIP Mediastreamer2. Parte 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>Nella parte inferiore dell'elenco sono evidenziati i byte che compongono il pacchetto RTP, il quale \u00e8 a sua volta il payload del pacchetto UDP (il suo header \u00e8 evidenziato da una linea nera). I fondi colorati indicano i byte dell'header RTP, mentre con il colore verde \u00e8 evidenziato il blocco di dati che contiene il payload del pacchetto RTP. I dati sono rappresentati in formato esadecimale. In questo caso, si tratta di un segnale audio compresso secondo il formato u-law (legge mu), ovvero ogni campione ha una dimensione di 1 byte. Poich\u00e9 abbiamo utilizzato un'frequenza di campionamento predefinita (8000 Hz), a una frequenza di pacchetti di 50 Hz, ogni pacchetto RTP deve contenere 160 byte di payload. \u00c8 ci\u00f2 che vedremo contando i byte nell'area verde, che dovrebbero essere 10 righe. <\/p>\n<p><\/p>\n<p>Secondo lo standard, la quantit\u00e0 di dati nel payload deve essere un multiplo di quattro, o, in altre parole, deve contenere un numero intero di parole di 4 byte. Se per caso il tuo payload non rispetta questa regola, \u00e8 necessario aggiungere byte con valori nulli alla fine del payload e impostare il bit di Padding. Questo bit si trova nel primo byte dell'header RTP, \u00e8 evidenziato di colore turchese. Nota che tutti i byte del payload hanno un valore di 0xFF: questa \u00e8 l'aspetto del silenzio in formato u-law.<\/p>\n<p><\/p>\n<p>L'header del pacchetto RTP \u00e8 composto da 12 byte obbligatori, ma in due casi pu\u00f2 essere pi\u00f9 lungo:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Quando il pacchetto trasmette un segnale audio ottenuto dalla mescolanza di segnali provenienti da pi\u00f9 fonti (flussi RTP), dopo i primi 12 byte dell'header si trova una tabella con l'elenco degli identificatori delle fonti i cui payload sono stati utilizzati per generare il payload di questo pacchetto. A questo punto, nei quattro bit inferiori del primo byte dell'header (campo <em>Conteggio degli identificatori delle fonti contributrici<\/em>) viene indicato il numero delle fonti. La dimensione del campo \u00e8 di 4 bit, quindi la tabella pu\u00f2 contenere fino a 15 identificatori di fonti. Ognuno dei quali occupa 4 byte. Questa tabella \u00e8 utilizzata per l'organizzazione della conferenza a distanza.<\/p>\n<p>\n<\/li>\n<li>\n<p>Quando l'intestazione ha un'estensione. In questo caso, nel primo byte dell'intestazione viene impostato il bit <strong>X<\/strong>. Nell'intestazione estesa, dopo la tabella dei partecipanti (se presenti), si trova l'intestazione dell'estensione grande un parola, seguita dalle parole dell'estensione. L'estensione \u00e8 un insieme di byte che puoi usare per trasmettere dati aggiuntivi. Lo standard non specifica il formato di questi dati: pu\u00f2 essere qualsiasi cosa. Ad esempio, potrebbero essere delle impostazioni aggiuntive per il dispositivo che riceve i pacchetti RTP. Tuttavia, per alcune applicazioni, sono stati sviluppati standard per l'intestazione estesa. Questo \u00e8 stato fatto, ad esempio, per i mezzi di comunicazione nello standard <em>ED-137 (Standard di interoperabilit\u00e0 per componenti VoIP ATM)<\/em>. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Ora esaminiamo i campi dell'intestazione in modo pi\u00f9 dettagliato. Qui sotto \u00e8 mostrata un'immagine canonica con la struttura dell'intestazione RTP, che ho anche colorato con gli stessi colori.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Esploriamo il motore VoIP Mediastreamer2. Parte 8\" src=\"\/wp-content\/uploads\/2020\/07\/b8839a56fbe4ee484c9d6b19714b541e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<strong>VER<\/strong> \u2014 numero della versione del protocollo (la versione corrente \u00e8 2);<\/p>\n<p><\/p>\n<p><strong>P<\/strong> \u2014 flag che viene impostato nei casi in cui il pacchetto RTP \u00e8 arricchito con byte vuoti alla fine;<\/p>\n<p><\/p>\n<p><strong>X<\/strong> \u2014 flag che indica che l'intestazione \u00e8 estesa;<\/p>\n<p><\/p>\n<p><strong>CC<\/strong> \u2014 contiene il numero di identificatori CSRC che seguono l'intestazione fissa (dopo le parole 1..3), la tabella non \u00e8 mostrata nell'immagine;<\/p>\n<p><\/p>\n<p><strong>M<\/strong> \u2014 marcatore dell'inizio del fotogramma o della presenza di voce nel canale (se \u00e8 presente un rilevatore di pause nel parlato). Se il ricevitore non ha un rilevatore di pause nel parlato, questo bit deve essere sempre impostato;<\/p>\n<p><\/p>\n<p><strong>PTYPE<\/strong> \u2014 indica il formato del payload;<\/p>\n<p><\/p>\n<p><strong>Numero di sequenza<\/strong> \u2014 numero del pacchetto, utilizzato per ripristinare l'ordine di riproduzione dei pacchetti, poich\u00e9 nella realt\u00e0 \u00e8 possibile che i pacchetti arrivino al ricevitore non nell'ordine in cui sono stati inviati. Il valore iniziale deve essere casuale, ci\u00f2 viene fatto per rendere pi\u00f9 difficile la violazione in caso venga utilizzata la crittografia del flusso RTP. Questo campo consente anche di rilevare eventuali pacchetti persi;<\/p>\n<p><\/p>\n<p><strong>Timestamp<\/strong> \u2014 timestamp. Il tempo \u00e8 misurato in campioni di segnale, ovvero se un pacchetto contiene 160 campioni, il timestamp del pacchetto successivo sar\u00e0 maggiore di 160. Il valore iniziale del timestamp deve essere casuale;<\/p>\n<p><\/p>\n<p><strong>SSRC<\/strong> \u2014 identificatore della sorgente del pacchetto, deve essere unico. \u00c8 meglio generarlo casualmente prima di avviare il flusso RTP.<\/p>\n<p><\/p>\n<p>Se stai sviluppando il tuo trasmettitore o ricevitore di pacchetti RTP, dovrai esaminare pi\u00f9 volte i tuoi pacchetti. Per migliorare l'efficienza, ti consiglio di familiarizzare con l'uso del filtraggio dei pacchetti in TShark, che consente di catturare solo i pacchetti di tuo interesse. Questo \u00e8 molto prezioso in ambienti in cui operano decine di dispositivi RTP. Nella riga di comando di TShark, i parametri di filtraggio sono impostati con l'opzione \"-f\". Abbiamo utilizzato questa opzione quando volevamo catturare pacchetti dalla porta 8010:<br \/>\n<code>-f \"udp port 8010\"<\/code><br \/>\nI parametri di filtraggio sono essenzialmente un insieme di criteri ai quali deve soddisfare il pacchetto \"catturato\". Le condizioni possono controllare indirizzi, porte, valori di specifici byte nel pacchetto. Le condizioni possono essere combinate con operazioni logiche \"E\", \"O\" e simili. Uno strumento molto potente.<\/p>\n<p><\/p>\n<p>Se desideri visualizzare la dinamica della variazione dei campi nei pacchetti, ti sar\u00e0 necessario duplica l'output <em>TShark<\/em> in un file, come mostrato nell'articolo precedente, utilizzando la trasmissione dell'output <em>TShark<\/em> all'input <em>tee<\/em>. Successivamente, aprendo il file di log con <em>less, vim<\/em> o un altro strumento in grado di lavorare rapidamente con enormi file di testo e eseguire ricerche di stringhe, potrai scoprire tutte le sfumature del comportamento dei campi nei pacchetti nel flusso RTP.<\/p>\n<p><\/p>\n<p>Se hai bisogno di ascoltare il segnale trasmesso dal flusso RTP, dovResti utilizzare la versione <em>TShark<\/em> con interfaccia grafica <em>Wireshark<\/em>. Con semplici operazioni con il mouse, puoi ascoltare e visualizzare l'oscillogramma del segnale. Ma a condizione che esso sia codificato nel formato u-law o a-law.<\/p>\n<p><\/p>\n<p>Nel prossimo <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/496874\/\">abbiamo chiarito il corretto completamento dei programmi che utilizzano il mediastreamer.<\/a><\/noindex> realizzeremo insieme un dispositivo di comunicazione duplex. Assicurati di avere un paio di cuffie e un interlocutore.<\/p>\n<p>Fonte: <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.1.1 - 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\/it\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-8\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Esploriamo il motore VoIP Mediastreamer2. Parte 8 | ProHoster","description":"Il materiale dell'articolo \u00e8 tratto dal mio canale Zen.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-8","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/87043","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=87043"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/87043\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/87044"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=87043"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=87043"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=87043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}