{"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\/de\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery","title":{"rendered":"SIP-Telefon auf STM32F7-Discovery","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hallo zusammen.<\/p>\n<p>Vor einiger Zeit haben wir <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/259721\">geschrieben<\/a><\/noindex> dar\u00fcber gesprochen, wie es uns gelungen ist, ein SIP-Telefon auf der STM32F4-Discovery mit 1 MB ROM und 192 KB RAM zu starten, basierend auf <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\">Embox<\/a><\/noindex>. Hier muss gesagt werden, dass diese Version minimal war und zwei Telefone direkt ohne Server verband und die Sprach\u00fcbertragung nur in eine Richtung erfolgte. Daher haben wir beschlossen, ein vollst\u00e4ndigeres Telefon mit Anrufen \u00fcber einen Server und Sprach\u00fcbertragung in beide Richtungen zu starten, dabei jedoch den Speicherplatz so gering wie m\u00f6glich zu halten.<\/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 abspielen\" 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 \/>\nF\u00fcr das Telefon wurde entschieden, die Anwendung <i>simple_pjsua<\/i> aus der PJSIP-Bibliothek zu w\u00e4hlen. Dies ist eine minimale Anwendung, die sich auf dem Server registrieren, Anrufe empfangen und beantworten kann. Im Folgenden werde ich gleich beschreiben, wie man das auf der STM32F7-Discovery startet.<\/p>\n<h3>So starten Sie<\/h3>\n<p><\/p>\n<ol>\n<li> Konfigurieren Sie Embox\n<pre><code class=\"bash\">make confload-platform\/pjsip\/stm32f7cube<\/code><\/pre>\n<\/li>\n<li>Im Datei conf\/mods.config geben wir das ben\u00f6tigte SIP-Konto an.\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>\nwo <i>server<\/i> \u2014 das ist der SIP-Server (zum Beispiel sip.linphone.org), <i>username<\/i> und <i>passwort<\/i> \u2014 der Benutzername und das Passwort des Kontos.\n<\/li>\n<li>Wir kompilieren Embox mit dem Befehl <i>make<\/i>. \u00dcber das Flashen des Boards haben wir Informationen auf unserem <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\/wiki\/Running-Embox-on-STM32xxDiscovery\">Wiki<\/a><\/noindex> und in <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/349034\/\">Artikel<\/a><\/noindex>.\n<\/li>\n<li>Wir starten im Embox-Konsolenbefehl \u201esimple_pjsua_imported\u201c\n<pre><code class=\"bash\">\n00:00:12.870    pjsua_acc.c  ....SIP-Outbound-Status f\u00fcr acc 0 ist nicht aktiv\n00:00:12.884    pjsua_acc.c  ....sip:alexk2222@sip.linphone.org: Registrierung erfolgreich, status=200 (Registrierung erfolgreich)\n00:00:12.911    pjsua_acc.c  ....Keep-alive-Timer f\u00fcr acc 0 gestartet, Ziel:91.121.209.194:5060, Intervall:15s\n<\/code><\/pre>\n<p>\n<\/li>\n<li>Schlie\u00dflich bleibt es nur noch, Lautsprecher oder Kopfh\u00f6rer an den Audioausgang anzuschlie\u00dfen und in zwei kleine MEMS-Mikrofone neben dem Display zu sprechen. Wir rufen von Linux \u00fcber die Anwendung simple_pjsua an, pjsua. oder jede andere wie linphone.\n<\/li>\n<\/ol>\n<p>\nAll dies ist auf unserem <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\/wiki\/AUDIO-on-STM32\">Wiki<\/a><\/noindex>.<\/p>\n<h3>Wie wir dazu gekommen sind<\/h3>\n<p>\nUrspr\u00fcnglich stellte sich die Frage nach der Wahl der Hardware-Plattform. Da klar war, dass die STM32F4-Discovery aufgrund des Speichers nicht geeignet war, wurde die STM32F7-Discovery gew\u00e4hlt. Sie hat 1 MB Flash-Speicher und 256 KB RAM (+ 64 KB speziellen schnellen Speicher, den wir ebenfalls nutzen werden). Auch dies ist nicht viel f\u00fcr Anrufe \u00fcber den Server, aber wir wollten es versuchen.<\/p>\n<p>Wir haben uns die Aufgabe grob in mehrere Phasen unterteilt:<\/p>\n<ul>\n<li>Starten von PJSIP auf QEMU. Das war praktisch f\u00fcr das Debugging, au\u00dferdem hatten wir dort bereits Unterst\u00fctzung f\u00fcr den AC97-Codec. <\/li>\n<li>Aufnahme und Wiedergabe von Stimmen auf QEMU und auf STM32. <\/li>\n<li> Portierung der Anwendung <i>simple_pjsua<\/i> aus PJSIP. Diese erm\u00f6glicht die Registrierung auf einem SIP-Server und das T\u00e4tigen von Anrufen. <\/li>\n<li>Erstellen Sie Ihren eigenen Server auf Basis von Asterisk und testen Sie darauf, danach versuchen Sie externe wie sip.linphone.org. <\/li>\n<\/ul>\n<p>\nDer Sound in Embox funktioniert \u00fcber Portaudio, das auch in PISIP verwendet wird. Auf QEMU traten die ersten Probleme auf \u2013 WAV-Dateien wurden bei 44100 Hz gut abgespielt, aber bei 8000 Hz lief etwas offensichtlich nicht richtig. Es stellte sich heraus, dass es an der Frequenzeinstellung lag \u2013 standardm\u00e4\u00dfig war sie in der Hardware auf 44100 eingestellt, was wir programmatisch nicht ge\u00e4ndert hatten. <\/p>\n<p>Hier sollte vielleicht etwas erkl\u00e4rt werden, wie das Abspielen von Sound \u00fcberhaupt funktioniert. Der Soundkarte kann ein Zeiger auf einen Speicherbereich zugewiesen werden, aus dem bei einer zuvor festgelegten Frequenz abgespielt oder aufgezeichnet werden soll. Nachdem der Puffer aufgebraucht ist, wird eine Unterbrechung ausgel\u00f6st, und die Ausf\u00fchrung geht mit dem n\u00e4chsten Puffer weiter. Das Problem ist, dass diese Puffer im Voraus gef\u00fcllt werden m\u00fcssen, w\u00e4hrend der vorherige abgespielt wird. Mit diesem Problem werden wir sp\u00e4ter noch auf dem STM32F7 konfrontiert werden. <\/p>\n<p>Dann haben wir einen Server gemietet und Asterisk darauf installiert. Da viel debuggt werden musste und ich nicht gerne ins Mikrofon sprach, musste ein automatisches Abspielen und Aufzeichnen implementiert werden. Daf\u00fcr haben wir simple_pjsua gepatcht, damit wir Dateien anstelle von Audioger\u00e4ten verwenden k\u00f6nnen. In PJSIP ist das ziemlich einfach, da es dort das Konzept eines Ports gibt, der sowohl ein Ger\u00e4t als auch eine Datei sein kann. Diese Ports k\u00f6nnen flexibel mit anderen Ports verbunden werden. Den Code kann man in unserem pjsip anschauen. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/pjsip\">das Repository<\/a><\/noindex>Das Ergebnis war folgendes Schema. Auf dem Asterisk-Server habe ich zwei Konten angelegt \u2013 eines f\u00fcr Linux und eines f\u00fcr Embox. Dann wird auf Embox der Befehl <i>simple_pjsua_imported<\/i>, Embox registriert sich am Server, danach rufen wir von Linux aus auf Embox an. Zum Zeitpunkt der Verbindung \u00fcberpr\u00fcfen wir am Asterisk-Server, dass die gesamte Verbindung hergestellt wurde, und nach einiger Zeit sollten wir in Embox den Sound von Linux h\u00f6ren, w\u00e4hrend wir in Linux die Datei speichern, die aus Embox abgespielt wird.<\/p>\n<p>Nachdem das auf QEMU funktioniert hatte, gingen wir zur Portierung auf das STM32F7-Discovery \u00fcber. Das erste Problem war \u2013 wir passten nicht in 1 MB ROM ohne aktivierte Compiler-Optimierung \u201e-Os\u201c bez\u00fcglich der Bildgr\u00f6\u00dfe. Daher aktivierten wir \u201e-Os\u201c. Au\u00dferdem deaktivierten wir mit einem Patch die Unterst\u00fctzung f\u00fcr C++, da sie nur f\u00fcr pjsua ben\u00f6tigt wird, und wir verwenden simple_pjsua. <\/p>\n<p>Nachdem wir Platz schaffen konnten <i>simple_pjsua<\/i>, waren wir der Meinung, dass die Chancen, das jetzt zu starten, bestehen. Aber zuerst mussten wir uns mit der Aufnahme und Wiedergabe von Sprache befassen. Die Frage \u2013 wo aufzeichnen? Wir w\u00e4hlten externen Speicher \u2013 SDRAM (128 MB). Sie k\u00f6nnen es selbst ausprobieren:<\/p>\n<p>Erstellt Stereo-WAV mit einer Frequenz von 16000 Hz und einer Dauer von 10 Sekunden:<\/p>\n<pre><code class=\"bash\">\nrecord -r 16000 -c 2 -d 10000 -m C0000000\n<\/code><\/pre>\n<p>\nWiedergabe:<\/p>\n<pre><code class=\"bash\">\nplay -m C0000000\n<\/code><\/pre>\n<p>\nHier gab es zwei Probleme. Das erste betraf den Codec \u2013 es wird WM8994 verwendet, und in diesem gibt es einen Begriff namens Slot, von denen es vier gibt. Wenn dies nicht eingestellt wird, spielt AUDIO standardm\u00e4\u00dfig in allen vier Slots ab. Bei einer Frequenz von 16000 Hz erhielten wir also 8000 Hz, und bei 8000 Hz funktionierte die Wiedergabe einfach nicht. Als wir nur die Slots 0 und 2 ausw\u00e4hlten, funktionierte es wie gew\u00fcnscht. Ein weiteres Problem war die Audio-Schnittstelle in STM32Cube, bei der der Audioausgang synchron mit dem Audioeingang \u00fcber SAI (Serial Audio Interface) funktioniert (ich habe mich nicht im Detail damit besch\u00e4ftigt, aber es scheint, dass sie eine gemeinsame Uhr teilen, und bei der Initialisierung des Audioausgangs wird der Audioeingang irgendwie eingebunden). Das hei\u00dft, wir k\u00f6nnen sie nicht getrennt starten, also haben wir Folgendes gemacht \u2013 sowohl der Audioeingang als auch der Audioausgang arbeiten immer (einschlie\u00dflich der erzeugten Unterbrechungen). Wenn im System nichts wiedergegeben wird, geben wir einfach einen leeren Puffer an den Audioausgang weiter, und wenn die Wiedergabe gestartet wird, fangen wir an, ihn richtig zu f\u00fcllen.<\/p>\n<p>Sp\u00e4ter stie\u00dfen wir auf das Problem, dass der Ton bei der Sprachaufnahme sehr leise war. Dies liegt daran, dass die MEMS-Mikrofone auf STM32F7-Discovery bei Frequenzen unter 16000 Hz schlecht arbeiten. Daher stellen wir 16000 Hz ein, selbst wenn 8000 Hz ankommen. Daf\u00fcr war es n\u00f6tig, eine Softwareumwandlung von einer Frequenz zur anderen hinzuzuf\u00fcgen.<\/p>\n<p>Au\u00dferdem mussten wir die Gr\u00f6\u00dfe des Heaps, der im RAM liegt, erh\u00f6hen. Nach unseren Berechnungen ben\u00f6tigte pjsip etwa 190 KB, und uns blieben nur noch etwa 100 KB. Dabei mussten wir ein wenig externen Speicher \u2013 SDRAM (ca. 128 KB) \u2013 verwenden.<\/p>\n<p>Nach all diesen \u00c4nderungen sah ich die ersten Pakete zwischen Linux und Embox und h\u00f6rte den Ton! Aber der Ton war schrecklich, ganz anders als in QEMU, nichts war zu erkennen. Dann \u00fcberlegten wir, wo das Problem liegen k\u00f6nnte. Das Debugging zeigte, dass Embox einfach nicht rechtzeitig die Audio-Puffer f\u00fcllen\/entladen konnte. W\u00e4hrend pjsip einen Frame verarbeitet, traten bereits 2 Unterbrechungen \u00fcber die Beendigung der Pufferverarbeitung auf, was zu viel ist. Der erste Gedanke zur Beschleunigung war die Compiler-Optimierung, aber die war bereits in PJSIP aktiviert. Das zweite \u2013 Hardware-Gleitkomma, \u00fcber die wir gesprochen haben. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/embox\/blog\/418295\">Artikel<\/a><\/noindex>. Aber wie sich gezeigt hat, hat die FPU keinen wesentlichen Geschwindigkeitszuwachs gebracht. Der n\u00e4chste Schritt war das Setzen von Priorit\u00e4ten f\u00fcr die Streams. In Embox gibt es verschiedene Planungsstrategien, und ich habe die aktiviert, die Priorit\u00e4ten unterst\u00fctzt, und den Audiostreams die h\u00f6chste Priorit\u00e4t zugewiesen. Das hat auch nicht geholfen.<\/p>\n<p>Die n\u00e4chste Idee war, dass wir mit externer Speicher arbeiten und es gut w\u00e4re, die Strukturen dorthin zu verschieben, auf die sehr h\u00e4ufig zugegriffen wird. Ich habe eine vorl\u00e4ufige Analyse durchgef\u00fchrt, wann und wof\u00fcr <i>simple_pjsua<\/i> Speicher reserviert wird. Es stellte sich heraus, dass von 190 Kb die ersten 90 Kb f\u00fcr interne Bed\u00fcrfnisse von PJSIP reserviert werden und der Zugriff darauf nicht sehr h\u00e4ufig erfolgt. Dar\u00fcber hinaus wird w\u00e4hrend eines eingehenden Anrufs die Funktion pjsua_call_answer aufgerufen, bei der dann Puffer f\u00fcr die Verarbeitung von eingehenden und ausgehenden Frames reserviert werden. Das waren noch etwa 100 Kb. Und hier sind wir wie folgt vorgegangen. Vor dem Anruf platzieren wir die Daten im externen Speicher. Sobald der Anruf kommt, tauschen wir sofort den Heap gegen einen anderen aus \u2013 im RAM. So wurden alle \u201ehei\u00dfen\u201c Daten in einen schnelleren und vorhersehbareren Speicher verschoben.<\/p>\n<p>Letztendlich hat all das zusammen erm\u00f6glicht, <i>simple_pjsua<\/i> und \u00fcber unseren Server zu telefonieren. Und dann auch \u00fcber andere Server wie sip.linphone.org.<\/p>\n<h3>Das DBMS Tarantool ist ein attraktives, zukunftstr\u00e4chtiges Produkt zur Erstellung von hochbelasteten Anwendungen.<\/h3>\n<p>\nLetztendlich gelang es, <i>simple_pjsua<\/i> mit der Sprach\u00fcbertragung in beide Richtungen \u00fcber den Server. Das Problem mit den zus\u00e4tzlich ben\u00f6tigten 128 Kb SDRAM kann durch den Einsatz eines etwas leistungsst\u00e4rkeren Cortex-M7 (zum Beispiel STM32F769NI mit 512 Kb RAM) gel\u00f6st werden, aber wir haben auch die Hoffnung nicht aufgegeben, es in 256 Kb zu schaffen \ud83d\ude42 Wir w\u00fcrden uns freuen, wenn sich jemand daf\u00fcr interessiert, noch besser \u2013 es ausprobiert. Alle Quellcodes sind wie gewohnt in unserem <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/embox\/embox\">das Repository<\/a><\/noindex>.<br \/>\n<br \/>Quelle: <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.1.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\/de\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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\/de\/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 auf STM32F7-Discovery | ProHoster","description":"Hallo zusammen. Vor einiger Zeit haben wir dar\u00fcber geschrieben, wie es uns gelungen ist, ein SIP-Telefon auf dem STM32F4-Discovery mit 1 MB zum Laufen zu bringen.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/sip-telefon-na-stm32f7-discovery","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/37916","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=37916"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/37916\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=37916"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=37916"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=37916"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}