{"id":37916,"date":"2019-10-31T22:20:31","date_gmt":"2019-10-31T19:20:31","guid":{"rendered":"https:\/\/prohoster.info\/blog\/sip-telefon-na-stm32f7-discovery\/"},"modified":"2019-10-31T22:20:31","modified_gmt":"2019-10-31T19:20:31","slug":"sip-telefon-na-stm32f7-discovery","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery","title":{"rendered":"Telefone SIP no STM32F7-Discovery","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ol\u00e1 a todos.<\/p>\n<p>H\u00e1 algum tempo, n\u00f3s <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/259721\">reportou<\/a><\/noindex> sobre como conseguimos rodar um telefone SIP no STM32F4-Discovery com 1 MB de ROM e 192 kB de RAM) baseado em <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\">Embox<\/a><\/noindex>. \u00c9 importante mencionar que aquela vers\u00e3o era m\u00ednima e conectava dois telefones diretamente sem servidor e com a transmiss\u00e3o de voz apenas em uma dire\u00e7\u00e3o. Por isso, decidimos lan\u00e7ar um telefone mais completo, com chamadas atrav\u00e9s de um servidor, transmiss\u00e3o de voz em ambas as dire\u00e7\u00f5es, mas mantendo o tamanho da mem\u00f3ria o menor poss\u00edvel.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"W6wuEIZJf8o\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/W6wuEIZJf8o\/hqdefault.jpg\" alt=\"Por que no hosting comum a administra\u00e7\u00e3o do PrestaShop \u00e9 lenta, e no seu n\u00e3o \u00e9?\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nPara o telefone, decidimos escolher o aplicativo <i>simple_pjsua<\/i> parte da biblioteca PJSIP. Este \u00e9 um aplicativo m\u00ednimo que pode se registrar no servidor, receber e realizar chamadas. Abaixo, j\u00e1 irei apresentar uma descri\u00e7\u00e3o de como execut\u00e1-lo no STM32F7-Discovery.<\/p>\n<h3>Como executar<\/h3>\n<p><\/p>\n<ol>\n<li> Configurando o Embox\n<pre><code class=\"bash\">make confload-platform\/pjsip\/stm32f7cube<\/code><\/pre>\n<\/li>\n<li>No arquivo conf\/mods.config, definimos a conta SIP necess\u00e1ria.\n<pre><code class=\"bash\">\ninclude platform.pjsip.cmd.simple_pjsua_imported(\n    sip_domain=\"server\", \n    sip_user=\"username\",\n    sip_passwd=\"password\")\n<\/code><\/pre>\n<p>\nonde <i>servidor<\/i> \u2014 este \u00e9 o servidor SIP (por exemplo, sip.linphone.org), <i>nome de usu\u00e1rio<\/i> e <i>senha<\/i> \u2014 o nome de usu\u00e1rio e a senha da conta.\n<\/li>\n<li>Compilamos o Embox com o comando <i>make<\/i>. Temos informa\u00e7\u00f5es sobre a programa\u00e7\u00e3o da placa em <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\/wiki\/Running-Embox-on-STM32xxDiscovery\">wiki<\/a><\/noindex> e no <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/349034\/\">artigo<\/a><\/noindex>.\n<\/li>\n<li>Executamos no console do Embox o comando \u201csimple_pjsua_imported\u201d\n<pre><code class=\"bash\">\n00:00:12.870    pjsua_acc.c  ....O status de sa\u00edda SIP para acc 0 n\u00e3o est\u00e1 ativo\n00:00:12.884    pjsua_acc.c  ....sip:alexk2222@sip.linphone.org: registro bem-sucedido, status=200 (Registro bem-sucedido)\n00:00:12.911    pjsua_acc.c  ....Temporizador de keep-alive iniciado para acc 0, destino:91.121.209.194:5060, intervalo:15s\n<\/code><\/pre>\n<p>\n<\/li>\n<li>Por fim, basta conectar alto-falantes ou fones de ouvido \u00e0 sa\u00edda de \u00e1udio e falar em dois pequenos microfones MEMS pr\u00f3ximos ao display. Chamamos do Linux atrav\u00e9s do aplicativo simple_pjsua, pjsua. Ou voc\u00ea pode usar qualquer outro, como linphone.\n<\/li>\n<\/ol>\n<p>\nTudo isso est\u00e1 descrito em nosso <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\/wiki\/AUDIO-on-STM32\">wiki<\/a><\/noindex>.<\/p>\n<h3>Como chegamos a isso<\/h3>\n<p>\nEnt\u00e3o, inicialmente surgiu a quest\u00e3o da escolha da plataforma de hardware. Como ficou claro que o STM32F4-Discovery n\u00e3o seria suficiente em termos de mem\u00f3ria, escolhemos o STM32F7-Discovery. Ele tem 1 MB de flash e 256 kB de RAM (+ 64 kB de mem\u00f3ria r\u00e1pida especial, que tamb\u00e9m iremos usar). Tamb\u00e9m n\u00e3o \u00e9 muito para chamadas atrav\u00e9s de servidor, mas decidimos tentar.<\/p>\n<p>Condicionalmente, dividimos a tarefa em v\u00e1rias etapas:<\/p>\n<ul>\n<li>Execu\u00e7\u00e3o do PJSIP no QEMU. Isso foi conveniente para depura\u00e7\u00e3o, al\u00e9m de j\u00e1 termos l\u00e1 suporte para o codec AC97. <\/li>\n<li>Grava\u00e7\u00e3o de voz e reprodu\u00e7\u00e3o no QEMU e no STM32. <\/li>\n<li> Portabilidade do aplicativo <i>simple_pjsua<\/i> da biblioteca PJSIP. Ele permite registrar-se no servidor SIP e fazer chamadas. <\/li>\n<li>Implantar seu pr\u00f3prio servidor baseado em Asterisk e test\u00e1-lo, ap\u00f3s o que tentaremos externos, como sip.linphone.org. <\/li>\n<\/ul>\n<p>\nO som no Embox funciona atrav\u00e9s do Portaudio, que tamb\u00e9m \u00e9 utilizado no PISIP. No QEMU, surgiram os primeiros problemas \u2014 os arquivos WAV de 44100 Hz eram reproduzidos corretamente, mas em 8000 algo definitivamente n\u00e3o estava certo. Descobriu-se que o problema estava na configura\u00e7\u00e3o da frequ\u00eancia \u2014 por padr\u00e3o, no hardware, era 44100, e isso n\u00e3o alteramos programaticamente. <\/p>\n<p>Aqui, talvez seja importante esclarecer como a reprodu\u00e7\u00e3o de som ocorre. Um ponteiro de mem\u00f3ria pode ser definido para a placa de som, a partir do qual deve ser reproduzido ou gravado em uma frequ\u00eancia previamente definida. Ap\u00f3s o preenchimento do buffer, ocorre uma interrup\u00e7\u00e3o e a execu\u00e7\u00e3o continua com o pr\u00f3ximo buffer. O desafio \u00e9 que esses buffers precisam ser preenchidos antecipadamente enquanto o anterior ainda est\u00e1 sendo reproduzido. Enfrentaremos esse problema mais adiante no STM32F7. <\/p>\n<p>Em seguida, alugamos um servidor e instalamos o Asterisk nele. Como era necess\u00e1rio bastante depura\u00e7\u00e3o e n\u00e3o quer\u00edamos falar muito no microfone, precis\u00e1vamos implementar a reprodu\u00e7\u00e3o e grava\u00e7\u00e3o autom\u00e1ticas. Para isso, modificamos o simple_pjsua para permitir que arquivos fossem utilizados em vez de dispositivos de \u00e1udio. No PJSIP, isso \u00e9 bastante simples, pois h\u00e1 o conceito de porta, que pode ser tanto um dispositivo quanto um arquivo. E essas portas podem ser conectadas de forma flex\u00edvel a outras portas. O c\u00f3digo pode ser consultado em nosso pjsip. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/pjsip\">reposit\u00f3rio<\/a><\/noindex>Assim, o esquema era o seguinte. No servidor Asterisk, criei duas contas \u2014 uma para Linux e outra para Embox. Em seguida, no Embox, a seguinte comando \u00e9 executado <i>simple_pjsua_imported<\/i>, o Embox se registra no servidor, ap\u00f3s o qual fazemos uma chamada do Linux para o Embox. No momento da conex\u00e3o, verificamos no servidor Asterisk se toda a conex\u00e3o foi estabelecida, e ap\u00f3s algum tempo devemos ouvir o som vindo do Linux no Embox, enquanto no Linux salvamos o arquivo que est\u00e1 sendo reproduzido a partir do Embox.<\/p>\n<p>Ap\u00f3s fazer isso funcionar no QEMU, passamos para a portabilidade no STM32F7-Discovery. O primeiro problema foi que n\u00e3o cab\u00edamos em 1 MB de ROM sem habilitar a otimiza\u00e7\u00e3o do compilador '-Os' para o tamanho da imagem. Portanto, habilitamos '-Os'. Em seguida, desativamos o suporte a C++ atrav\u00e9s de patch, pois isso \u00e9 necess\u00e1rio apenas para pjsua, e estamos usando o simple_pjsua. <\/p>\n<p>Depois que conseguimos ajustar <i>simple_pjsua<\/i>, decidimos que agora havia chances de que isso funcionasse. Mas primeiro precis\u00e1vamos resolver a grava\u00e7\u00e3o e reprodu\u00e7\u00e3o da voz. A pergunta era \u2014 para onde gravar? Escolhemos a mem\u00f3ria externa \u2014 SDRAM (128 MB). Voc\u00ea pode tentar isso voc\u00ea mesmo:<\/p>\n<p>Criar\u00e1 um WAV est\u00e9reo a 16000 Hz e com dura\u00e7\u00e3o de 10 segundos:<\/p>\n<pre><code class=\"bash\">\nrecord -r 16000 -c 2 -d 10000 -m C0000000\n<\/code><\/pre>\n<p>\nReproduzindo:<\/p>\n<pre><code class=\"bash\">\nplay -m C0000000\n<\/code><\/pre>\n<p>\nAqui surgiram dois problemas. O primeiro era com o codec \u2014 usa-se WM8994, que possui um conceito chamado slot, e existem 4 desses slots. Por padr\u00e3o, se n\u00e3o for configurado, ao reproduzir \u00e1udio, a reprodu\u00e7\u00e3o ocorre em todos os quatro slots. Portanto, \u00e0 frequ\u00eancia de 16000 Hz, est\u00e1vamos obtendo 8000 Hz, e para 8000 Hz a reprodu\u00e7\u00e3o simplesmente n\u00e3o funcionava. Quando escolhemos apenas os slots 0 e 2, funcionou como deveria. Outro problema foi a interface de \u00e1udio no STM32Cube, onde a sa\u00edda de \u00e1udio funciona atrav\u00e9s de SAI (Serial Audio Interface) de forma s\u00edncrona com a entrada de \u00e1udio (n\u00e3o me aprofundei nos detalhes, mas parece que eles compartilham um clock comum, e durante a inicializa\u00e7\u00e3o da sa\u00edda de \u00e1udio, de alguma forma est\u00e1 atrelada \u00e0 entrada de \u00e1udio). Ou seja, n\u00e3o \u00e9 poss\u00edvel inici\u00e1-los separadamente, portanto fizemos o seguinte \u2014 a entrada e a sa\u00edda de \u00e1udio sempre est\u00e3o funcionando (incluindo a gera\u00e7\u00e3o de interrup\u00e7\u00f5es). Mas quando nada est\u00e1 sendo reproduzido no sistema, simplesmente alimentamos a sa\u00edda de \u00e1udio com um buffer vazio, e quando a reprodu\u00e7\u00e3o \u00e9 iniciada, come\u00e7amos a preench\u00ea-lo adequadamente.<\/p>\n<p>Em seguida, encontramos o problema de que o som ao gravar a voz estava muito baixo. Isso ocorre porque os microfones MEMS no STM32F7-Discovery n\u00e3o funcionam bem em frequ\u00eancias abaixo de 16000 Hz. Portanto, configuramos para 16000 Hz, mesmo que a entrada seja 8000 Hz. Para isso, foi necess\u00e1rio adicionar uma convers\u00e3o de frequ\u00eancia no software.<\/p>\n<p>Depois, foi necess\u00e1rio aumentar o tamanho da pilha, que est\u00e1 localizada na RAM. Segundo nossas contas, o pjsip exigia cerca de 190 KB, enquanto n\u00f3s t\u00ednhamos apenas cerca de 100 KB restantes. Ent\u00e3o, foi preciso utilizar um pouco de mem\u00f3ria externa \u2014 SDRAM (cerca de 128 KB).<\/p>\n<p>Ap\u00f3s todas essas altera\u00e7\u00f5es, vi os primeiros pacotes entre Linux e Embox e ouvi o som! Mas o som estava horr\u00edvel, nada parecido com o do QEMU, nada podia ser compreendido. Ent\u00e3o, questionamos qual poderia ser o problema. A depura\u00e7\u00e3o mostrou que o Embox simplesmente n\u00e3o estava conseguindo preencher\/descarregar os buffers de \u00e1udio a tempo. Enquanto o pjsip processava um quadro, acabavam ocorrendo 2 interrup\u00e7\u00f5es ao finalizar o processamento dos buffers, o que era excessivo. O primeiro pensamento para acelerar foi a otimiza\u00e7\u00e3o do compilador, mas essa j\u00e1 estava ativada no PJSIP. O segundo \u2014 ponto flutuante de hardware, sobre o qual falamos em <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/418295\">artigo<\/a><\/noindex>. Mas como a pr\u00e1tica mostrou, o FPU n\u00e3o proporcionou um ganho significativo de velocidade. O pr\u00f3ximo passo foi a defini\u00e7\u00e3o de prioridades de threads. No Embox, existem diferentes estrat\u00e9gias de escalonamento, e eu ativei a que suporta prioridades, dando ao fluxo de \u00e1udio a maior prioridade. Isso tamb\u00e9m n\u00e3o ajudou.<\/p>\n<p>A pr\u00f3xima ideia foi que est\u00e1vamos lidando com mem\u00f3ria externa e seria bom mover para l\u00e1 as estruturas que s\u00e3o acessadas com bastante frequ\u00eancia. Fiz uma an\u00e1lise preliminar de quando e para que <i>simple_pjsua<\/i> a mem\u00f3ria \u00e9 alocada. Verificou-se que dos 190 Kb, os primeiros 90 Kb s\u00e3o alocados para necessidades internas do PJSIP e s\u00e3o acessados com pouca frequ\u00eancia. Durante uma chamada recebida, a fun\u00e7\u00e3o pjsua_call_answer \u00e9 chamada, na qual os buffers para trabalhar com os quadros de entrada e sa\u00edda s\u00e3o alocados. Isso consumiu mais cerca de 100 Kb. E aqui fizemos o seguinte. At\u00e9 o momento da chamada, as informa\u00e7\u00f5es s\u00e3o armazenadas na mem\u00f3ria externa. Assim que a chamada ocorre, mudamos imediatamente a heap para outra \u2014 na RAM. Dessa forma, todos os dados 'quentes' foram movidos para uma mem\u00f3ria mais r\u00e1pida e previs\u00edvel.<\/p>\n<p>Como resultado, tudo isso permitiu iniciar <i>simple_pjsua<\/i> e fazer chamadas atrav\u00e9s do nosso servidor. E depois, tamb\u00e9m atrav\u00e9s de outros servidores, como sip.linphone.org.<\/p>\n<h3>Como resultado, obtemos um servi\u00e7o de \"monitoramento como servi\u00e7o\", automatizado na linha de produ\u00e7\u00e3o de integra\u00e7\u00e3o cont\u00ednua. O desenvolvedor ou testador precisa apenas definir a lista de m\u00e9tricas em um arquivo JSON, e tudo o mais acontece automaticamente. Obtemos um controle de qualidade transparente dos lan\u00e7amentos: todas as notifica\u00e7\u00f5es sobre desempenho, consumo de recursos ou regress\u00f5es arquitet\u00f4nicas.<\/h3>\n<p>\nNo final, conseguimos iniciar <i>simple_pjsua<\/i> com a transmiss\u00e3o de voz em ambas as dire\u00e7\u00f5es atrav\u00e9s do servidor. O problema com os 128 Kb SDRAM gastos a mais pode ser resolvido utilizando um Cortex-M7 um pouco mais potente (por exemplo, STM32F769NI com 512 Kb de RAM), mas ainda assim n\u00e3o desistimos da ideia de conseguir ajustar tudo dentro de 256 Kb \ud83d\ude42 Ficaremos felizes se algu\u00e9m se interessar, e ainda melhor \u2014 testar. Todos os fontes, como de costume, est\u00e3o no nosso <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\">reposit\u00f3rio<\/a><\/noindex>.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/embox\/blog\/431134\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u043f\u0438\u0441\u0430\u043b\u0438 \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u043d\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c SIP \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043d\u0430 STM32F4-Discovery c 1 \u041c\u0431 ROM \u0438 192 \u041a\u0431 RAM) \u043d\u0430 \u0431\u0430\u0437\u0435 Embox. \u0422\u0443\u0442 \u043d\u0430\u0434\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u0431\u044b\u043b\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u043b\u0430 \u0434\u0432\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0431\u0435\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0433\u043e\u043b\u043e\u0441\u0430 \u043b\u0438\u0448\u044c \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37916","post","type-post","status-publish","format-standard","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=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u043f\u0438\u0441\u0430\u043b\u0438 \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u043d\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c SIP \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043d\u0430 STM32F4-Discovery c 1 \u041c\u0431.\" \/>\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\/sip-telefon-na-stm32f7-discovery\" \/>\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\udd47SIP \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043d\u0430 STM32F7-Discovery | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u043f\u0438\u0441\u0430\u043b\u0438 \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u043d\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c SIP \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043d\u0430 STM32F4-Discovery c 1 \u041c\u0431.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery\" \/>\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=\"2019-10-31T19:20:31+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:20:31+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\udd47Telefone SIP no STM32F7-Discovery | ProHoster","description":"Ol\u00e1 a todos. H\u00e1 algum tempo, escrevemos sobre como conseguimos rodar um telefone SIP no STM32F4-Discovery com 1 Mb.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery","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\udd47SIP \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043d\u0430 STM32F7-Discovery | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u043f\u0438\u0441\u0430\u043b\u0438 \u043e \u0442\u043e\u043c \u043a\u0430\u043a \u043d\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c SIP \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043d\u0430 STM32F4-Discovery c 1 \u041c\u0431.","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery","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":"2019-10-31T19:20:31+00:00","article:modified_time":"2019-10-31T19:20:31+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37916","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":"2026-01-23 19:45:21","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:18:22","updated":"2026-01-23 19:45:21","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\/37916","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=37916"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/37916\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=37916"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=37916"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=37916"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}