{"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\/fr\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery","title":{"rendered":"T\u00e9l\u00e9phone SIP sur STM32F7-Discovery","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Bonjour \u00e0 tous.<\/p>\n<p>Il y a quelque temps, nous <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/259721\">ont \u00e9crit<\/a><\/noindex> avons r\u00e9ussi \u00e0 faire fonctionner un t\u00e9l\u00e9phone SIP sur STM32F4-Discovery avec 1 Mo de ROM et 192 Ko de RAM) bas\u00e9 sur <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\">Embox<\/a><\/noindex>. Il faut dire que cette version \u00e9tait minimale et connectait deux t\u00e9l\u00e9phones directement sans serveur, et le transfert de voix n'\u00e9tait qu'unidirectionnel. Nous avons donc d\u00e9cid\u00e9 de lancer un t\u00e9l\u00e9phone plus complet, capable de passer des appels via un serveur, avec une transmission de voix dans les deux sens, tout en optimisant l'utilisation de la m\u00e9moire.<\/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=\"Lire la vid\u00e9o\" 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 \/>\nPour le t\u00e9l\u00e9phone, nous avons choisi l'application <i>simple_pjsua<\/i> faisant partie de la biblioth\u00e8que PJSIP. C'est une application minimale qui peut s'enregistrer sur un serveur, recevoir et r\u00e9pondre \u00e0 des appels. Ci-dessous, je vais tout de suite d\u00e9crire comment la lancer sur STM32F7-Discovery.<\/p>\n<h3>Comment d\u00e9marrer<\/h3>\n<p><\/p>\n<ol>\n<li> Configurer Embox\n<pre><code class=\"bash\">make confload-platform\/pjsip\/stm32f7cube<\/code><\/pre>\n<\/li>\n<li>Dans le fichier conf\/mods.config, d\u00e9finissez le compte SIP n\u00e9cessaire.\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>\no\u00f9 <i>serveur<\/i> \u2014 c'est le serveur SIP (par exemple, sip.linphone.org), <i>username<\/i> et <i>password<\/i> \u2014 le nom d'utilisateur et le mot de passe du compte.\n<\/li>\n<li>Nous construisons Embox avec la commande <i>make<\/i>. Nous avons des informations sur le flashage de la carte sur <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\/wiki\/Running-Embox-on-STM32xxDiscovery\">wiki<\/a><\/noindex> et dans <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/349034\/\">article<\/a><\/noindex>.\n<\/li>\n<li>Lancez la commande Embox \u201csimple_pjsua_imported\u201d dans la console\n<pre><code class=\"bash\">\n00:00:12.870    pjsua_acc.c  ....Le statut sortant SIP pour acc 0 n'est pas actif\n00:00:12.884    pjsua_acc.c  ....sip:alexk2222@sip.linphone.org: enregistrement r\u00e9ussi, statut=200 (Enregistrement r\u00e9ussi\n00:00:12.911    pjsua_acc.c  ....Le minuteur de maintien actif a \u00e9t\u00e9 d\u00e9marr\u00e9 pour acc 0, destination:91.121.209.194:5060, intervalle:15s\n<\/code><\/pre>\n<p>\n<\/li>\n<li>Enfin, il reste \u00e0 brancher des haut-parleurs ou des \u00e9couteurs \u00e0 la sortie audio, et \u00e0 parler dans deux petits microphones MEMS pr\u00e8s de l'\u00e9cran. Appelons depuis Linux via l'application simple_pjsua, pjsua. Ou nous pourrions utiliser n'importe quelle autre application comme linphone.\n<\/li>\n<\/ol>\n<p>\nTout cela est d\u00e9crit sur notre <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\/wiki\/AUDIO-on-STM32\">wiki<\/a><\/noindex>.<\/p>\n<h3>Comment nous y sommes arriv\u00e9s<\/h3>\n<p>\nAlors, la question initiale \u00e9tait de choisir une plateforme mat\u00e9rielle. \u00c9tant donn\u00e9 que nous savions que le STM32F4-Discovery ne convenait pas en termes de m\u00e9moire, nous avons opt\u00e9 pour le STM32F7-Discovery. Celui-ci dispose de 1 Mo de flash et de 256 Ko de RAM (+ 64 Ko de m\u00e9moire rapide sp\u00e9ciale, que nous allons \u00e9galement utiliser). Ce n'est pas beaucoup pour des appels via un serveur, mais nous avons d\u00e9cid\u00e9 de tenter le coup.<\/p>\n<p>Nous avons conditionnellement divis\u00e9 la t\u00e2che en plusieurs \u00e9tapes :<\/p>\n<ul>\n<li>D\u00e9marrer PJSIP sur QEMU. Cela \u00e9tait pratique pour le d\u00e9bogage, plus nous avions d\u00e9j\u00e0 un support pour le codec AC97. <\/li>\n<li>Enregistrement de la voix et reproduction sur QEMU et sur STM32. <\/li>\n<li> Portage de l'application <i>simple_pjsua<\/i> de la biblioth\u00e8que PJSIP. Elle permet de s'enregistrer sur un serveur SIP et de passer des appels. <\/li>\n<li>D\u00e9ployer votre propre serveur bas\u00e9 sur Asterisk et tester dessus, avant d'essayer des externes, comme sip.linphone.org. <\/li>\n<\/ul>\n<p>\nLe son dans Embox fonctionne via Portaudio, qui est \u00e9galement utilis\u00e9 dans PISIP. Quelques probl\u00e8mes sont apparus sur QEMU \u2014 les fichiers WAV \u00e0 44100 Hz se sont bien jou\u00e9s, mais \u00e0 8000, quelque chose ne fonctionnait clairement pas. Il s'est av\u00e9r\u00e9 que le probl\u00e8me venait de la configuration de la fr\u00e9quence \u2014 par d\u00e9faut, dans le mat\u00e9riel, elle \u00e9tait \u00e0 44100, et cela n'a pas \u00e9t\u00e9 chang\u00e9 par logiciel. <\/p>\n<p>Il convient peut-\u00eatre d'expliquer un peu comment se d\u00e9roule la lecture du son. Une carte audio peut se voir attribuer un pointeur vers une zone m\u00e9moire, \u00e0 partir de laquelle il faut lire ou enregistrer \u00e0 une fr\u00e9quence pr\u00e9\u00e9tablie. Une fois que le tampon est \u00e9puis\u00e9, une interruption est g\u00e9n\u00e9r\u00e9e, et l'ex\u00e9cution reprend avec le tampon suivant. Le fait est qu'il faut remplir ces tampons \u00e0 l'avance, tant que le pr\u00e9c\u00e9dent est en cours de lecture. Nous allons rencontrer ce probl\u00e8me plus tard sur STM32F7. <\/p>\n<p>Ensuite, nous avons lou\u00e9 un serveur et d\u00e9ploy\u00e9 Asterisk dessus. Comme il fallait d\u00e9boguer beaucoup et que nous ne souhaitions pas parler dans le microphone, nous devions mettre en place une lecture et un enregistrement automatiques. Pour cela, nous avons patch\u00e9 simple_pjsua afin de pouvoir ins\u00e9rer des fichiers \u00e0 la place des p\u00e9riph\u00e9riques audio. Dans PJSIP, cela se fait assez simplement, car ils ont le concept de port, qui peut \u00eatre \u00e0 la fois un p\u00e9riph\u00e9rique et un fichier. Et ces ports peuvent \u00eatre connect\u00e9s de mani\u00e8re flexible \u00e0 d'autres ports. Vous pouvez consulter le code dans notre pjsip. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/pjsip\">d\u00e9p\u00f4ts<\/a><\/noindex>. En fin de compte, le sch\u00e9ma \u00e9tait le suivant. Sur le serveur Asterisk, j'ai cr\u00e9\u00e9 deux comptes \u2014 un pour Linux et un pour Embox. Ensuite, sur Embox, la commande est ex\u00e9cut\u00e9e <i>simple_pjsua_imported<\/i>, Embox s'enregistre sur le serveur, puis nous appelons Embox depuis Linux. Au moment de la connexion, nous v\u00e9rifions sur le serveur Asterisk que toute la connexion est \u00e9tablie, et apr\u00e8s un certain temps, nous devrions entendre le son provenant de Linux dans Embox, et sur Linux, nous sauvegardons le fichier qui est jou\u00e9 depuis Embox.<\/p>\n<p>Une fois que cela a fonctionn\u00e9 sur QEMU, nous sommes pass\u00e9s \u00e0 la portabilit\u00e9 sur STM32F7-Discovery. Le premier probl\u00e8me \u2014 nous ne tenions pas dans 1 Mo de ROM sans activer l'optimisation du compilateur \u201c-Os\u201d pour r\u00e9duire la taille de l'image. Donc, nous avons activ\u00e9 \u201c-Os\u201d. Ensuite, nous avons d\u00e9sactiv\u00e9 le support de C++ par patch, car cela n'est n\u00e9cessaire que pour pjsua, et nous utilisons simple_pjsua. <\/p>\n<p>Une fois que nous avons r\u00e9ussi \u00e0 int\u00e9grer <i>simple_pjsua<\/i>, nous avons d\u00e9cid\u00e9 que les chances de le lancer \u00e9taient d\u00e9sormais r\u00e9elles. Mais d'abord, il fallait se pencher sur l'enregistrement et la lecture de la voix. La question se posait \u2014 o\u00f9 enregistrer ? Nous avons choisi la m\u00e9moire externe \u2014 SDRAM (128 Mo). Vous pouvez essayer vous-m\u00eame :<\/p>\n<p>Cr\u00e9era un WAV st\u00e9r\u00e9o \u00e0 16000 Hz et d'une dur\u00e9e de 10 secondes :<\/p>\n<pre><code class=\"bash\">\nrecord -r 16000 -c 2 -d 10000 -m C0000000\n<\/code><\/pre>\n<p>\nLecture :<\/p>\n<pre><code class=\"bash\">\nplay -m C0000000\n<\/code><\/pre>\n<p>\nIl y avait deux probl\u00e8mes. Le premier concernait le codec \u2014 le WM8994, qui a un concept de slot, et il y a quatre slots. Par d\u00e9faut, si ce n'est pas configur\u00e9, lors de la lecture audio, cela se produit dans les quatre slots. Donc, \u00e0 16000 Hz, nous obtenions 8000 Hz, et pour 8000 Hz, la lecture ne fonctionnait tout simplement pas. Quand nous avons choisi uniquement les slots 0 et 2, cela a bien fonctionn\u00e9. Un autre probl\u00e8me \u00e9tait l'interface audio dans STM32Cube, o\u00f9 la sortie audio fonctionne via SAI (Serial Audio Interface) synchronis\u00e9e avec l'entr\u00e9e audio (je n'ai pas approfondi les d\u00e9tails, mais il semble qu'ils partagent un horloge commune et lors de l'initialisation de la sortie audio, l'entr\u00e9e audio s'y attache d'une certaine mani\u00e8re). Donc, ils ne peuvent pas \u00eatre lanc\u00e9s s\u00e9par\u00e9ment, c'est pourquoi nous avons fait ce qui suit \u2014 l'entr\u00e9e audio et la sortie audio fonctionnent toujours (y compris la g\u00e9n\u00e9ration d'interruptions). Mais quand rien n'est jou\u00e9 dans le syst\u00e8me, nous fournissons simplement un tampon vide \u00e0 la sortie audio, et quand la lecture d\u00e9marre, nous commen\u00e7ons \u00e0 le remplir correctement.<\/p>\n<p>Ensuite, nous avons rencontr\u00e9 le probl\u00e8me que le son lors de l'enregistrement de la voix \u00e9tait tr\u00e8s faible. Cela se produit parce que les microphones MEMS sur l'STM32F7-Discovery fonctionnent mal \u00e0 des fr\u00e9quences inf\u00e9rieures \u00e0 16000 Hz. Nous r\u00e9glons donc \u00e0 16000 Hz, m\u00eame s'il arrive \u00e0 8000 Hz. Pour cela, il a fallu ajouter une conversion logicielle d'une fr\u00e9quence \u00e0 une autre.<\/p>\n<p>Nous avons ensuite d\u00fb augmenter la taille du tas, qui se trouve dans la RAM. Selon nos calculs, pjsip n\u00e9cessitait environ 190 Ko, tandis que nous n'avions plus qu'environ 100 Ko disponibles. Nous avons donc d\u00fb utiliser un peu de m\u00e9moire externe \u2014 SDRAM (environ 128 Ko).<\/p>\n<p>Apr\u00e8s toutes ces modifications, j'ai vu les premiers paquets entre Linux et Embox, et j'ai entendu du son ! Mais le son \u00e9tait horrible, rien \u00e0 voir avec QEMU, et rien n'\u00e9tait compr\u00e9hensible. Nous nous sommes donc demand\u00e9 quelle pouvait \u00eatre la cause. Le d\u00e9bogage a montr\u00e9 qu'Embox avait simplement du mal \u00e0 remplir\/vider les tampons audio. Pendant que pjsip traitait un cadre, deux interruptions de fin de traitement des buffers se produisaient, ce qui \u00e9tait trop. La premi\u00e8re id\u00e9e pour acc\u00e9l\u00e9rer le processus \u00e9tait l'optimisation du compilateur, mais elle \u00e9tait d\u00e9j\u00e0 activ\u00e9e dans PJSIP. Deuxi\u00e8mement \u2014 le point flottant mat\u00e9riel, dont nous avons parl\u00e9 dans <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/418295\">article<\/a><\/noindex>. Mais comme l'exp\u00e9rience l'a montr\u00e9, le FPU n'a pas apport\u00e9 de gain de vitesse significatif. La prochaine \u00e9tape a \u00e9t\u00e9 de d\u00e9finir les priorit\u00e9s des flux. Dans Embox, il existe diff\u00e9rentes strat\u00e9gies de planification, et j'ai activ\u00e9 celle qui prend en charge les priorit\u00e9s, attribuant la priorit\u00e9 la plus \u00e9lev\u00e9e aux flux audio. Cela n'a pas non plus aid\u00e9.<\/p>\n<p>L'id\u00e9e suivante \u00e9tait que nous travaillons avec de la m\u00e9moire externe et qu'il serait donc judicieux d'y d\u00e9placer les structures auxquelles nous acc\u00e9dons tr\u00e8s fr\u00e9quemment. J'ai r\u00e9alis\u00e9 une analyse pr\u00e9liminaire sur le moment et le pourquoi <i>simple_pjsua<\/i> de l'allocation m\u00e9moire. Il s'est av\u00e9r\u00e9 que sur 190 Ko, les 90 premiers Ko sont allou\u00e9s pour les besoins internes de PJSIP et sont acc\u00e9d\u00e9s assez rarement. Ensuite, lors d'un appel entrant, la fonction pjsua_call_answer est appel\u00e9e, o\u00f9 des tampons sont ensuite allou\u00e9s pour travailler avec les trames entrantes et sortantes. Cela repr\u00e9sentait encore environ 100 Ko. Et l\u00e0, nous avons agi de la mani\u00e8re suivante. Avant l'appel, nous pla\u00e7ons les donn\u00e9es en m\u00e9moire externe. D\u00e8s que l'appel commence, nous rempla\u00e7ons imm\u00e9diatement le tas par un autre \u2013 en RAM. Ainsi, toutes les donn\u00e9es \u00ab chaudes \u00bb ont \u00e9t\u00e9 transf\u00e9r\u00e9es vers une m\u00e9moire plus rapide et plus pr\u00e9visible.<\/p>\n<p>Au final, tout cela a permis de lancer <i>simple_pjsua<\/i> et d'appeler via son propre serveur. Puis, nous avons \u00e9galement pu le faire via d'autres serveurs comme sip.linphone.org.<\/p>\n<h3>Conclusions<\/h3>\n<p>\nEn fin de compte, nous avons r\u00e9ussi \u00e0 lancer <i>simple_pjsua<\/i> avec transmission vocale bidirectionnelle via le serveur. Le probl\u00e8me des 128 Ko de SDRAM suppl\u00e9mentaires peut \u00eatre r\u00e9solu en utilisant un Cortex-M7 un peu plus puissant (par exemple, STM32F769NI avec 512 Ko de RAM), mais pour l'instant, nous n'avons pas encore abandonn\u00e9 l'espoir d'entrer aussi dans 256 Ko \ud83d\ude42 Nous serions ravis si quelqu'un s'int\u00e9resse, et encore mieux \u2013 essaie. Tous les sources, comme d'habitude, sont \u00e0 notre disposition. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\">d\u00e9p\u00f4ts<\/a><\/noindex>.<br \/>\n<br \/>Source : <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.2.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\/fr\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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\udd47T\u00e9l\u00e9phone SIP sur STM32F7-Discovery | ProHoster","description":"Bonjour \u00e0 tous. Il y a quelque temps, nous avons \u00e9crit sur la mani\u00e8re dont nous avons r\u00e9ussi \u00e0 faire fonctionner un t\u00e9l\u00e9phone SIP sur STM32F4-Discovery avec 1 Mo.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/37916","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=37916"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/37916\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=37916"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=37916"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=37916"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}