{"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\/pt\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-8","title":{"rendered":"Estudando o motor VoIP Mediastreamer2. Parte 8","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>O conte\u00fado deste artigo foi retirado do meu <noindex><a rel=\"nofollow\" href=\"https:\/\/zen.yandex.ru\/id\/5e3f8e0751f5346faab4fc7a\">canal Zen<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Estudando o 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\">Estrutura do pacote RTP<\/h2>\n<p><\/p>\n<p>Na parte anterior <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/496490\/\">artigo<\/a><\/noindex> usamos <em>TShark<\/em> capturamos pacotes RTP que estavam sendo trocados entre nosso receptor e transmissor. Agora, nesta se\u00e7\u00e3o, pintaremos os elementos do pacote em cores diferentes e falaremos sobre suas fun\u00e7\u00f5es. <\/p>\n<p><\/p>\n<p>Vamos olhar o mesmo pacote, mas agora com campos coloridos e com descri\u00e7\u00f5es explicativas:<br \/>\n<img decoding=\"async\" alt=\"Estudando o 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>Na parte inferior da listagem, os bytes que comp\u00f5em o pacote RTP est\u00e3o coloridos, e ele, por sua vez, \u00e9 a carga \u00fatil do pacote UDP (seu cabe\u00e7alho est\u00e1 demarcado com uma linha preta). Os bytes do cabe\u00e7alho RTP s\u00e3o indicados por fundos coloridos, enquanto o bloco de dados, que cont\u00e9m a carga \u00fatil do pacote RTP, \u00e9 destacado em verde. Os dados est\u00e3o apresentados no formato hexadecimal. Em nosso caso, \u00e9 um sinal de \u00e1udio comprimido pelo u-law (m\u00fa-law), ou seja, uma amostra tem tamanho de 1 byte. Como usamos a taxa de amostragem definida por padr\u00e3o (8000 Hz), com uma frequ\u00eancia de pacotes de 50 Hz, cada pacote RTP deve conter 160 bytes de carga \u00fatil. Isso \u00e9 o que veremos ao contar os bytes na \u00e1rea verde, devendo haver 10 linhas. <\/p>\n<p><\/p>\n<p>De acordo com o padr\u00e3o, a quantidade de dados na carga \u00fatil deve ser m\u00faltipla de quatro, ou em outras palavras, deve conter um n\u00famero inteiro de palavras de quatro bytes. Se acontecer que sua carga \u00fatil n\u00e3o corresponda a esta regra, ent\u00e3o, no final da carga \u00fatil, deve-se adicionar bytes com valores zero e definir o bit Padding (Preenchimento). Este bit est\u00e1 localizado no primeiro byte do cabe\u00e7alho RTP, e \u00e9 colorido em turquesa. Observe que todos os bytes da carga \u00fatil t\u00eam o valor 0xFF \u2014 essa \u00e9 a apar\u00eancia do sil\u00eancio no formato u-law.<\/p>\n<p><\/p>\n<p>O cabe\u00e7alho do pacote RTP consiste em 12 bytes obrigat\u00f3rios, mas em dois casos pode ser mais longo:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Quando o pacote transporta um sinal de \u00e1udio obtido da mistura de sinais de v\u00e1rias fontes (fluxos RTP), uma tabela com a lista de identificadores de fontes, cujas cargas \u00fateis foram utilizadas para criar a carga \u00fatil deste pacote, \u00e9 colocada ap\u00f3s os primeiros 12 bytes do cabe\u00e7alho. Nesse caso, nos quatro bits inferiores do primeiro byte do cabe\u00e7alho (campo <em>N\u00famero de identificadores de fonte contribuinte<\/em>) indica o n\u00famero de fontes. O tamanho do campo \u00e9 de 4 bits, portanto a tabela pode conter at\u00e9 15 identificadores de fontes. Cada um ocupa 4 bytes. Esta tabela \u00e9 utilizada na organiza\u00e7\u00e3o de confer\u00eancias de comunica\u00e7\u00e3o.<\/p>\n<p>\n<\/li>\n<li>\n<p>Quando o cabe\u00e7alho possui uma extens\u00e3o. Nesse caso, o primeiro byte do cabe\u00e7alho define um bit <strong>X<\/strong>. No cabe\u00e7alho estendido, ap\u00f3s a tabela de participantes (se houver), est\u00e1 o cabe\u00e7alho da extens\u00e3o, que tem o tamanho de uma palavra, seguido pelas palavras de extens\u00e3o. A extens\u00e3o \u00e9 um conjunto de bytes que voc\u00ea pode usar para transmitir dados adicionais. O padr\u00e3o n\u00e3o especifica o formato desses dados - pode ser qualquer um. Por exemplo, podem ser algumas configura\u00e7\u00f5es adicionais para o dispositivo que recebe os pacotes RTP. Para algumas aplica\u00e7\u00f5es, contudo, padr\u00f5es de cabe\u00e7alho estendido foram desenvolvidos. Isso foi feito, por exemplo, para meios de comunica\u00e7\u00e3o no padr\u00e3o <em>ED-137 (Padr\u00f5es de Interoperabilidade para Componentes VoIP ATM)<\/em>. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Agora vamos examinar os campos do cabe\u00e7alho mais detalhadamente. Abaixo est\u00e1 uma imagem can\u00f4nica da estrutura do cabe\u00e7alho RTP, que tamb\u00e9m colori com as mesmas cores.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Estudando o 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 da vers\u00e3o do protocolo (a vers\u00e3o atual \u00e9 2);<\/p>\n<p><\/p>\n<p><strong>P<\/strong> \u2014 flag que \u00e9 definida em casos onde o pacote RTP \u00e9 complementado com bytes vazios no final;<\/p>\n<p><\/p>\n<p><strong>X<\/strong> \u2014 flag indicando que o cabe\u00e7alho \u00e9 estendido;<\/p>\n<p><\/p>\n<p><strong>Quando se fala em aumentar a efici\u00eancia energ\u00e9tica, a virtualiza\u00e7\u00e3o possui v\u00e1rias vantagens ineg\u00e1veis. Em primeiro lugar, a consolida\u00e7\u00e3o de servi\u00e7os existentes em um menor n\u00famero de servidores f\u00edsicos permite economizar nos custos de manuten\u00e7\u00e3o do hardware, o que se traduz em uma redu\u00e7\u00e3o nos gastos com refrigera\u00e7\u00e3o, eletricidade e espa\u00e7o ocupado. Em segundo lugar, a virtualiza\u00e7\u00e3o permite otimizar o uso dos recursos de hardware e redistribuir de forma flex\u00edvel<\/strong> \u2014 cont\u00e9m o n\u00famero de identificadores CSRC que seguem o cabe\u00e7alho fixo (ap\u00f3s as palavras 1..3), no gr\u00e1fico a tabela n\u00e3o \u00e9 mostrada;<\/p>\n<p><\/p>\n<p><strong>M<\/strong> \u2014 marcador de in\u00edcio de quadro ou de presen\u00e7a de fala no canal (se um detector de pausas na fala estiver em uso). Se o receptor n\u00e3o contiver um detector de pausas na fala, este bit deve ser continuamente definido;<\/p>\n<p><\/p>\n<p><strong>PTYPE<\/strong> \u2014 indica o formato da carga \u00fatil;<\/p>\n<p><\/p>\n<p><strong>N\u00famero de sequ\u00eancia<\/strong> \u2014 n\u00famero do pacote, utilizado para restaurar a ordem de reprodu\u00e7\u00e3o dos pacotes, j\u00e1 que na realidade os pacotes podem chegar ao receptor em uma ordem diferente de que foram enviados. O valor inicial deve ser aleat\u00f3rio, isso \u00e9 feito para dificultar a quebra do fluxo RTP se a criptografia for aplicada. Este campo tamb\u00e9m permite a detec\u00e7\u00e3o de pacotes perdidos;<\/p>\n<p><\/p>\n<p><strong>Timestamp<\/strong> \u2014 carimbo de tempo. O tempo \u00e9 medido em amostras de sinal, ou seja, se um pacote cont\u00e9m 160 amostras, o carimbo de tempo do pr\u00f3ximo pacote ser\u00e1 maior em 160. O valor inicial do carimbo de tempo deve ser aleat\u00f3rio;<\/p>\n<p><\/p>\n<p><strong>SSRC<\/strong> \u2014 identificador de fonte do pacote, deve ser \u00fanico. \u00c9 melhor gerar aleatoriamente antes de iniciar o fluxo RTP.<\/p>\n<p><\/p>\n<p>Se voc\u00ea estiver desenvolvendo seu transmissor ou receptor de pacotes RTP, precisar\u00e1 analisar seus pacotes v\u00e1rias vezes para aumentar a produtividade. Recomendo dominar o uso de filtragem de pacotes no TShark, pois isso permite capturar apenas os pacotes que s\u00e3o relevantes para voc\u00ea. Em um cen\u00e1rio onde dezenas de dispositivos RTP operam na rede, isso \u00e9 extremamente valioso. Na linha de comando do TShark, os par\u00e2metros de filtragem s\u00e3o definidos pela op\u00e7\u00e3o \"-f\". Usamos essa op\u00e7\u00e3o quando quer\u00edamos capturar pacotes da porta 8010:<br \/>\n<code>-f \"udp port 8010\"<\/code><br \/>\nOs par\u00e2metros de filtragem s\u00e3o, essencialmente, um conjunto de crit\u00e9rios que o pacote \"capturado\" deve atender. A condi\u00e7\u00e3o pode verificar o endere\u00e7o, a porta, o valor de um determinado byte no pacote. As condi\u00e7\u00f5es podem ser combinadas com opera\u00e7\u00f5es l\u00f3gicas \"E\", \"OU\" etc. \u00c9 uma ferramenta muito poderosa.<\/p>\n<p><\/p>\n<p>Se voc\u00ea deseja observar a din\u00e2mica da mudan\u00e7a dos campos nos pacotes, precisar\u00e1 duplicar a sa\u00edda <em>TShark<\/em> para um arquivo, como foi mostrado no artigo anterior, atrav\u00e9s da transmiss\u00e3o da sa\u00edda <em>TShark<\/em> para a entrada <em>tee<\/em>. Em seguida, abrindo o arquivo de log com <em>less, vim<\/em> ou outra ferramenta que consiga lidar rapidamente com grandes arquivos de texto e realizar busca de linhas, voc\u00ea poder\u00e1 descobrir todos os detalhes do comportamento dos campos no fluxo RTP.<\/p>\n<p><\/p>\n<p>Se precisar escutar o sinal transmitido pelo fluxo RTP, voc\u00ea deve utilizar a vers\u00e3o <em>TShark<\/em> com interface visual <em>Wireshark<\/em>. Atrav\u00e9s de manipul\u00e7\u00f5es simples com o mouse, \u00e9 poss\u00edvel escutar e visualizar o oscilograma do sinal. Mas com uma condi\u00e7\u00e3o \u2014 se ele estiver codificado no formato u-law ou a-law.<\/p>\n<p><\/p>\n<p>Na pr\u00f3xima <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/496874\/\">artigo<\/a><\/noindex> vamos criar um dispositivo de conversa\u00e7\u00e3o duplex. Prepare um par de fones de ouvido e um interlocutor.<\/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.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\/pt\/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=\"pt_PT\" \/>\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\/pt\/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\udd47Estudando o motor VoIP Mediastreamer2. Parte 8 | ProHoster","description":"O material do artigo foi retirado do meu canal no Zen.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-8","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/87043","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=87043"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/87043\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/87044"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=87043"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=87043"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=87043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}