{"id":87067,"date":"2020-07-03T07:42:03","date_gmt":"2020-07-03T05:42:03","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-2"},"modified":"2020-07-03T07:42:03","modified_gmt":"2020-07-03T05:42:03","slug":"izuchaem-voip-dvizhok-mediastreamer2-chast-2","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-2","title":{"rendered":"Fedezz\u00fck fel a VoIP Mediastreamer2 motort. 2. r\u00e9sz","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>A cikk anyaga az \u00e9n <noindex><a rel=\"nofollow\" href=\"https:\/\/zen.yandex.ru\/id\/5e3f8e0751f5346faab4fc7a\">Dzen csatorn\u00e1mb\u00f3l sz\u00e1rmazik<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fedezz\u00fck fel a VoIP Mediastreamer2 motort. 2. r\u00e9sz\" src=\"\/wp-content\/uploads\/2020\/07\/1afc1603a438f865c56bba72012d591e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"sozdaem-tonalnyy-generator\">Ton\u00e1lis gener\u00e1tort hozunk l\u00e9tre<\/h2>\n<p><\/p>\n<p>A kor\u00e1bbi <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495702\/\">a Spotify d\u00f6nt\u00e9shozatali m\u00f3dszertan\u00e1r\u00f3l. Egyre t\u00f6bb felhaszn\u00e1l\u00f3 prefer\u00e1lja a zenehallgat\u00e1st mobilon a streaming szolg\u00e1ltat\u00e1sban, de a c\u00e9gn\u00e9l t\u00falnyom\u00f3r\u00e9szt webprogramoz\u00f3k dolgoznak. A Spotify elemezte ezt a helyzetet, \u00e9s \u00fagy d\u00f6nt\u00f6tt, hogy t\u00f6bb mobilfejleszt\u0151t vesz fel, valamint \u00e1tnevezi a webes szakembereket \u00faj ir\u00e1nyba:<\/a><\/noindex> Telep\u00edtett\u00fck a m\u00e9diastreamer k\u00f6nyvt\u00e1rat, a fejleszt\u0151i eszk\u00f6z\u00f6ket, \u00e9s ellen\u0151rizt\u00fck a m\u0171k\u00f6d\u00e9s\u00fcket, l\u00e9trehoztunk egy tesztalkalmaz\u00e1st.<\/p>\n<p><\/p>\n<p>Ma l\u00e9trehozunk egy alkalmaz\u00e1st, amely k\u00e9pes a hangk\u00e1rty\u00e1n ton\u00e1lis jelet megsz\u00f3laltatni. Ennek a feladatnak a megold\u00e1s\u00e1hoz \u00f6ssze kell kapcsolnunk a sz\u0171r\u0151ket az al\u00e1bb l\u00e1that\u00f3 hanggener\u00e1tor s\u00e9m\u00e1ban:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Fedezz\u00fck fel a VoIP Mediastreamer2 motort. 2. r\u00e9sz\" src=\"\/wp-content\/uploads\/2020\/07\/249759aec6235d3285e6ba6c28524710.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>A s\u00e9m\u00e1t balr\u00f3l jobbra olvassuk, ezen az ir\u00e1nyon halad az adatfolyam. A nyilak is erre utalnak. A t\u00e9glalapok a sz\u0171r\u0151ket jel\u00f6lik, amelyek feldolgozz\u00e1k az adatblokkokat, \u00e9s a kimeneten megjelen\u00edtik az eredm\u00e9nyt. A t\u00e9glalap belsej\u00e9ben a szerepe \u00e9s alatta, nagybet\u0171kkel, a sz\u0171r\u0151 t\u00edpusa szerepel. A t\u00e9glalapokat \u00f6sszek\u00f6t\u0151 nyilak az adatkeretek, amelyek a blokkokat a sz\u0171r\u0151kr\u0151l a sz\u0171r\u0151kre sz\u00e1ll\u00edtj\u00e1k. \u00c1ltal\u00e1noss\u00e1gban elmondhat\u00f3, hogy a sz\u0171r\u0151nek sok bemenete \u00e9s kimenete lehet.<\/p>\n<p><\/p>\n<p>Minden a kvarcforr\u00e1ssal kezd\u0151dik, amely azt a temp\u00f3t hat\u00e1rozza meg, amelyben az adatok feldolgoz\u00e1sa megt\u00f6rt\u00e9nik a sz\u0171r\u0151kben. A kvarc \u00fctem\u00e9re minden sz\u0171r\u0151 feldolgozza az \u00f6sszes adatblokkot, amely a bemenet\u00e9n van. \u00c9s az eredm\u00e9nyblokkokat kimenetre helyezi - a sorba. El\u0151sz\u00f6r a kvarcfel\u00fclethez legk\u00f6zelebbi sz\u0171r\u0151 v\u00e9gzi a feldolgoz\u00e1st, majd azok a sz\u0171r\u0151k, amelyek a kimeneteire csatlakoznak (a kimenetekb\u0151l t\u00f6bb is lehet), \u00e9s \u00edgy tov\u00e1bb. Miut\u00e1n a l\u00e1nc utols\u00f3 sz\u0171r\u0151je befejezte a feldolgoz\u00e1st, a v\u00e9grehajt\u00e1s meg\u00e1ll, am\u00edg \u00faj \u00fctem \u00e9rkezik. Az \u00fctemek alap\u00e9rtelmez\u00e9s szerint 10 milliszekundumonk\u00e9nt k\u00f6vetkeznek. <\/p>\n<p><\/p>\n<p>T\u00e9rj\u00fcnk vissza a s\u00e9m\u00e1nkhoz. A taktok csendforr\u00e1shoz \u00e9rkeznek, ahol a sz\u0171r\u0151 \u00fagy van be\u00e1ll\u00edtva, hogy minden egyes taktusra gener\u00e1l egy adatblokkot, amely null\u00e1kat tartalmaz. Ha ezt a blokkot a hangmint\u00e1k blokkjak\u00e9nt vizsg\u00e1ljuk, akkor ez nem m\u00e1s, mint csend. Els\u0151 r\u00e1n\u00e9z\u00e9sre furcs\u00e1nak t\u0171nik, hogy csendet tartalmaz\u00f3 adatblokkot gener\u00e1ljunk \u2014 hiszen azt nem lehet hallani, de ezek a blokkok sz\u00fcks\u00e9gesek a hangjel-gener\u00e1tor m\u0171k\u00f6d\u00e9s\u00e9hez. A gener\u00e1tor ezeket a blokkokat tiszta pap\u00edrlapk\u00e9nt haszn\u00e1lja, amelyre hangmint\u00e1kat \u00edr. Norm\u00e1l \u00e1llapot\u00e1ban a gener\u00e1tor ki van kapcsolva, \u00e9s egyszer\u0171en tov\u00e1bb\u00edtja a bemeneti blokkokat a kimenetre. \u00cdgy a csendblokkok v\u00e1ltozatlanul haladnak v\u00e9gig a s\u00e9m\u00e1n balr\u00f3l jobbra, eljutva a hangk\u00e1rty\u00e1hoz, amely hangtalanul gy\u0171jti be a blokkokat a hozz\u00e1 csatlakoztatott bemenetr\u0151l.<\/p>\n<p><\/p>\n<p>De minden megv\u00e1ltozik, amikor a gener\u00e1tor hanglej\u00e1tsz\u00e1si parancsot kap, elkezdi gener\u00e1lni a hangmint\u00e1kat, \u00e9s ezekkel helyettes\u00edti a bemeneti blokkok mint\u00e1it, majd az \u00e1talak\u00edtott blokkokat a kimenetre helyezi. A hangk\u00e1rtya elkezdi a hang lej\u00e1tsz\u00e1s\u00e1t. Az al\u00e1bbi program megval\u00f3s\u00edtja a fenti munkas\u00e9m\u00e1t:<\/p>\n<p><\/p>\n<pre><code class=\"cpp\">\/* \u0424\u0430\u0439\u043b mstest2.c *\/\n#include &lt;mediastreamer2\/msfilter.h&gt;\n#include &lt;mediastreamer2\/msticker.h&gt;\n#include &lt;mediastreamer2\/dtmfgen.h&gt;\n#include &lt;mediastreamer2\/mssndcard.h&gt;\nint main()\n{\n    ms_init();\n\n    \/* \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432. *\/\n    MSFilter  *voidsource = ms_filter_new(MS_VOID_SOURCE_ID);\n    MSFilter  *dtmfgen = ms_filter_new(MS_DTMF_GEN_ID);\n    MSSndCard *card_playback = ms_snd_card_manager_get_default_card(ms_snd_card_manager_get());\n    MSFilter  *snd_card_write = ms_snd_card_create_writer(card_playback);\n\n    \/* \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u0438\u043a\u0435\u0440. *\/\n    MSTicker *ticker = ms_ticker_new();\n\n    \/* \u0421\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0443. *\/\n    ms_filter_link(voidsource, 0, dtmfgen, 0);\n    ms_filter_link(dtmfgen, 0, snd_card_write, 0);\n\n   \/* \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u0430\u043a\u0442\u043e\u0432. *\/\n   ms_ticker_attach(ticker, voidsource);\n\n   \/* \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440. *\/\n   char key='1';\n   ms_filter_call_method(dtmfgen, MS_DTMF_GEN_PLAY, (void*)&amp;key);\n\n   \/* \u0414\u0430\u0435\u043c, \u0432\u0440\u0435\u043c\u044f, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0431\u043b\u043e\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u044b\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u043e\u0439.*\/\n   ms_sleep(2);   \n}<\/code><\/pre>\n<p><\/p>\n<p>A m\u00e9dia streamel\u0151 inicializ\u00e1l\u00e1sa ut\u00e1n h\u00e1rom sz\u0171r\u0151 l\u00e9trehoz\u00e1sa t\u00f6rt\u00e9nik: <em>voidsource, dtmfgen, snd_card_write<\/em>. A taktusszign\u00e1l forr\u00e1sa l\u00e9trej\u00f6n.<\/p>\n<p><\/p>\n<p>Ezut\u00e1n a sz\u0171r\u0151k \u00f6sszekapcsol\u00e1s\u00e1t kell elv\u00e9gezni a s\u00e9ma szerint, \u00e9s a \u00f3raforr\u00e1st utols\u00f3k\u00e9nt kell csatlakoztatni, mert ezut\u00e1n azonnal elindul a s\u00e9ma m\u0171k\u00f6d\u00e9se. Ha az \u00f3raforr\u00e1st egy befejezetlen s\u00e9m\u00e1hoz csatlakoztatjuk, el\u0151fordulhat, hogy a m\u00e9diafolytonoss\u00e1g v\u00e9szhelyzetbe ker\u00fcl, ha \u00e9szlel a l\u00e1ncban legal\u00e1bb egy olyan sz\u0171r\u0151t, amelynek minden bemenete vagy minden kimenete \"lebeg a leveg\u0151ben\" (nincs csatlakoztatva). <\/p>\n<p><\/p>\n<p>A sz\u0171r\u0151k \u00f6sszekapcsol\u00e1sa a k\u00f6vetkez\u0151 f\u00fcggv\u00e9nnyel t\u00f6rt\u00e9nik: <\/p>\n<p><\/p>\n<pre><code class=\"cpp\">ms_filter_link(src, src_out, dst, dst_in)<\/code><\/pre>\n<p><\/p>\n<p>ahol az els\u0151 argumentum egy mutat\u00f3 a forr\u00e1ssz\u0171r\u0151h\u00f6z, a m\u00e1sodik argumentum a forr\u00e1s kimenet\u00e9nek sz\u00e1ma (figyeljen arra, hogy a bemenetek \u00e9s kimenetek sz\u00e1moz\u00e1sa null\u00e1t\u00f3l kezd\u0151dik). A harmadik argumentum egy mutat\u00f3 a c\u00e9l sz\u0171r\u0151h\u00f6z, a negyedik pedig a c\u00e9l bemenet\u00e9nek sz\u00e1m\u00e1t jelzi.<\/p>\n<p><\/p>\n<p>Minden sz\u0171r\u0151 \u00f6ssze van kapcsolva, \u00e9s az utols\u00f3k\u00e9nt a tikkert (azaz az \u00f3rajelet) csatlakoztatjuk. Ezt k\u00f6vet\u0151en a hangmodulunk elindul, de a sz\u00e1m\u00edt\u00f3g\u00e9p hangsz\u00f3r\u00f3j\u00e1ban egyel\u0151re semmi sem hallhat\u00f3 \u2014 a hanggener\u00e1tor ki van kapcsolva, \u00e9s csak a csendes bemeneti adatblokkokat engedi \u00e1t. A t\u00f3nusjel gener\u00e1l\u00e1s\u00e1nak elind\u00edt\u00e1s\u00e1hoz a gener\u00e1tor sz\u0171r\u0151j\u00e9nek met\u00f3dus\u00e1t kell v\u00e9grehajtanunk.<\/p>\n<p><\/p>\n<p>K\u00e9ttonus\u00fa (DTMF) jelet fogunk gener\u00e1lni, amely megfelel\u0151 a telefon gombj\u00e1nak \"1\" megnyom\u00e1s\u00e1ra. Ehhez a funkci\u00f3 seg\u00edts\u00e9g\u00e9vel <em>ms_filter_call_method()<\/em> felh\u00edvjuk a MS_DTMF_GEN_PLAY met\u00f3dust, \u00e1tadva neki argumentumk\u00e9nt a k\u00f3dra mutat\u00f3 mutat\u00f3t, amihez a lej\u00e1tszand\u00f3 jel tartozik.<\/p>\n<p><\/p>\n<p>Most m\u00e1r csak a programot kell leford\u00edtani:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ gcc mstest2.c -o mstest2 `pkg-config mediastreamer --libs --cflags`<\/code><\/pre>\n<p><\/p>\n<p>Majd futtassuk:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ .\/mstest2<\/code><\/pre>\n<p><\/p>\n<p>A program elind\u00edt\u00e1sa ut\u00e1n a sz\u00e1m\u00edt\u00f3g\u00e9p hangsz\u00f3r\u00f3j\u00e1ban egy r\u00f6vid, k\u00e9t t\u00f3nusb\u00f3l \u00e1ll\u00f3 hangjelz\u00e9s hallhat\u00f3 lesz.<\/p>\n<p><\/p>\n<p>Megalkottuk \u00e9s \u00fczembe helyezt\u00fck az els\u0151 hangmodulunkat. L\u00e1thattuk, hogyan kell filterpeld\u00e1nyokat l\u00e9trehozni, hogyan kell azokat \u00f6sszekapcsolni, \u00e9s hogyan h\u00edvhatjuk meg a met\u00f3dusaikat. Az els\u0151 siker\u00fcnket \u00fcnnepelve, figyeln\u00fcnk kell arra, hogy a programunk nem szabad\u00edtja fel a lefoglalt mem\u00f3ri\u00e1t a befejez\u00e9s el\u0151tt. A k\u00f6vetkez\u0151 l\u00e9p\u00e9sben <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495780\/\">a Spotify d\u00f6nt\u00e9shozatali m\u00f3dszertan\u00e1r\u00f3l. Egyre t\u00f6bb felhaszn\u00e1l\u00f3 prefer\u00e1lja a zenehallgat\u00e1st mobilon a streaming szolg\u00e1ltat\u00e1sban, de a c\u00e9gn\u00e9l t\u00falnyom\u00f3r\u00e9szt webprogramoz\u00f3k dolgoznak. A Spotify elemezte ezt a helyzetet, \u00e9s \u00fagy d\u00f6nt\u00f6tt, hogy t\u00f6bb mobilfejleszt\u0151t vesz fel, valamint \u00e1tnevezi a webes szakembereket \u00faj ir\u00e1nyba:<\/a><\/noindex> megtanulunk takar\u00edtani magunk ut\u00e1n.<\/p>\n<p>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495728\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0437\u044f\u0442 \u0441 \u043c\u043e\u0435\u0433\u043e \u0434\u0437\u0435\u043d-\u043a\u0430\u043d\u0430\u043b\u0430. \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043c\u0435\u0434\u0438\u0430\u0441\u0442\u0440\u0438\u043c\u0435\u0440\u0430, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438 \u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0441\u043e\u0431\u0440\u0430\u0432 \u043f\u0440\u043e\u0431\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u043f\u0438\u043b\u0438\u043a\u0430\u0442\u044c \u043d\u0430 \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u0435 \u0442\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b. \u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0432 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u043d\u0438\u0436\u0435 \u0441\u0445\u0435\u043c\u0443 \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430: \u0427\u0438\u0442\u0430\u0435\u043c \u0441\u0445\u0435\u043c\u0443 \u0441\u043b\u0435\u0432\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":87068,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-87067","post","type-post","status-publish","format-standard","has-post-thumbnail","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=\"\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0437\u044f\u0442 \u0441 \u043c\u043e\u0435\u0433\u043e \u0434\u0437\u0435\u043d-\u043a\u0430\u043d\u0430\u043b\u0430.\" \/>\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\/hu\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-2\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\udd47\u0418\u0437\u0443\u0447\u0430\u0435\u043c VoIP-\u0434\u0432\u0438\u0436\u043e\u043a Mediastreamer2. \u0427\u0430\u0441\u0442\u044c 2 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0437\u044f\u0442 \u0441 \u043c\u043e\u0435\u0433\u043e \u0434\u0437\u0435\u043d-\u043a\u0430\u043d\u0430\u043b\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-2\" \/>\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=\"2020-07-03T05:42:03+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-03T05:42:03+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\udd47A Mediastreamer2 VoIP motor tanulm\u00e1nyoz\u00e1sa. 2. r\u00e9sz | ProHoster","description":"A cikk anyaga a Dzen-csatorn\u00e1mb\u00f3l sz\u00e1rmazik.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-2","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\udd47\u0418\u0437\u0443\u0447\u0430\u0435\u043c VoIP-\u0434\u0432\u0438\u0436\u043e\u043a Mediastreamer2. \u0427\u0430\u0441\u0442\u044c 2 | ProHoster","og:description":"\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0437\u044f\u0442 \u0441 \u043c\u043e\u0435\u0433\u043e \u0434\u0437\u0435\u043d-\u043a\u0430\u043d\u0430\u043b\u0430.","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-2","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":"2020-07-03T05:42:03+00:00","article:modified_time":"2020-07-03T05:42:03+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"87067","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:59:55","updated":"2022-10-04 22:45:55","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/87067","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=87067"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/87067\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/87068"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=87067"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=87067"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=87067"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}