{"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\/es\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-8","title":{"rendered":"Explorando el motor VoIP Mediastreamer2. Parte 8","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>El material del art\u00edculo fue tomado de mi <noindex><a rel=\"nofollow\" href=\"https:\/\/zen.yandex.ru\/id\/5e3f8e0751f5346faab4fc7a\">canal de Zen<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Explorando el motor 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\">Estructura del paquete RTP<\/h2>\n<p><\/p>\n<p>En el anterior <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/496490\/\">el art\u00edculo<\/a><\/noindex> hemos realizado <em>TShark<\/em> la captura de paquetes RTP que intercambiaron nuestro receptor y transmisor. En esta, colorearemos los elementos del paquete en diferentes colores y hablaremos sobre su funci\u00f3n. <\/p>\n<p><\/p>\n<p>Veamos el mismo paquete, pero ya con los campos coloreados y con las leyendas explicativas:<br \/>\n<img decoding=\"async\" alt=\"Explorando el motor 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>En la parte inferior del listado est\u00e1n coloreados los bytes que componen el paquete RTP, el cual a su vez es la carga \u00fatil del paquete UDP (su encabezado est\u00e1 rodeado por una l\u00ednea negra). Los bytes del encabezado RTP est\u00e1n se\u00f1alizados con colores de fondo, y en verde se destaca el bloque de datos que contiene la carga \u00fatil del paquete RTP. Los datos se presentan en formato hexadecimal. En nuestro caso, se trata de una se\u00f1al de audio comprimida por ley u (ley mu), es decir, cada muestra tiene un tama\u00f1o de 1 byte. Dado que usamos la tasa de muestreo predeterminada (8000 Hz), a una frecuencia de paquetes de 50 Hz, cada paquete RTP debe contener 160 bytes de carga \u00fatil. Esto es lo que veremos al contar los bytes en el \u00e1rea verde, deber\u00edan ser 10 l\u00edneas. <\/p>\n<p><\/p>\n<p>Seg\u00fan el est\u00e1ndar, la cantidad de datos en la carga \u00fatil debe ser un m\u00faltiplo de cuatro, o, en otras palabras, debe contener una cantidad entera de palabras de cuatro bytes. Si sucede que su carga \u00fatil no cumple con esta regla, se deben agregar bytes con valores cero al final de la carga \u00fatil y establecer el bit de Padding (Relleno). Este bit se encuentra en el primer byte del encabezado RTP, que est\u00e1 coloreado en color turquesa. Tenga en cuenta que todos los bytes de la carga \u00fatil tienen un valor de 0xFF: as\u00ed es como se ve el silencio en el formato u-law.<\/p>\n<p><\/p>\n<p>El encabezado del paquete RTP consta de 12 bytes obligatorios, pero en dos casos puede ser m\u00e1s largo:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Cuando el paquete transporta una se\u00f1al de audio obtenida al mezclar se\u00f1ales de varias fuentes (flujos RTP), entonces, despu\u00e9s de los primeros 12 bytes del encabezado, se encuentra una tabla con la lista de identificadores de fuentes cuyas cargas \u00fatiles se utilizaron para crear la carga \u00fatil de este paquete. En este caso, en los cuatro bits menos significativos del primer byte del encabezado (campo <em>Conteo de identificadores de fuentes contribuyentes<\/em>) se indica la cantidad de fuentes. El tama\u00f1o del campo es de 4 bits, por lo que la tabla puede contener hasta 15 identificadores de fuentes. Cada uno ocupa 4 bytes. Esta tabla se utiliza para organizar conferencias.<\/p>\n<p>\n<\/li>\n<li>\n<p>Cuando el encabezado tiene extensi\u00f3n. En este caso, el primer byte del encabezado establece un bit. <strong>X<\/strong>. En el encabezado extendido, despu\u00e9s de la tabla de participantes (si los hay), se coloca el encabezado de extensi\u00f3n de un tama\u00f1o de una palabra, seguido de las palabras de extensi\u00f3n. La extensi\u00f3n es un conjunto de bytes que puedes utilizar para transmitir datos adicionales. El est\u00e1ndar no especifica el formato de estos datos, puede ser cualquiera. Por ejemplo, pueden ser configuraciones adicionales para el dispositivo que recibe los paquetes RTP. Sin embargo, para algunas aplicaciones, se han desarrollado est\u00e1ndares de encabezados extendidos. Esto se hizo, por ejemplo, para los medios de comunicaci\u00f3n en el est\u00e1ndar <em>ED-137 (Normas de interoperabilidad para componentes de VoIP ATM)<\/em>. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Ahora examinemos los campos del encabezado con m\u00e1s detalle. A continuaci\u00f3n se muestra una imagen can\u00f3nica con la estructura del encabezado RTP, que tambi\u00e9n he decorado con los mismos colores.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Explorando el motor VoIP Mediastreamer2. Parte 8\" src=\"\/wp-content\/uploads\/2020\/07\/b8839a56fbe4ee484c9d6b19714b541e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<strong>VER<\/strong> \u2014 n\u00famero de versi\u00f3n del protocolo (la versi\u00f3n actual es 2);<\/p>\n<p><\/p>\n<p><strong>P<\/strong> \u2014 un flag que se establece en los casos en que el paquete RTP se complementa con bytes vac\u00edos al final;<\/p>\n<p><\/p>\n<p><strong>X<\/strong> \u2014 un flag que indica que el encabezado es extendido;<\/p>\n<p><\/p>\n<p><strong>CC<\/strong> \u2014 contiene el n\u00famero de identificadores CSRC que siguen al encabezado fijo (despu\u00e9s de las palabras 1..3), en la ilustraci\u00f3n la tabla no se muestra;<\/p>\n<p><\/p>\n<p><strong>M<\/strong> \u2014 marcador de inicio de cuadro o de presencia de voz en el canal (si se utiliza un detector de pausas en la voz). Si el receptor no contiene un detector de pausas en la voz, este bit debe estar siempre establecido;<\/p>\n<p><\/p>\n<p><strong>PTYPE<\/strong> \u2014 indica el formato de la carga \u00fatil;<\/p>\n<p><\/p>\n<p><strong>N\u00famero de secuencia<\/strong> \u2014 n\u00famero de paquete, se utiliza para restaurar el orden de reproducci\u00f3n de los paquetes, ya que en la realidad los paquetes pueden llegar al receptor en un orden diferente al que fueron enviados. El valor inicial debe ser aleatorio, esto se hace para que, si se aplica cifrado al flujo RTP, sea m\u00e1s dif\u00edcil descifrarlo. Adem\u00e1s, este campo permite detectar p\u00e9rdida de paquetes;<\/p>\n<p><\/p>\n<p><strong>Timestamp<\/strong> \u2014 marca de tiempo. El tiempo se mide en muestras de se\u00f1al, es decir, si un paquete contiene 160 muestras, la marca de tiempo del siguiente paquete ser\u00e1 mayor en 160. El valor inicial de la marca de tiempo debe ser aleatorio;<\/p>\n<p><\/p>\n<p><strong>SSRC<\/strong> \u2014 identificador de origen del paquete, debe ser \u00fanico. Lo mejor es generarlo de forma aleatoria antes de iniciar la transmisi\u00f3n RTP.<\/p>\n<p><\/p>\n<p>Si vas a desarrollar tu propio transmisor o receptor de paquetes RTP, tendr\u00e1s que revisar tus paquetes en varias ocasiones para mejorar la eficiencia. Te recomiendo que aprendas a utilizar la filtraci\u00f3n de paquetes en TShark, ya que permite capturar solo aquellos paquetes que son de tu inter\u00e9s. En situaciones donde hay docenas de dispositivos RTP en la red, esto es muy valioso. En la l\u00ednea de comandos de TShark, los par\u00e1metros de filtraci\u00f3n se definen con la opci\u00f3n \"-f\". Utilizamos esta opci\u00f3n cuando quer\u00edamos capturar paquetes del puerto 8010:<br \/>\n<code>-f \"udp port 8010\"<\/code><br \/>\nLos par\u00e1metros de filtraci\u00f3n son, en esencia, un conjunto de criterios que debe cumplir el paquete 'capturado'. La condici\u00f3n puede verificar la direcci\u00f3n, el puerto, el valor de un byte espec\u00edfico en el paquete. Las condiciones se pueden combinar mediante operaciones l\u00f3gicas como \"Y\", \"O\" y similares. Es una herramienta muy potente.<\/p>\n<p><\/p>\n<p>Si deseas ver la din\u00e1mica de los cambios en los campos de los paquetes, necesitar\u00e1s duplicar la salida <em>TShark<\/em> en un archivo, tal como se mostr\u00f3 en el art\u00edculo anterior, mediante la transmisi\u00f3n de la salida <em>TShark<\/em> a la entrada <em>tee<\/em>. Luego, al abrir el archivo de registro con <em>less, vim<\/em> u otra herramienta capaz de trabajar r\u00e1pidamente con archivos de texto grandes y realizar b\u00fasquedas de l\u00edneas, podr\u00e1s esclarecer todos los matices del comportamiento de los campos de los paquetes en el flujo RTP.<\/p>\n<p><\/p>\n<p>Si necesitas escuchar la se\u00f1al transmitida por el flujo RTP, entonces debes usar la versi\u00f3n <em>TShark<\/em> con interfaz gr\u00e1fica <em>Wireshark<\/em>. A trav\u00e9s de manipulaciones sencillas con el mouse, puedes escuchar y ver la oscilograma de la se\u00f1al. Pero bajo una condici\u00f3n: si est\u00e1 codificada en formato u-law o a-law.<\/p>\n<p><\/p>\n<p>En la siguiente <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/496874\/\">el art\u00edculo<\/a><\/noindex> haremos juntos un dispositivo de intercomunicaci\u00f3n d\u00faplex. Consigue un par de auriculares y un interlocutor.<\/p>\n<p>Fuente: <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.2 - 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\/es\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-8\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/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\udd47Aprendiendo el motor VoIP Mediastreamer2. Parte 8 | ProHoster","description":"El material del art\u00edculo proviene de mi canal de Zen.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-8","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/87043","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=87043"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/87043\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/87044"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=87043"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=87043"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=87043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}