{"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\/it\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery","title":{"rendered":"Telefono SIP su STM32F7-Discovery","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ciao a tutti.<\/p>\n<p>Tempo fa abbiamo <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/259721\">scritto<\/a><\/noindex> di come siamo riusciti a far funzionare un telefono SIP su STM32F4-Discovery con 1 MB di ROM e 192 KB di RAM) basato su <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\">Embox<\/a><\/noindex>. \u00c8 importante dire che quella versione era minimale e collegava due telefoni direttamente senza server e con trasmissione vocale solo in una direzione. Per questo abbiamo deciso di lanciare un telefono pi\u00f9 completo con chiamate tramite server, trasmissione vocale in entrambe le direzioni, cercando di rimanere il pi\u00f9 leggeri possibile in termini di memoria.<\/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=\"Riproduci video\" 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 \/>\nPer il telefono abbiamo scelto l'applicazione <i>simple_pjsua<\/i> facente parte della libreria PJSIP. Questa \u00e8 un'applicazione minima in grado di registrarsi su un server, ricevere e rispondere alle chiamate. Di seguito troverete subito la descrizione di come avviarla su STM32F7-Discovery.<\/p>\n<h3>Come avviare<\/h3>\n<p><\/p>\n<ol>\n<li> Configuriamo Embox\n<pre><code class=\"bash\">make confload-platform\/pjsip\/stm32f7cube<\/code><\/pre>\n<\/li>\n<li>Nel file conf\/mods.config definiamo l'account SIP necessario.\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>\ndove <i>server<\/i> \u2014 \u00e8 il server SIP (ad esempio, sip.linphone.org), <i>username<\/i> e <i>password<\/i> \u2014 nome utente e password per l'account.\n<\/li>\n<li>Compiliamo Embox con il comando <i>make<\/i>. Abbiamo informazioni sul firmware della scheda nella <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\/wiki\/Running-Embox-on-STM32xxDiscovery\">wiki<\/a><\/noindex> e nel <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/349034\/\">articolo<\/a><\/noindex>.\n<\/li>\n<li>Avviamo nel terminale di Embox il comando \u201csimple_pjsua_imported\u201d\n<pre><code class=\"bash\">\n00:00:12.870    pjsua_acc.c  ....Lo stato della registrazione SIP per l'acc 0 non \u00e8 attivo\n00:00:12.884    pjsua_acc.c  ....sip:alexk2222@sip.linphone.org: registrazione avvenuta con successo, stato=200 (Registrazione riuscita\n00:00:12.911    pjsua_acc.c  ....Timer Keep-alive avviato per acc 0, destinazione: 91.121.209.194:5060, intervallo: 15s\n<\/code><\/pre>\n<p>\n<\/li>\n<li>Infine, rimane da collegare le casse o le cuffie all'uscita audio, e parlare nei due piccoli microfoni MEMS vicino al display. Stiamo chiamando da Linux attraverso l'applicazione simple_pjsua, pjsua. O si pu\u00f2 usare anche qualsiasi altro tipo di linphone.\n<\/li>\n<\/ol>\n<p>\nTutto questo \u00e8 descritto nel nostro <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\/wiki\/AUDIO-on-STM32\">wiki<\/a><\/noindex>.<\/p>\n<h3>Come ci siamo arrivati<\/h3>\n<p>\nQuindi, inizialmente ci siamo posti la questione della scelta della piattaforma hardware. Poich\u00e9 era chiaro che STM32F4-Discovery non sarebbe stato adatto per via della memoria, abbiamo scelto STM32F7-Discovery. Questa ha 1 MB di flash e 256 KB di RAM (+ 64 KB di memoria veloce speciale, che utilizzeremo anch'essa). Non \u00e8 molto per le chiamate attraverso il server, ma abbiamo deciso di provare a rimanere dentro.<\/p>\n<p>Abbiamo sostanzialmente suddiviso il compito in diverse fasi:<\/p>\n<ul>\n<li>Avvio di PJSIP su QEMU. Questo \u00e8 stato utile per il debugging, in pi\u00f9 avevamo gi\u00e0 il supporto per il codec AC97. <\/li>\n<li>Registrazione della voce e riproduzione su QEMU e su STM32. <\/li>\n<li> Portare l'applicazione <i>simple_pjsua<\/i> dal pacchetto PJSIP. Questo consente di registrarsi su un server SIP e di effettuare chiamate. <\/li>\n<li>Avvia il tuo server basato su Asterisk e testalo, per poi provare esterni come sip.linphone.org <\/li>\n<\/ul>\n<p>\nL'audio in Embox funziona tramite Portaudio, che \u00e8 utilizzato anche in PISIP. Su QEMU si sono manifestati i primi problemi: i WAV a 44100 Hz venivano riprodotti bene, mentre a 8000 qualcosa non andava. Si \u00e8 scoperto che il problema era nella configurazione della frequenza: per impostazione predefinita nell'hardware era 44100 e noi non lo cambiavamo a livello software. <\/p>\n<p>Qui vale la pena spiegare un po' come avviene la riproduzione audio. Alla scheda audio pu\u00f2 essere assegnato un puntatore a un blocco di memoria da cui riprodurre o registrare a una frequenza prestabilita. Una volta esaurito il buffer, si genera un'interruzione e l'esecuzione continua con il buffer successivo. Il fatto \u00e8 che questi buffer devono essere riempiti in anticipo, mentre si riproduce quello precedente. Ci imbattemo in questo problema pi\u00f9 avanti su STM32F7. <\/p>\n<p>Successivamente, abbiamo noleggiato un server e installato Asterisk. Poich\u00e9 era necessario fare molte configurazioni e non volevamo parlare al microfono, era necessario implementare un riproduzione e registrazione automatica. A questo scopo, abbiamo modificato simple_pjsua in modo da poter utilizzare file al posto dei dispositivi audio. In PJSIP, questo \u00e8 piuttosto semplice, poich\u00e9 hanno il concetto di porta, che pu\u00f2 essere sia un dispositivo che un file. Queste porte possono essere collegate in modo flessibile ad altre porte. \u00c8 possibile vedere il codice nel nostro pjsip <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/pjsip\">repository<\/a><\/noindex>. Alla fine, lo schema era il seguente. Sul server Asterisk ho creato due account: uno per Linux e uno per Embox. Successivamente, su Embox viene eseguito il comando <i>simple_pjsua_imported<\/i>, Embox si registra sul server, dopodich\u00e9 chiamiamo Embox da Linux. Nel momento della connessione, controlliamo sul server Asterisk che tutte le connessioni siano stabilite e, dopo un po', dovremmo sentire su Embox il suono da Linux, mentre su Linux salviamo il file che viene riprodotto da Embox.<\/p>\n<p>Dopo che \u00e8 stato implementato su QEMU, siamo passati al porting su STM32F7-Discovery. Il primo problema \u00e8 stato che non riuscivamo a stare nei 1 MB di ROM senza l'ottimizzazione del compilatore \"-Os\" per la dimensione dell'immagine. Quindi abbiamo abilitato \"-Os\". Inoltre, abbiamo disabilitato il supporto per C++ tramite un patch, poich\u00e9 \u00e8 necessario solo per pjsua, mentre noi utilizziamo simple_pjsua. <\/p>\n<p>Dopo aver ottimizzato <i>simple_pjsua<\/i>, abbiamo deciso che ora c'erano buone probabilit\u00e0 di farlo funzionare. Ma prima dovevamo capire come registrare e riprodurre la voce. La domanda era: dove registrare? Abbiamo scelto la memoria esterna \u2014 SDRAM (128 MB). Puoi provare anche tu:<\/p>\n<p>Crea un WAV stereo con frequenza 16000 Hz e durata di 10 secondi:<\/p>\n<pre><code class=\"bash\">\nrecord -r 16000 -c 2 -d 10000 -m C0000000\n<\/code><\/pre>\n<p>\nRiproduciamo:<\/p>\n<pre><code class=\"bash\">\nplay -m C0000000\n<\/code><\/pre>\n<p>\nQui si sono presentati due problemi. Il primo riguarda il codec \u2014 si utilizza il WM8994, che ha un concetto di slot, e ce ne sono 4. Di default, se non si configura nulla, durante la riproduzione audio, il suono viene emesso in tutti e quattro gli slot. Pertanto, a una frequenza di 16000 Hz ottenevamo 8000 Hz, mentre per 8000 Hz la riproduzione semplicemente non funzionava. Quando abbiamo selezionato solo gli slot 0 e 2, ha funzionato come previsto. Un altro problema riguardava l'interfaccia audio in STM32Cube, in cui l'uscita audio funziona tramite SAI (Serial Audio Interface) in modo sincrono con l'ingresso audio (non ho approfondito, ma sembra che condividano lo stesso clock e che all'inizializzazione dell'uscita audio venga in qualche modo collegato l'ingresso audio). Questo significa che non possono essere avviati separatamente, quindi abbiamo fatto quanto segue: l'ingresso e l'uscita audio funzionano sempre (compresi gli interrupt generati). Ma quando nulla viene eseguito nel sistema, semplicemente forniamo all'uscita audio un buffer vuoto, e quando inizia la riproduzione, iniziamo a riempirlo normalmente.<\/p>\n<p>In seguito ci siamo imbattuti nel fatto che il suono durante la registrazione della voce era molto debole. Questo avviene perch\u00e9 i microfoni MEMS sulla STM32F7-Discovery funzionano male a frequenze inferiori a 16000 Hz. Quindi impostiamo 16000 Hz, anche se in entrata ci sono solo 8000 Hz. Tuttavia, \u00e8 stato necessario aggiungere una conversione software da una frequenza all'altra.<\/p>\n<p>Successivamente, abbiamo dovuto aumentare le dimensioni dello heap, che si trova nella RAM. Secondo i nostri calcoli, pjsip richiedeva circa 190 KB, mentre a noi ne rimanevano solo circa 100 KB. Qui \u00e8 stata necessaria un po' di memoria esterna \u2014 SDRAM (circa 128 KB).<\/p>\n<p>Dopo tutte queste modifiche, ho visto i primi pacchetti tra Linux e Embox, e ho sentito il suono! Ma il suono era orribile, completamente diverso da quello su QEMU, non si riusciva a distinguere nulla. Allora abbiamo cominciato a chiederci quale potesse essere il problema. Il debug ha mostrato che Embox semplicemente non riusciva a riempire\/sgomberare i buffer audio in tempo. Mentre pjsip gestiva un frame, si verificavano 2 interruzioni di completamento del trattamento dei buffer, il che era troppo. La prima idea per accelerare era l'ottimizzazione del compilatore, ma era gi\u00e0 attivata in PJSIP. La seconda \u2014 il punto fluttuante hardware, di cui abbiamo parlato in <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/418295\">articolo<\/a><\/noindex>. Ma come ha dimostrato la pratica, l'FPU non ha fornito un incremento significativo della velocit\u00e0. Il passo successivo \u00e8 stato impostare le priorit\u00e0 dei thread. In Embox ci sono diverse strategie di pianificazione, e ho attivato quella che supporta le priorit\u00e0, assegnando la massima priorit\u00e0 ai flussi audio. Anche questo non ha aiutato.<\/p>\n<p>L'idea successiva \u00e8 stata che lavoriamo con la memoria esterna e sarebbe utile spostare le strutture a cui si accede molto frequentemente. Ho condotto un'analisi preliminare per capire quando e per cosa <i>simple_pjsua<\/i> viene allocata la memoria. Si \u00e8 scoperto che su 190 Kb, i primi 90 Kb sono allocati per le esigenze interne di PJSIP e a cui si accede non molto frequentemente. Successivamente, durante una chiamata in arrivo, viene chiamata la funzione pjsua_call_answer, in cui vengono allocati i buffer per lavorare con i frame in entrata e in uscita. Ci\u00f2 ha richiesto ulteriori 100 Kb. E a questo punto abbiamo adottato il seguente approccio. Fino al momento della chiamata, i dati sono posizionati nella memoria esterna. Non appena inizia la chiamata, sostituiamo immediatamente il heap con un altro - in RAM. In questo modo, tutti i dati \"caldi\" sono stati trasferiti in una memoria pi\u00f9 veloce e prevedibile.<\/p>\n<p>Alla fine, tutto questo insieme ha permesso di avviare <i>simple_pjsua<\/i> e chiamare attraverso il proprio server. Poi anche tramite altri server come sip.linphone.org.<\/p>\n<h3>Conclusioni<\/h3>\n<p>\nAlla fine siamo riusciti a far partire <i>simple_pjsua<\/i> la trasmissione vocale in entrambe le direzioni tramite il server. Il problema con i 128 Kb di SDRAM aggiuntivi pu\u00f2 essere risolto utilizzando un Cortex-M7 leggermente pi\u00f9 potente (ad esempio, STM32F769NI con 512 Kb di RAM), ma nel frattempo non abbiamo ancora perso la speranza di rimanere nei 256 Kb \ud83d\ude42 Saremmo felici se qualcuno fosse interessato, e ancora meglio - se provasse. Tutti i sorgenti, come al solito, sono nel nostro <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\">repository<\/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.0.1 - 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\/it\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.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\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\/it\/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\udd47Telefono SIP su STM32F7-Discovery | ProHoster","description":"Ciao a tutti. Qualche tempo fa abbiamo scritto su come siamo riusciti a far funzionare un telefono SIP su STM32F4-Discovery con 1 MB.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery","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\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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/37916","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=37916"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/37916\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=37916"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=37916"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=37916"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}