{"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\/nl\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery","title":{"rendered":"SIP-telefoon op STM32F7-Discovery","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hallo allemaal.<\/p>\n<p>Een tijd geleden hebben we <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/259721\">over hebben geschreven<\/a><\/noindex> hoe we erin zijn geslaagd om een SIP-telefonie op STM32F4-Discovery met 1 MB ROM en 192 KB RAM op te zetten, gebaseerd op <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\">Embox<\/a><\/noindex>. Hierbij moet gezegd worden dat die versie minimaal was en twee telefoons rechtstreeks met elkaar verbond zonder server, met spraakoverdracht slechts in \u00e9\u00e9n richting. Daarom besloten we een meer volledige telefoon te lanceren met een oproep via de server, spraakoverdracht in beide richtingen, maar met zo min mogelijk geheugengrootte.<\/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=\"Video afspelen\" 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 \/>\nVoor de telefoon hebben we besloten om de applicatie <i>simple_pjsua<\/i> uit de PJSIP-bibliotheek te kiezen. Dit is een minimale applicatie die kan registreren op de server, oproepen kan aannemen en beantwoorden. Hieronder zal ik meteen beschrijven hoe je dit kunt uitvoeren op STM32F7-Discovery.<\/p>\n<h3>Hoe te starten<\/h3>\n<p><\/p>\n<ol>\n<li> Configureren van Embox\n<pre><code class=\"bash\">make confload-platform\/pjsip\/stm32f7cube<\/code><\/pre>\n<\/li>\n<li>In het bestand conf\/mods.config defini\u00ebren we het benodigde SIP-account.\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>\nwaar <i>server<\/i> \u2014 dit is de SIP-server (bijvoorbeeld, sip.linphone.org), <i>username<\/i> en <i>password<\/i> \u2014 de gebruikersnaam en het wachtwoord voor het account.\n<\/li>\n<li>We bouwen Embox met het commando <i>make<\/i>. We hebben informatie over het flashen van de kaart op onze <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\/wiki\/Running-Embox-on-STM32xxDiscovery\">wiki<\/a><\/noindex> en in <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/349034\/\">artikel<\/a><\/noindex>.\n<\/li>\n<li>Voer in de console van Embox het commando \u201csimple_pjsua_imported\u201d uit\n<pre><code class=\"bash\">\n00:00:12.870    pjsua_acc.c  ....SIP outbound status voor acc 0 is niet actief\n00:00:12.884    pjsua_acc.c  ....sip:alexk2222@sip.linphone.org: registratie succesvol, status=200 (Registratie succesvol)\n00:00:12.911    pjsua_acc.c  ....Keep-alive timer gestart voor acc 0, bestemming:91.121.209.194:5060, interval:15s\n<\/code><\/pre>\n<p>\n<\/li>\n<li>Ten slotte, het enige wat we nog moesten doen was de luidsprekers of koptelefoon aansluiten op de audio-uitgang, en praten in twee kleine MEMS-microfoons naast het scherm. We bellen vanaf Linux met de applicatie simple_pjsua, pjsua. Of we kunnen ook een andere zoals linphone gebruiken.\n<\/li>\n<\/ol>\n<p>\nDit is allemaal beschreven op onze <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\/wiki\/AUDIO-on-STM32\">wiki<\/a><\/noindex>.<\/p>\n<h3>Hoe we hier kwamen<\/h3>\n<p>\nDus, in eerste instantie stonden we voor de keuze van de hardwareplatform. Aangezien het duidelijk was dat de STM32F4-Discovery niet geschikt was qua geheugen, werd de STM32F7-Discovery gekozen. Het heeft 1 MB flash en 256 KB RAM (+ 64 KB speciale snelle geheugen die we ook gaan gebruiken). Ook niet veel voor bellen via de server, maar we besloten het te proberen.<\/p>\n<p>We hebben de taak voor onszelf in verschillende fasen verdeeld:<\/p>\n<ul>\n<li>PJSIP draaien op QEMU. Dit was handig voor debugging, plus we hadden daar al ondersteuning voor de AC97-codec. <\/li>\n<li>Opnames en afspelen van geluid op QEMU en op STM32. <\/li>\n<li> Porteren van de applicatie <i>simple_pjsua<\/i> uit de PJSIP-bibliotheek. Het stelt je in staat om je te registreren op een SIP-server en te bellen. <\/li>\n<li>Stel je eigen server op basis van Asterisk in en test het daarop, daarna kun je externe zoals sip.linphone.org proberen. <\/li>\n<\/ul>\n<p>\nGeluid in Embox werkt via Portaudio, dat ook in PISIP wordt gebruikt. Bij QEMU kwamen de eerste problemen naar voren: WAV-bestanden op 44100 Hz speelden goed af, maar op 8000 Hz ging er duidelijk iets mis. Het bleek dat de probleem bij de frequentie-instelling lag \u2014 standaard was deze op 44100 ingesteld in de hardware, en wij veranderden dat programmatisch niet. <\/p>\n<p>Hier moet misschien een korte uitleg komen over hoe het afspelen van geluid eigenlijk werkt. Aan de geluidskaart kan een aanwijzer worden ingesteld naar een stuk geheugen waaruit moet worden afgespeeld of opgenomen op een vooraf ingestelde frequentie. Zodra de buffer op is, wordt er een onderbreking gecre\u00eberd en gaat de uitvoering verder met de volgende buffer. Het probleem is dat deze buffers op tijd moeten worden gevuld terwijl de vorige wordt afgespeeld. Dit probleem zullen we later ook tegenkomen op de STM32F7. <\/p>\n<p>Vervolgens huurden we een server en zetten Asterisk daarop op. Aangezien we veel moesten debuggen en niet veel in de microfoon wilden praten, moest er automatische afspeling en opname gemaakt worden. Hiervoor hebben we simple_pjsua gepatcht zodat we bestanden in plaats van audiokapaciteiten konden gebruiken. In PJSIP is dit vrij eenvoudig, omdat ze een poortconcept hebben, dat zowel een apparaat als een bestand kan zijn. En deze poorten kunnen flexibel aan andere poorten worden gekoppeld. Je kunt de code bekijken in onze pjsip. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/pjsip\">de repository<\/a><\/noindex>Uiteindelijk was het schema als volgt. Op de Asterisk-server heb ik twee accounts aangemaakt \u2014 voor Linux en voor Embox. Daarna wordt het commando uitgevoerd op Embox. <i>simple_pjsua_imported<\/i>, Embox registreert zich op de server, waarna we vanaf Linux naar Embox bellen. Op het moment van verbinding controleren we op de Asterisk-server of de verbinding is opgezet, en na enige tijd zouden we geluid uit Linux in Embox moeten horen, terwijl we het bestand dat uit Embox wordt afgespeeld op Linux opslaan.<\/p>\n<p>Nadat dit werkte op QEMU, gingen we over op de porting naar STM32F7-Discovery. Het eerste probleem was dat we niet in 1 MB ROM pasten zonder de compiler-optimalisatie \u2018-Os\u2019 voor de afbeeldingsgrootte in te schakelen. Daarom zetten we \u2018-Os\u2019 aan. Vervolgens hebben we met een patch de ondersteuning voor C++ uitgeschakeld, aangezien deze alleen nodig is voor pjsua en wij simple_pjsua gebruiken. <\/p>\n<p>Nadat we erin passen <i>simple_pjsua<\/i>, concludeerden we dat de kansen om dit nu te starten er zijn. Maar eerst moesten we met de opname en afspelen van spraak aan de slag. De vraag was: waar moeten we opnemen? We kozen voor extern geheugen \u2014 SDRAM (128 MB). Je kunt het zelf proberen:<\/p>\n<p>Genereert stereo WAV met een frequentie van 16000 Hz en een duur van 10 seconden:<\/p>\n<pre><code class=\"bash\">\nrecord -r 16000 -c 2 -d 10000 -m C0000000\n<\/code><\/pre>\n<p>\nAfspelen:<\/p>\n<pre><code class=\"bash\">\nplay -m C0000000\n<\/code><\/pre>\n<p>\nHier waren twee problemen. Het eerste had te maken met de codec - WM8994 werd gebruikt, en daarin bestaat een concept genaamd slot, met in totaal 4 slots. Standaard, als dit niet wordt ingesteld, vindt audio-afspelen plaats in alle vier de slots. Bij 16000 Hz kregen we dus 8000 Hz, en voor 8000 Hz werkte het afspelen gewoon niet. Toen we alleen slots 0 en 2 selecteerden, werkte het zoals het hoort. Een ander probleem was de audio-interface in STM32Cube, waarin de audio-uitgang werkt via SAI (Serial Audio Interface) synchroon met de audio-ingang (ik heb me niet in de details verdiept, maar het lijkt erop dat ze een gezamenlijke klok delen en bij de initialisatie van de audio-uitgang op de een of andere manier de audio-ingang aan deze klok wordt gekoppeld). Dit betekent dat ze niet afzonderlijk kunnen worden gestart, dus we deden het volgende - zowel de audio-ingang als de audio-uitgang zijn altijd actief (inclusief het genereren van interrupts). Maar wanneer er niets in het systeem wordt afgespeeld, geven we de audio-uitgang gewoon een lege buffer, en wanneer afspelen begint, beginnen we deze op een eerlijke manier te vullen.<\/p>\n<p>Daarna werden we geconfronteerd met het probleem dat het geluid bij het opnemen van de stem erg stil was. Dit gebeurt omdat MEMS-microfoons op de STM32F7-Discovery slecht werken bij frequenties onder de 16000 Hz. Daarom stellen we 16000 Hz in, zelfs als er 8000 Hz binnenkomt. Hiervoor moest echter wel een softwarematige conversie van de ene frequentie naar de andere worden toegevoegd.<\/p>\n<p>Vervolgens moesten we de grootte van de heap in het RAM verhogen. Volgens onze berekeningen had pjsip ongeveer 190 Kb nodig, terwijl we nog maar ongeveer 100 Kb overhad. We moesten een beetje externe geheugen gebruiken - SDRAM (ongeveer 128 Kb).<\/p>\n<p>Na al deze aanpassingen zag ik de eerste pakketten tussen Linux en Embox en hoorde ik geluid! Maar het geluid was vreselijk, helemaal niet zoals op QEMU; niets was te begrijpen. Toen vroegen we ons af wat er aan de hand kon zijn. De debugging toonde aan dat Embox simpelweg niet in staat was om audio-buffers op tijd te vullen\/uit te voeren. Terwijl pjsip \u00e9\u00e9n frame verwerkte, vonden er 2 interrupts plaats over het voltooien van de buffer-verwerking, wat te veel was. Onze eerste gedachte om te versnellen was compilatie-optimalisatie, maar deze was al ingeschakeld in PJSIP. Het tweede punt - de hardware floating point, waarover we hebben gesproken in <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/418295\">artikel<\/a><\/noindex>. Maar zoals de praktijk heeft aangetoond, heeft de FPU geen significante snelheidstoename gegeven. De volgende stap was het stellen van prioriteiten voor de flows. In Embox zijn er verschillende planningsstrategie\u00ebn, en ik heb diegene ingeschakeld die prioriteiten ondersteunt, en de maximale prioriteit toegewezen aan de audiostreams. Dit hielp ook niet.<\/p>\n<p>De volgende gedachte was dat we met extern geheugen werken en het zou goed zijn om de structuren daarheen te verplaatsen, aangezien ze extreem vaak worden aangesproken. Ik heb een voorlopige analyse uitgevoerd van wanneer en waarvoor <i>simple_pjsua<\/i> geheugen wordt toegewezen. Het bleek dat van de 190 Kb de eerste 90 Kb werd toegewezen voor interne behoeften van PJSIP en hier werd niet zo vaak een beroep op gedaan. Vervolgens, tijdens een binnenkomende oproep, wordt de functie pjsua_call_answer aangeroepen, waarin dan de buffers voor het werken met inkomende en uitgaande frames worden toegewezen. Dit was nog eens ongeveer 100 Kb. We hebben het als volgt aangepakt. Voor het moment van de oproep plaatsen we de gegevens in extern geheugen. Zodra de oproep binnenkomt, vervangen we de heap onmiddellijk door een andere - in RAM. Op deze manier zijn alle 'hete' gegevens verplaatst naar sneller en voorspelbaarder geheugen.<\/p>\n<p>Uiteindelijk heeft dit alles samen het mogelijk gemaakt om <i>simple_pjsua<\/i> te bellen via onze server. En daarna ook via andere servers zoals sip.linphone.org.<\/p>\n<h3>Conclusies<\/h3>\n<p>\nUiteindelijk is het gelukt om <i>simple_pjsua<\/i> stemverkeer in beide richtingen via de server te verzenden. Het probleem met de extra 128 Kb SDRAM kan worden opgelost door gebruik te maken van een iets krachtiger Cortex-M7 (bijvoorbeeld de STM32F769NI met 512 Kb RAM), maar tegelijkertijd hebben we de hoop nog niet opgegeven om binnen de 256 Kb te blijven \ud83d\ude42 We verwelkomen iedereen die ge\u00efnteresseerd is en des te beter \u2014 het zelf probeert. Alle bronnen, zoals gewoonlijk, zijn beschikbaar in onze <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\">de repository<\/a><\/noindex>.<br \/>\n<br \/>Bron: <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\/nl\/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=\"nl_NL\" \/>\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\/nl\/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\udd47SIP-telefoon op STM32F7-Discovery | ProHoster","description":"Hallo iedereen. Enige tijd geleden schreven we over hoe we het hebben weten te voor elkaar te krijgen om een SIP-telefoon te laten draaien op de STM32F4-Discovery met 1 Mb.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/37916","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=37916"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/37916\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=37916"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=37916"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=37916"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}