{"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\/sl\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery","title":{"rendered":"SIP telefon na STM32F7-Discovery","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hello everyone.<\/p>\n<p>Nekaj \u010dasa nazaj smo <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/259721\">pisali<\/a><\/noindex> o tem, kako nam je uspelo zagnati SIP telefon na STM32F4-Discovery s 1 MB ROM in 192 KB RAM na osnovi <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\">Embox<\/a><\/noindex>. Treba je povedati, da je bila ta razli\u010dica minimalna in je povezovala dva telefona neposredno brez stre\u017enika ter prena\u0161ala zvok le v eno smer. Zato smo se odlo\u010dili zagnati bolj popoln telefon z zvonjenjem preko stre\u017enika, prenosom glasu v obe smeri, a pri tem ostati v \u010dim manj\u0161em pomnilniku.<\/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=\"Predvajaj 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 \/>\nZa telefon smo se odlo\u010dili za aplikacijo <i>simple_pjsua<\/i> v okviru knji\u017enice PJSIP. To je minimalna aplikacija, ki se zna registrirati na stre\u017eniku, sprejemati in odgovarjati na klice. Spodaj takoj prina\u0161am opis, kako to zagnati na STM32F7-Discovery.<\/p>\n<h3>Kako zagnati<\/h3>\n<p><\/p>\n<ol>\n<li> Konfiguriramo Embox\n<pre><code class=\"bash\">make confload-platform\/pjsip\/stm32f7cube<\/code><\/pre>\n<\/li>\n<li>V datoteki conf\/mods.config dolo\u010dimo \u017eeleni SIP ra\u010dun.\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>\nkjer <i>stre\u017enik<\/i> \u2014 to je SIP stre\u017enik (na primer, sip.linphone.org), <i>username<\/i> in <i>password<\/i> \u2014 uporabni\u0161ko ime in geslo ra\u010duna.\n<\/li>\n<li>Zberemo Embox z ukazom <i>make<\/i>. O programski opremi imamo na <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\/wiki\/Running-Embox-on-STM32xxDiscovery\">wiki<\/a><\/noindex> in v <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/349034\/\">\u010dlanku<\/a><\/noindex>.\n<\/li>\n<li>Zagnamo v konzoli Embox ukaz \u201csimple_pjsua_imported\u201d\n<pre><code class=\"bash\">\n00:00:12.870    pjsua_acc.c  ....SIP outbound status for acc 0 is not active\n00:00:12.884    pjsua_acc.c  ....sip:alexk2222@sip.linphone.org: registration success, status=200 (Registration succes\n00:00:12.911    pjsua_acc.c  ....Keep-alive timer started for acc 0, destination:91.121.209.194:5060, interval:15s\n<\/code><\/pre>\n<p>\n<\/li>\n<li>Nazadnje ostane samo \u0161e, da v audio izhod priklopimo zvo\u010dnike ali slu\u0161alke, ter govorimo v dva majhna MEMS mikrofona ob zaslonu. Kli\u010demo z Linuxa preko aplikacije simple_pjsua, pjsua. Ali pa lahko uporabimo tudi katero koli drugo, na primer linphone.\n<\/li>\n<\/ol>\n<p>\nVse to je opisano na na\u0161em <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\/wiki\/AUDIO-on-STM32\">wiki<\/a><\/noindex>.<\/p>\n<h3>Kako smo do tega pri\u0161li<\/h3>\n<p>\nTorej, sprva je bilo vpra\u0161anje izbire strojne platforme. Ker je bilo jasno, da STM32F4-Discovery ne bo dovolj za pomnilnik, je bila izbrana STM32F7-Discovery. Ima 1 MB flasha in 256 KB RAM (+ 64 posebne hitre pomnilni\u0161ke enote, ki jo bomo tudi uporabili). Tudi to ni ravno veliko za klice preko stre\u017enika, a smo se odlo\u010dili poskusiti stla\u010diti.<\/p>\n<p>Dolo\u010dili smo nalogo in jo razdelili na ve\u010d faz:<\/p>\n<ul>\n<li>Zagon PJSIP na QEMU. To je bilo priro\u010dno za odpravljanje napak, poleg tega smo tam \u017ee imeli podporo za AC97 kodek. <\/li>\n<li>Posnetek in predvajanje glasu na QEMU in na STM32. <\/li>\n<li> Portiranje aplikacije <i>simple_pjsua<\/i> iz okvirja PJSIP. Omogo\u010da registracijo na SIP stre\u017eniku in klicanje. <\/li>\n<li>Postaviti svoj lasten stre\u017enik na osnovi Asteriska in testirati nanj, nato pa poskusiti tudi zunanje, kot je sip.linphone.org. <\/li>\n<\/ul>\n<p>\nZvok v Emboxu deluje prek Portaudio, ki se uporablja tudi v PISIP-u. Na QEMU so se pojavili prvi problemi - WAV datoteke so se dobro predvajale na 44100 Hz, medtem ko na 8000 Hz o\u010ditno ni bilo vse v redu. Izkazalo se je, da je bila te\u017eava v nastavitvi frekvence - privzeto je imela strojna oprema 44100 Hz, kar programersko nismo spremenili. <\/p>\n<p>Tu je verjetno treba nekoliko pojasniti, kako sploh poteka predvajanje zvoka. Zvo\u010dni kartici lahko dolo\u010dimo kazalec na kos pomnilnika, iz katerega je treba predvajati ali snemati pri vnaprej dolo\u010deni frekvenci. Ko se buferski prostor kon\u010da, se spro\u017ei prekinitev, in izvajanje se nadaljuje z naslednjim buffrom. Dejstvo je, da je te buferje potrebno vnaprej napolniti, medtem ko se predvaja prej\u0161nji. S to te\u017eavo se bomo \u0161e sre\u010dali pri STM32F7. <\/p>\n<p>Nato smo najeti stre\u017enik in na njem namestili Asterisk. Ker smo potrebovali veliko odpravljati napake, govorjenje v mikrofon pa ni bilo posebno privla\u010dno, smo morali omogo\u010diti samodejno predvajanje in snemanje. Za to smo popravili simple_pjsua tako, da smo lahko namestili datoteke namesto zvo\u010dnih naprav. V PJSIP to stori precej enostavno, saj imajo koncept vrata, ki je lahko tako naprava kot datoteka. In ta vrata lahko fleksibilno pove\u017eemo z drugimi vrati. Kodo si lahko ogledate v na\u0161em pjsipu. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/pjsip\">repozitoriji<\/a><\/noindex>. Tako je bila shema naslednja. Na stre\u017eniku Asterisk sem ustvaril dva ra\u010duna - za Linux in za Embox. Nato na Emboxu izvedemo ukaz <i>simple_pjsua_imported<\/i>, Embox se registrira na stre\u017eniku, nato pa kli\u010demo na Embox iz Linuxa. Ob vzpostavitvi povezave preverimo na stre\u017eniku Asterisk, da je vse povezano, in po nekem \u010dasu moramo v Emboxu sli\u0161ati zvok iz Linuxa, medtem ko v Linuxu shranimo datoteko, ki se predvaja iz Embox.<\/p>\n<p>Potem ko je to delovalo na QEMU, smo pre\u0161li na prenos na STM32F7-Discovery. Prvi problem - nismo se prilegali v 1 MB ROM brez vklju\u010denega optimizacijskega nastavka kompilatorja \u201c-Os\u201d za velikost slike. Zato smo vklju\u010dili \u201c-Os\u201d. Nadalje smo s popravkom onemogo\u010dili podporo za C++, saj je ta potrebna le za pjsua, mi pa uporabljamo simple_pjsua. <\/p>\n<p>Potem ko smo se stisnili <i>simple_pjsua<\/i>, smo ugotovili, da imamo sedaj mo\u017enosti, da to zagnamo. Ampak najprej smo se morali lotiti snemanja in predvajanja glasu. Vpra\u0161anje - kam snemati? Izbrali smo zunanji pomnilnik - SDRAM (128 MB). Poskusite to sami:<\/p>\n<p>Ustvari stereo WAV s frekvenco 16000 Hz in dol\u017eino 10 sekund:<\/p>\n<pre><code class=\"bash\">\nrecord -r 16000 -c 2 -d 10000 -m C0000000\n<\/code><\/pre>\n<p>\nPredvajamo:<\/p>\n<pre><code class=\"bash\">\nplay -m C0000000\n<\/code><\/pre>\n<p>\nTukaj smo naleteli na dva problema. Prvi je bil z kodirnikom \u2014 uporablja se WM8994, v katerem obstaja koncept slotov, teh slotov pa je \u0161tiri. Tako je privzeto, \u010de tega ne nastavimo, predvajanje zvoka poteka v vseh \u0161tirih slotih. Zato smo pri frekvenci 16000 Hz dobili 8000 Hz, za 8000 Hz pa predvajanje preprosto ni delovalo. Ko smo izbrali le slote 0 in 2, je delovalo, kot bi moralo. Drugi problem je bil avdio vmesnik v STM32Cube, kjer avdio izhod deluje preko SAI (Serial Audio Interface) sinhrono z avdio vhodom (nisem raziskoval podrobnosti, ampak se zdi, da si delita skupno uro in ob inicializaciji avdio izhoda se nekako pove\u017ee avdio vhod). Torej, zagnati jih lo\u010deno ni bilo mogo\u010de, zato smo naredili tole \u2014 avdio vhod in avdio izhod vedno delujeta (vklju\u010dno z generiranjem prekinitev). Toda ko v sistemu ni\u010d ne predvajamo, preprosto ponudimo avdio izhodu prazen pomnilnik, ko pa se za\u010dne predvajanje, ga po\u0161teno za\u010dnemo polniti.<\/p>\n<p>Nato smo se sre\u010dali s tem, da je bil zvok pri snemanju glasu zelo tih. To se dogaja, ker MEMS mikrofoni na STM32F7-Discovery slabo delujejo na frekvencah pod 16000 Hz. Zato nastavimo 16000 Hz, tudi \u010de pride 8000 Hz. Za to pa je bilo potrebno dodati programsko pretvorbo ene frekvence v drugo.<\/p>\n<p>Nato smo morali pove\u010dati velikost kup\u010dka, ki se nahaja v RAM-u. Po na\u0161ih izra\u010dunih je pjsip zahteval okoli 190 kB, mi pa smo imeli le okoli 100 kB. Tukaj smo morali uporabiti nekoliko zunanjega pomnilnika \u2014 SDRAM (pribli\u017eno 128 kB).<\/p>\n<p>Po vseh teh popravkih sem videl prve pakete med Linuxom in Emboxom ter sli\u0161al zvok! Ampak zvok je bil stra\u0161en, povsem druga\u010den kot na QEMU, ni\u010desar ni bilo mogo\u010de razbrati. Takrat smo se za\u010deli spra\u0161evati, kje bi lahko bil problem. Odpravljanje napak je pokazalo, da Embox enostavno ne uspe napolniti\/izprazniti avdio pomnilnikov. Medtem ko pjsip obdeluje en okvir, se zgodijo dve prekinitev o kon\u010danem obdelovanju pomnilnikov, kar je preve\u010d. Prva misel za pospe\u0161itev je bila optimizacija prevajalnika, vendar je bila ta \u017ee vklju\u010dena v PJSIP. Druga je bila strojni program za plavajo\u010do vejico, o tem smo govorili v <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/418295\">\u010dlanku<\/a><\/noindex>. Vendar pa praksa ka\u017ee, da FPU ni prinesel pomembnega pove\u010danja hitrosti. Naslednji korak je bilo dolo\u010danje prioritet tokov. V Emboxu obstajajo razli\u010dne strategije na\u010drtovanja, in vklju\u010dil sem tisto, ki podpira prioritete, ter dodelil najve\u010djo prednost avdio tokovom. Tudi to ni pomagalo.<\/p>\n<p>Naslednja ideja je bila, da delamo z zunanjim pomnilnikom in bi bilo smiselno premakniti strukture, ki jih pogosto uporabljamo, tja. Opravil sem predhodno analizo, kdaj in za kaj <i>simple_pjsua<\/i> se dodeljuje pomnilnik. Izkazalo se je, da od 190 Kb prvih 90 Kb dodeljenih za notranje potrebe PJSIP ni pogosto uporabljeno. Nato med prihajajo\u010dim klicem pride do klica funkcije pjsua_call_answer, v kateri so nato dodeljeni pomnilniki za delo s prihajajo\u010dimi in odhodnimi okviri. To je bilo \u0161e dodatnih pribli\u017eno 100 Kb. In tukaj smo naredili naslednje. Pred klicem podatke shranimo v zunanji pomnilnik. Takoj, ko pride klic \u2014 zamenjamo kup s drugim \u2014 v RAM. Tako so vsi 'vro\u010di' podatki preneseni v hitrej\u0161i in bolj predvidljiv pomnilnik.<\/p>\n<p>Na koncu je vse to skupaj omogo\u010dilo zagon <i>simple_pjsua<\/i> in klicanje preko svojega stre\u017enika. Nato pa tudi preko drugih stre\u017enikov, kot je sip.linphone.org.<\/p>\n<h3>Zaklju\u010dki<\/h3>\n<p>\nNa koncu nam je uspelo zagnati <i>simple_pjsua<\/i> s prenosom glasu v obe smeri preko stre\u017enika. Problem z dodatno porabljenimi 128 Kb SDRAM se lahko re\u0161i z uporabo nekoliko mo\u010dnej\u0161ega Cortex-M7 (na primer, STM32F769NI z 512 Kb RAM), vendar pri tem \u0161e nismo obupali, da bi se uvrstili tudi v 256 Kb \ud83d\ude42 Veseli bomo, \u010de bo kdo zainteresiran, \u0161e bolje \u2014 \u010de bo poskusil. Vse izvorne kode, kot obi\u010dajno, so na na\u0161em <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\">repozitoriji<\/a><\/noindex>.<br \/>\n<br \/>Izvor: <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.5 - 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\/sl\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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\/sl\/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 telefon na STM32F7-Discovery | ProHoster","description":"\u017divjo. Pred nekaj \u010dasa smo pisali o tem, kako nam je uspelo zagnati SIP telefon na STM32F4-Discovery s 1 Mb.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\/sl\/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\/sl\/wp-json\/wp\/v2\/posts\/37916","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=37916"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/37916\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=37916"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=37916"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=37916"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}