{"id":87065,"date":"2020-07-03T07:42:01","date_gmt":"2020-07-03T05:42:01","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-3"},"modified":"2020-07-03T07:42:01","modified_gmt":"2020-07-03T05:42:01","slug":"izuchaem-voip-dvizhok-mediastreamer2-chast-3","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-3","title":{"rendered":"Explorons le moteur VoIP Mediastreamer2. Partie 3","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Le contenu de cet article est tir\u00e9 de ma <noindex><a rel=\"nofollow\" href=\"https:\/\/zen.yandex.ru\/id\/5e3f8e0751f5346faab4fc7a\">cha\u00eene Zen<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Explorons le moteur VoIP Mediastreamer2. Partie 3\" src=\"\/wp-content\/uploads\/2020\/07\/7c688fd21de37d61722c681961442e33.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"uluchshaem-primer-tonalnogo-generatora\">Am\u00e9liorons l'exemple du g\u00e9n\u00e9rateur de tonalit\u00e9<\/h2>\n<p><\/p>\n<p>Dans l'article pr\u00e9c\u00e9dent <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495728\/\">article<\/a><\/noindex> Nous avons \u00e9crit une application de g\u00e9n\u00e9rateur de tonalit\u00e9 et, \u00e0 l'aide de celle-ci, nous avons extrait le son du haut-parleur de l'ordinateur. Maintenant, nous allons nous pencher sur le fait que notre programme, une fois termin\u00e9, ne restitue pas la m\u00e9moire dans le tas. Il est temps d'apporter des \u00e9claircissements \u00e0 ce sujet.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Apr\u00e8s que le sch\u00e9ma ne nous est plus n\u00e9cessaire, la lib\u00e9ration de la m\u00e9moire doit commencer par l'arr\u00eat du pipeline de donn\u00e9es. Pour ce faire, il est n\u00e9cessaire de d\u00e9connecter la source de l'horloge du sch\u00e9ma \u00e0 l'aide de la fonction <em>ms_ticker_detach()<\/em>. Dans notre cas, nous devons d\u00e9connecter le ticker de l'entr\u00e9e du filtre <em>voidsource<\/em>:<\/p>\n<p><\/p>\n<pre><code class=\"cpp\">ms_ticker_detach(ticker, voidsource)<\/code><\/pre>\n<p><\/p>\n<p>Au fait, apr\u00e8s avoir arr\u00eat\u00e9 le pipeline, nous pouvons modifier son sch\u00e9ma et le relancer en reconnectant le ticker.<\/p>\n<p><\/p>\n<p>Maintenant, nous pouvons le supprimer en utilisant la fonction <em>ms_ticker_destroy()<\/em>:<\/p>\n<p><\/p>\n<pre><code class=\"cpp\">ms_ticker_destroy(ticker)<\/code><\/pre>\n<p><\/p>\n<p>Le pipeline est arr\u00eat\u00e9 et nous pouvons proc\u00e9der au d\u00e9montage de ses parties, en d\u00e9connectant les filtres. Pour cela, nous utilisons la fonction <em>ms_filter_unlink()<\/em>:<\/p>\n<p><\/p>\n<pre><code class=\"cpp\">ms_filter_unlink(voidsource, 0, dtmfgen, 0);\nms_filter_unlink(dtmfgen, 0, snd_card_write, 0);<\/code><\/pre>\n<p><\/p>\n<p>la destination des arguments est la m\u00eame que celle de la fonction <em>ms_filter_link()<\/em>.<\/p>\n<p><\/p>\n<p>Nous supprimons maintenant les filtres d\u00e9j\u00e0 d\u00e9connect\u00e9s \u00e0 l'aide de <em>ms_filter_destroy()<\/em>:<\/p>\n<p><\/p>\n<pre><code class=\"cpp\">ms_filter_destroy(voidsource);\nms_filter_destroy(dtmfgen);\nms_filter_destroy(snd_card_write);<\/code><\/pre>\n<p><\/p>\n<p>En ajoutant ces lignes \u00e0 notre exemple, nous obtiendrons une fermeture correcte du programme du point de vue de la gestion de la m\u00e9moire.<\/p>\n<p><\/p>\n<p>Comme nous pouvons le voir, une fermeture correcte du programme nous a demand\u00e9 d'ajouter \u00e0 peu pr\u00e8s autant de lignes de code qu'au d\u00e9but, soit en moyenne quatre lignes de code par filtre. Il s'av\u00e8re que la taille du code de notre programme augmentera proportionnellement au nombre de filtres utilis\u00e9s dans le projet. Si nous parlons de mille filtres dans le sch\u00e9ma, alors votre code ajoutera quatre mille lignes d'op\u00e9rations routini\u00e8res de cr\u00e9ation et de destruction.<\/p>\n<p><\/p>\n<p>Maintenant, vous savez comment terminer correctement un programme utilisant un media streamer. Dans les exemples suivants, pour des raisons de concision, je vais \u00ab oublier \u00bb de le faire. Mais vous, vous n'oublierez pas ?<\/p>\n<p><\/p>\n<p>Les d\u00e9veloppeurs du m\u00e9diastreamer n'ont pas pr\u00e9vu de moyens logiciels pour faciliter la manipulation des filtres lors de l'assemblage et du d\u00e9montage des sch\u00e9mas. N\u00e9anmoins, il y a un helper qui permet d'ins\u00e9rer et de retirer rapidement un filtre du sch\u00e9ma.<\/p>\n<p><\/p>\n<p>Nous reviendrons \u00e0 la solution de ce probl\u00e8me plus tard, lorsque le nombre de filtres dans nos exemples d\u00e9passera une vingtaine.<\/p>\n<p><\/p>\n<p>Dans la prochaine <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495982\/\">article<\/a><\/noindex> nous allons rassembler le sch\u00e9ma du niveau de signal et apprendre \u00e0 lire le r\u00e9sultat de la mesure \u00e0 partir du filtre. \u00c9valuons la pr\u00e9cision de la mesure.<\/p>\n<p>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495780\/\">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. \u0423\u043b\u0443\u0447\u0448\u0430\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0442\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u0437\u0432\u043b\u0435\u043a\u043b\u0438 \u0437\u0432\u0443\u043a \u0438\u0437 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043e\u0431\u0440\u0430\u0442\u0438\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0443, \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u043a\u0443\u0447\u0443. \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u043d\u0435\u0441\u0442\u0438 \u044f\u0441\u043d\u043e\u0441\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u0432\u043e\u043f\u0440\u043e\u0441. \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0441\u0445\u0435\u043c\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":87066,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-87065","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.2 - 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\/fr\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-3\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\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\udd47\u0418\u0437\u0443\u0447\u0430\u0435\u043c VoIP-\u0434\u0432\u0438\u0436\u043e\u043a Mediastreamer2. \u0427\u0430\u0441\u0442\u044c 3 | 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\/fr\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-3\" \/>\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:01+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-03T05:42:01+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\udd47\u00c9tude du moteur VoIP Mediastreamer2. Partie 3 | ProHoster","description":"Le contenu de cet article est tir\u00e9 de mon canal Zen.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-3","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\udd47\u0418\u0437\u0443\u0447\u0430\u0435\u043c VoIP-\u0434\u0432\u0438\u0436\u043e\u043a Mediastreamer2. \u0427\u0430\u0441\u0442\u044c 3 | 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\/fr\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-3","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:01+00:00","article:modified_time":"2020-07-03T05:42:01+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"87065","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-02 12:50:43","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\/87065","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=87065"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/87065\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/87066"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=87065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=87065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=87065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}