{"id":270232,"date":"2015-12-13T22:04:02","date_gmt":"2015-12-13T19:04:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=270232"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=270232","title":{"rendered":"\u0410\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u0432 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0435 Tox"},"content":{"rendered":"<p>       \u041f\u043e\u043a\u0430 \u043e\u0434\u043d\u0438 \u043b\u044e\u0434\u0438 \u0434\u0443\u043c\u0430\u044e\u0442 \u043e \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u043e\u0432, \u0434\u0440\u0443\u0433\u0438\u0435 \u043b\u044e\u0434\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u044b. \u0412 <a href=\"https:\/\/habrahabr.ru\/post\/264179\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/a> \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u043e\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 API \u044f\u0434\u0440\u0430 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430 Tox \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e echo-\u0431\u043e\u0442\u0430. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 Tox \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u0438 3-\u0433\u043e \u043d\u043e\u044f\u0431\u0440\u044f \u044f\u0434\u0440\u043e Tox <a href=\"https:\/\/blog.tox.chat\/2015\/11\/new-tox-av-api\/\">\u043e\u0431\u043e\u0433\u0430\u0442\u0438\u043b\u043e\u0441\u044c<\/a> \u043d\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u2014 <b>ToxAV<\/b> \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0438 \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/7bb\/28c\/d78\/7bb28cd781a34835ac3156c432bc4527.png\" alt=\"image\"\/><\/p>\n<p>  <a name=\"habracut\"><\/a>  <\/p>\n<h1>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h1>\n<p>  ToxAV \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u0434\u0435\u043a\u0430\u0445 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Opus_(\u043a\u043e\u0434\u0435\u043a)\">Opus<\/a> \u0434\u043b\u044f \u0430\u0443\u0434\u0438\u043e \u0438 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/VP8\">VP8<\/a> \u0434\u043b\u044f \u0432\u0438\u0434\u0435\u043e \u0438 \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 <a href=\"http:\/\/opus-codec.org\/downloads\/\">libopus<\/a> \u0438 <a href=\"http:\/\/www.webmproject.org\/code\/releases\/\">libvpx<\/a> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0434\u043b\u044f \u0430\u0443\u0434\u0438\u043e, API ToxAV \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 PCM \u0441 16-\u0438 \u0431\u0438\u0442\u043d\u044b\u043c \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u043c, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 1-\u0433\u043e \u0438\u043b\u0438 2-\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u0438\u0437\u0430\u0446\u0438\u0438 8, 12, 16, 24 \u0438 48KHz. \u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c 2.5, 5, 10, 20, 40 \u0438\u043b\u0438 60 ms (\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0435\u043a\u0430 opus).<\/p>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0434\u043b\u044f \u0432\u0438\u0434\u0435\u043e, API ToxAV \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u0430\u0434\u0440\u044b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 YUV420 (\u043e\u043d \u0436\u0435 IYUV \u0438 I420), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/ru.wikipedia.org\/wiki\/YUV\">\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c<\/a> \u0432 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0446\u0432\u0435\u0442\u043e\u0432 RGB.<\/p>\n<p>  ToxAV \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0438\u043b\u0438 \u0438\u0445 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u2014 \u0432\u0441\u0435 \u044d\u0442\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0430 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0422\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 <a href=\"https:\/\/github.com\/GrayHatter\/uTox\">\u00b5Tox<\/a> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <a href=\"https:\/\/www.openal.org\/\">OpenAL<\/a> \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0430\u0443\u0434\u0438\u043e \u0438 <a href=\"http:\/\/www.linuxtv.org\/\">v4l<\/a> (video4Linux) \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u0438\u0434\u0435\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438. \u0412 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 <a href=\"https:\/\/github.com\/tux3\/qTox\">qTox<\/a> \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u0438\u0434\u0435\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <a href=\"https:\/\/www.ffmpeg.org\/\">FFmpeg<\/a>. \u0412 python (\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u0439\u0434\u0435\u0442 \u0440\u0435\u0447\u044c \u043d\u0438\u0436\u0435) \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"http:\/\/people.csail.mit.edu\/hubert\/pyaudio\/\">PyAudio<\/a> \u0434\u043b\u044f \u0430\u0443\u0434\u0438\u043e \u0438 <a href=\"http:\/\/opencv.org\/\">OpenCV<\/a> \u0434\u043b\u044f \u0432\u0438\u0434\u0435\u043e.<\/p>\n<p>  \u041e\u0431\u0449\u0438\u0439 \u0446\u0438\u043a\u043b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 ToxAV \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432 \u0432\u0438\u0434\u0435:<\/p>\n<ol>\n<li>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u044f\u0434\u0440\u0430 ToxCore (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 <a href=\"http:\/\/habrahabr.ru\/post\/264179\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/a>).<\/li>\n<li>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b ToxAV (<b>toxav_new<\/b>).<\/li>\n<li>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 callback \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 (<b>toxav_callback_*<\/b>) \u2014 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 (4) \u0438 \u0432 \u043d\u0438\u0445 \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0435\u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/li>\n<li>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0446\u0438\u043a\u043b (<b>toxav_iterate<\/b>) \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439.<\/li>\n<li>\u041f\u0430\u0443\u0437\u0430 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f <b>toxav_iteration_interval<\/b> \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u0448\u0430\u0433\u0443.<\/li>\n<\/ol>\n<p>  \u0422.\u043a. \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u043d\u0438\u0439 \u043e \u0440\u0430\u0431\u043e\u0442\u0435 Tox API \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 (\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u0441\u0438), \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u043e\u0431\u0435\u0440\u0442\u043a\u043e\u0439 \u0434\u043b\u044f \u044f\u0437\u044b\u043a\u0430 python (<a href=\"https:\/\/github.com\/abbat\/pytoxcore\">pytoxcore \u043d\u0430 github<\/a>). \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0436\u0435\u043b\u0430\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432, \u0442\u0430\u043c \u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u043e\u0432.<\/p>\n<p>  \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 python-\u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u043a\u0443 \u043f\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c:<\/p>\n<pre><code class=\"python\">$ python &gt;&gt;&gt; from pytoxcore import ToxAV &gt;&gt;&gt; help(ToxAV) class ToxAV(object)  |  ToxAV object ...  |  toxav_answer(...)  |      toxav_answer(friend_number, audio_bit_rate, video_bit_rate)  |      Accept an incoming call.  |      If answering fails for any reason, the call will still be pending and it is possible to try and answer it later. Audio and video receiving are both enabled by default.  |    |  toxav_audio_receive_frame_cb(...)  |      toxav_audio_receive_frame_cb(friend_number, pcm, sample_count, channels, sampling_rate)  |      This event is triggered when a audio data received. ... <\/code><\/pre>\n<p>  \u041d\u0438\u0436\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e.<\/p>\n<h1>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f ToxAV<\/h1>\n<p>  \u0414\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b ToxAV \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 <b>toxav_new<\/b> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u043d\u0435\u0435 \u044f\u0434\u0440\u0430 ToxCore. \u0414\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 ToxCore \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 ToxAV. \u0412 python \u043e\u0431\u0435\u0440\u0442\u043a\u0435 \u0432\u044b\u0437\u043e\u0432 toxav_new \u0441\u043a\u0440\u044b\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a:<\/p>\n<pre><code class=\"python\">from pytoxcore import ToxCore, ToxAV  class EchoBot(ToxCore): ...  class EchoAVBot(ToxAV):     def __init__(self, core):         super(EchoAVBot, self).__init__(core) ...  bot = EchoBot(options) botav = EchoAVBot(bot) <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 ToxAV \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 <b>toxav_kill<\/b> \u0438\u043b\u0438 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 \u0432 python \u043e\u0431\u0435\u0440\u0442\u043a\u0435, \u0433\u0434\u0435 \u0432\u044b\u0437\u043e\u0432 toxav_kill \u0441\u043a\u0440\u044b\u0442 \u0432 \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435.<\/p>\n<h1>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 callback \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/h1>\n<p>  \u0412 python-\u043e\u0431\u0435\u0440\u0442\u043a\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u043c callback \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u0421\u0430\u043c\u0438 \u0436\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430 <b>ToxAV<\/b> \u0438 \u0438\u043c\u0435\u044e\u0442 \u0441\u0443\u0444\u0444\u0438\u043a\u0441 <b>*_cb<\/b>. \u0412\u043e \u0432\u0441\u0435\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u0445 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <b>friend_number<\/b> \u2014 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u0440\u0443\u0433\u0430 \u0438\u0437 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 ToxCore.<\/p>\n<p>  <b>toxav_call_cb(friend_number, audio_enabled, video_enabled)<\/b> \u2014 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0437\u0432\u043e\u043d\u043e\u043a. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0444\u043b\u0430\u0433\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u0441 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u0430\u0443\u0434\u0438\u043e \u0438\u043b\u0438 \u0432\u0438\u0434\u0435\u043e \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u043c\u043e\u0436\u0435\u0442 \u0438\u0445 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0437\u0432\u043e\u043d\u043a\u0430. \u0417\u0432\u043e\u043d\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043d\u044f\u0442 \u0432\u044b\u0437\u043e\u0432\u043e\u043c <b>toxav_answer<\/b>, \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d \u0432\u044b\u0437\u043e\u0432\u043e\u043c <b>toxav_call_control<\/b>.<\/p>\n<p>  <b>toxav_call_state_cb(friend_number, state)<\/b> \u2014 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0437\u0432\u043e\u043d\u043a\u0430. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u043c\u0430\u0441\u043a\u043e\u0439 \u0438\u0437 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442:<\/p>\n<ul>\n<li><b>TOXAV_FRIEND_CALL_STATE_ERROR<\/b> \u2014 \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443. \u0414\u0430\u043d\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u0437\u0432\u043e\u043d\u043a\u0430 (\u043a \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0437\u0432\u043e\u043d\u043e\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d) \u0438 \u043d\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438.<\/li>\n<li><b>TOXAV_FRIEND_CALL_STATE_FINISHED<\/b> \u2014 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0437\u0432\u043e\u043d\u043a\u0430. \u0414\u0430\u043d\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u0437\u0432\u043e\u043d\u043a\u0430 (\u043a \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0437\u0432\u043e\u043d\u043e\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d) \u0438 \u043d\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438.<\/li>\n<li><b>TOXAV_FRIEND_CALL_STATE_SENDING_A<\/b> \u2014 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u043d\u0430\u0447\u0430\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0430\u0443\u0434\u0438\u043e \u043f\u043e\u0442\u043e\u043a\u0430.<\/li>\n<li><b>TOXAV_FRIEND_CALL_STATE_SENDING_V<\/b> \u2014 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u043d\u0430\u0447\u0430\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0432\u0438\u0434\u0435\u043e \u043f\u043e\u0442\u043e\u043a\u0430.<\/li>\n<li><b>TOXAV_FRIEND_CALL_STATE_ACCEPTING_A<\/b> \u2014 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u043d\u0430\u0447\u0430\u043b \u043f\u0440\u0438\u0435\u043c \u0430\u0443\u0434\u0438\u043e \u043f\u043e\u0442\u043e\u043a\u0430.<\/li>\n<li><b>TOXAV_FRIEND_CALL_STATE_ACCEPTING_V<\/b> \u2014 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u043d\u0430\u0447\u0430\u043b \u043f\u0440\u0438\u0435\u043c \u0432\u0438\u0434\u0435\u043e \u043f\u043e\u0442\u043e\u043a\u0430<\/li>\n<\/ul>\n<p>  <b>toxav_bit_rate_status_cb(friend_number, audio_bit_rate, video_bit_rate)<\/b> \u2014 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u0435\u0442\u0438, \u043a\u043e\u0433\u0434\u0430 \u044f\u0434\u0440\u043e \u043d\u0435 \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u043c \u0431\u0438\u0442\u0440\u0435\u0439\u0442\u043e\u043c. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u044f\u0434\u0440\u043e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0435 \u0431\u0438\u0442\u0440\u0435\u0439\u0442\u044b \u0434\u043b\u044f \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u043f\u043e\u0442\u043e\u043a\u0430. \u041f\u0440\u0438 \u0447\u0435\u043c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u044f\u0434\u0440\u043e \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0431\u0438\u0442\u0440\u0435\u0439\u0442 \u0432\u0438\u0434\u0435\u043e \u043f\u043e\u0442\u043e\u043a\u0430, \u043a\u0430\u043a \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u043f\u043e\u043b\u043e\u0441\u0443 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0435\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0431\u0438\u0442\u0440\u0435\u0439\u0442\u0430 \u0434\u043b\u044f \u0430\u0443\u0434\u0438\u043e. \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0437\u043e\u0432 <b>toxav_bit_rate_set(friend_number, audio_bit_rate, video_bit_rate)<\/b> \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0431\u0438\u0442\u0440\u0435\u0439\u0442\u043e\u0432. \u0411\u0438\u0442\u0440\u0435\u0439\u0442\u044b \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0432 Kb\/s (\u043a\u0438\u043b\u043e\u0431\u0438\u0442\u044b \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443), \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043e\u0431 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 -1 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0431\u0438\u0442\u0440\u0435\u0439\u0442 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/p>\n<p>  \u0414\u043b\u044f \u0430\u0443\u0434\u0438\u043e \u043a\u043e\u0434\u0435\u043a\u0430 opus \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0438\u0442\u0440\u0435\u0439\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 6, \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0448\u0435 16-32 \u043d\u0430 \u043c\u043e\u0439 \u0441\u043b\u0443\u0445 \u0443\u0436\u0435 \u043d\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u043c\u044b \u0434\u043b\u044f \u0437\u0432\u0443\u043a\u0430 \u0441 \u0432\u0435\u0431-\u043a\u0430\u043c\u0435\u0440\u044b.<\/p>\n<p>  \u0414\u043b\u044f \u0432\u0438\u0434\u0435\u043e \u043a\u043e\u0434\u0435\u043a\u0430 V8 \u044f \u043d\u0435 \u0441\u043c\u043e\u0433 \u043d\u0430\u0439\u0442\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e\u043b\u043e\u0441\u044b \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0430\u0434\u0440\u0430 \u0438 FPS. \u0412 \u043e\u0431\u0449\u0435\u043c \u0436\u0435 \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432\u0438\u0434\u0435\u043e <a href=\"http:\/\/www.ezs3.com\/public\/What_bitrate_should_I_use_when_encoding_my_video_How_do_I_optimize_my_video_for_the_web.cfm\">\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e\u0442\u0441\u044f<\/a> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0431\u0438\u0442\u0440\u0435\u0439\u0442\u044b:  <\/p>\n<table>\n<tr>\n<th>\u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0434\u0440\u0430, px<\/th>\n<th>\u0431\u0438\u0442\u0440\u0435\u0439\u0442, Kb\/s<\/th>\n<\/tr>\n<tr>\n<td>320&#215;240<\/td>\n<td>400<\/td>\n<\/tr>\n<tr>\n<td>480&#215;270<\/td>\n<td>700<\/td>\n<\/tr>\n<tr>\n<td>1024&#215;576<\/td>\n<td>1500<\/td>\n<\/tr>\n<tr>\n<td>1280&#215;720<\/td>\n<td>2500<\/td>\n<\/tr>\n<tr>\n<td>1920&#215;1080<\/td>\n<td>4000<\/td>\n<\/tr>\n<\/table>\n<p>  <b>toxav_audio_receive_frame_cb(friend_number, pcm, sample_count, channels, sampling_rate)<\/b> \u2014 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u0434\u0440\u0430 \u0430\u0443\u0434\u0438\u043e \u0434\u0430\u043d\u043d\u044b\u0445. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0431\u0443\u0444\u0435\u0440 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u044d\u043c\u043f\u043b\u043e\u0432, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u0438\u0437\u0430\u0446\u0438\u0438 (Hz). \u0414\u043b\u044f \u0441\u0442\u0435\u0440\u0435\u043e \u0437\u0432\u0443\u043a\u0430 16-\u0438 \u0431\u0438\u0442\u043d\u044b\u0435 \u043e\u0442\u0441\u0447\u0435\u0442\u044b \u0438\u0434\u0443\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433 \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u0434\u043b\u044f \u043b\u0435\u0432\u043e\u0433\u043e \u0438 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430. \u0420\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0444\u0435\u0440\u0430 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a <b>sample_count * channels * 2 byte<\/b>, \u0430 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u0443\u0444\u0435\u0440\u0430 \u0432 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 \u043a\u0430\u043a <b>sampling_rate \/ sample_count<\/b>.<\/p>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 PCM \u2014 \u044d\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/\u0418\u043c\u043f\u0443\u043b\u044c\u0441\u043d\u043e-\u043a\u043e\u0434\u043e\u0432\u0430\u044f_\u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u044f\">\u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043d\u043e-\u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u0438<\/a>, \u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0444\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0435\u0437 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0432 \u043b\u044e\u0431\u043e\u0439 \u0426\u0410\u041f \u0438\u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432 \u0444\u0430\u0439\u043b WAV \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 <a href=\"http:\/\/audiocoding.ru\/article\/2008\/05\/22\/wav-file-structure.html\">\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a<\/a> \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0430, \u043e\u0434\u043d\u0430\u043a\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0431\u044b\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430 \u043b\u044e\u0431\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0430\u0443\u0434\u0438\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u043e\u0439.<\/p>\n<p>  <b>toxav_video_receive_frame_cb(friend_number, width, height, y, u, v, ystride, ustride, vstride)<\/b> \u2014 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u0434\u0440\u0430 \u0432\u0438\u0434\u0435\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 YUV420. \u042d\u0442\u043e \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 callback \u0438\u0437 ToxAV. \u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437 YUV420 \u0432 BGR \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u00b5Tox (<a href=\"https:\/\/github.com\/GrayHatter\/uTox\/blob\/develop\/util.c\">yuv420tobgr<\/a>).<\/p>\n<p>  <b>toxav_video_receive_frame_cb(friend_number, width, height, rgb)<\/b> \u2014 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u0434\u0440\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 RGB \u0438\u043b\u0438 BGR \u2014 \u044d\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 callback \u043e\u0431\u0435\u0440\u0442\u043a\u0438 python, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 ToxAV. \u0414\u0430\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u0445 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0432 pyhon (\u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f yuv420tobgr \u0438\u0437 \u043a\u043e\u0434\u0430 \u00b5Tox). \u0424\u043e\u0440\u043c\u0430\u0442 RGB \u0438\u043b\u0438 BGR \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432\u043e\u043c <b>toxav_video_frame_format_set<\/b> \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c:<\/p>\n<ul>\n<li><b>TOXAV_VIDEO_FRAME_FORMAT_BGR<\/b> \u2014 \u0444\u043e\u0440\u043c\u0430\u0442 BGR (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 OpenCV).<\/li>\n<li><b>TOXAV_VIDEO_FRAME_FORMAT_RGB<\/b> \u2014 \u0444\u043e\u0440\u043c\u0430\u0442 RGB.<\/li>\n<li><b>TOXAV_VIDEO_FRAME_FORMAT_YUV420<\/b> \u2014 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 callback \u0438\u0437 ToxAV \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c YUV420.<\/li>\n<\/ul>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0438 \u0434\u0430\u043b\u0435\u0435 \u043f\u043e\u0434 RGB \/ BGR \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f 24-\u0445 \u0431\u0438\u0442\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0431\u0435\u0437 \u0430\u043b\u044c\u0444\u0430-\u043a\u0430\u043d\u0430\u043b\u0430, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e, \u0437\u0435\u043b\u0435\u043d\u043e\u0433\u043e \u0438 \u0441\u0438\u043d\u0435\u0433\u043e \u0446\u0432\u0435\u0442\u0430 \u043e\u0442\u0432\u0435\u0434\u0435\u043d\u043e \u043f\u043e 8 \u0431\u0438\u0442. \u0418\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u0438\u043c\u0435\u043d\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a RGB24 \/ BGR24 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0445 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e \u0438 \u0441\u0438\u043d\u0435\u0433\u043e.<\/p>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u0434\u043b\u044f \u0430\u0443\u0434\u0438\u043e \u043f\u043e\u0442\u043e\u043a\u0430, \u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u0438\u0434\u0435\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u043e\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0434\u0440\u0430).<\/p>\n<h1>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439<\/h1>\n<p>  \u0414\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 ToxAV \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 <b>toxav_iterate<\/b> (\u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0430 \u044f\u0434\u0440\u0430 <b>tox_iterate<\/b>) \u0441 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c \u043c\u0435\u0436\u0434\u0443 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 \u0440\u0430\u0432\u043d\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0435\u0440\u043d\u0435\u0442 \u0432\u044b\u0437\u043e\u0432 <b>toxav_iteration_interval<\/b> (\u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u044f\u0434\u0440\u0430 <b>tox_iteration_interval<\/b>).<\/p>\n<p>  \u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0446\u0438\u043a\u043b \u0434\u043b\u044f ToxAV \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435, \u0442.\u043a. \u0432 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0430\u0443\u0434\u0438\u043e\/\u0432\u0438\u0434\u0435\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <b>toxav_iteration_interval<\/b> \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c 200 ms \u0438 \u043f\u043e\u0442\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u0441\u043f\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438:<\/p>\n<pre><code class=\"python\">import threading  class EchoAVBot(ToxAV):     def __init__(self, core):         ...         self.running = True         self.iterate_thread = threading.Thread(target = self.iterate_cb)         self.iterate_thread.start()      def iterate_cb(self):         while self.running:             self.toxav_iterate()             interval = self.toxav_iteration_interval()             time.sleep(float(interval) \/ 1000.0)      def stop(self):         self.running = False         self.iterate_thread.join()         self.toxav_kill(); <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0434\u043b\u044f python \u0443 \u043d\u0430\u0441 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 GIL (Global Interpreter Lock), \u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u0430\u0431\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438, \u043e\u0434\u043d\u0430\u043a\u043e \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0442\u044c \u00ab\u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0435\u00bb \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u044b, \u043a\u043e\u0433\u0434\u0430 tox<b>av<\/b>_*_cb \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0437\u0432\u0430\u043d\u044b \u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u0430 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u044e\u0449\u0435\u0433\u043e tox_iterate \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u044e\u0449\u0435\u0433\u043e tox<b>av<\/b>_iterate. \u0422\u0430\u043a\u0438\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0435\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0437\u0432\u043e\u043d\u043a\u0430 <b>toxav_call_state_cb<\/b> \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 deadlock \u0432\u043d\u0443\u0442\u0440\u0438 \u044f\u0434\u0440\u0430 Tox.<\/p>\n<h1>\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0432\u043e\u043d\u043a\u0430\u043c\u0438<\/h1>\n<p>  \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0437\u0432\u043e\u043d\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 <b>toxav_call(friend_number, audio_bit_rate, video_bit_rate)<\/b>, \u0433\u0434\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 \u0438\u0437 \u043a\u043e\u043d\u0442\u0430\u043a\u0442-\u043b\u0438\u0441\u0442\u0430 \u0438 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u0431\u0438\u0442\u0440\u0435\u0439\u0442 (Kb\/s). \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0438\u0442\u0440\u0435\u0439\u0442\u0430 0 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0437\u0436\u0435 \u0432\u044b\u0437\u043e\u0432\u043e\u043c <b>toxav_bit_rate_set<\/b>.<\/p>\n<p>  \u0423 ToxAV \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0439 \u043d\u0430\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u0432\u044b\u0437\u043e\u0432\u0430 \u2014 \u043d\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0434\u043b\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u043a\u0430 \u0432\u044b\u0437\u043e\u0432 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043c\u0435\u043d\u0435\u043d \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443-\u043b\u0438\u0431\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c\u0443 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0443 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u00ab\u043f\u043e\u043b\u043e\u0436\u0438\u0442 \u0442\u0440\u0443\u0431\u043a\u0443\u00bb), \u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u043d\u0435 \u0443\u0439\u0434\u0435\u0442 \u0432 offline (\u00ab\u043e\u0431\u0440\u044b\u0432 \u0441\u0435\u0442\u0438\u00bb \u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 <b>toxav_call_state_cb<\/b> \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <b>TOXAV_FRIEND_CALL_STATE_FINISHED<\/b>). \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u0440\u0438\u0435\u043c \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d \u0432\u044b\u0437\u043e\u0432\u043e\u043c <b>toxav_call_control<\/b>.<\/p>\n<p>  \u0412\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0435\u043c <b>toxav_call_cb<\/b>, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u044b\u0437\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d, \u0442\u0430\u043a \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u043e\u0442\u0432\u0435\u0442\u043e\u043c \u043d\u0430 \u0437\u0432\u043e\u043d\u043e\u043a \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 <b>toxav_call_control<\/b>.<\/p>\n<p>  \u0414\u043b\u044f \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u0437\u0432\u043e\u043d\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 <b>toxav_answer(friend_number, audio_bit_rate, video_bit_rate)<\/b>, \u0433\u0434\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 \u0438\u0437 \u043a\u043e\u043d\u0442\u0430\u043a\u0442-\u043b\u0438\u0441\u0442\u0430, \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0435\u0433\u043e \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432, \u0438 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u0431\u0438\u0442\u0440\u0435\u0439\u0442 (Kb\/s). \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0438\u0442\u0440\u0435\u0439\u0442\u0430 0 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0437\u0436\u0435 \u0432\u044b\u0437\u043e\u0432\u043e\u043c <b>toxav_bit_rate_set<\/b>.<\/p>\n<p>  \u0414\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0437\u0432\u043e\u043d\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 <b>toxav_call_control(friend_number, control)<\/b>, \u0433\u0434\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b:<\/p>\n<ul>\n<li><b>TOXAV_CALL_CONTROL_RESUME<\/b> \u2014 \u0432\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0432\u043e\u043d\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u043d\u0435\u0435 \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043d\u0430 \u043f\u0430\u0443\u0437\u0443, \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u0437\u0432\u043e\u043d\u043e\u043a.<\/li>\n<li><b>TOXAV_CALL_CONTROL_PAUSE<\/b> \u2014 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u0432\u043e\u043d\u043a\u0430 \u043d\u0430 \u043f\u0430\u0443\u0437\u0443 (\u0443\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u0430, hold), \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u0437\u0432\u043e\u043d\u043e\u043a.<\/li>\n<li><b>TOXAV_CALL_CONTROL_CANCEL<\/b> \u2014 \u0441\u0431\u0440\u043e\u0441 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0438\u043b\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0437\u0432\u043e\u043d\u043a\u0430.<\/li>\n<li><b>TOXAV_CALL_CONTROL_MUTE_AUDIO<\/b> \u2014 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0440\u0435\u0441\u043f\u043e\u043d\u0434\u0435\u043d\u0442\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0430\u0443\u0434\u0438\u043e \u0434\u0430\u043d\u043d\u044b\u0445 (\u0440\u0435\u0441\u043f\u043e\u043d\u0434\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441).<\/li>\n<li><b>TOXAV_CALL_CONTROL_UNMUTE_AUDIO<\/b> \u2014 \u043e\u043f\u0440\u0430\u0432\u043a\u0430 \u0440\u0435\u0441\u043f\u043e\u043d\u0434\u0435\u043d\u0442\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u0432\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0430\u0443\u0434\u0438\u043e \u0434\u0430\u043d\u043d\u044b\u0445.<\/li>\n<li><b>TOXAV_CALL_CONTROL_HIDE_VIDEO<\/b> \u2014 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0440\u0435\u0441\u043f\u043e\u043d\u0434\u0435\u043d\u0442\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432\u0438\u0434\u0435\u043e \u0434\u0430\u043d\u043d\u044b\u0445 (\u0440\u0435\u0441\u043f\u043e\u043d\u0434\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441).<\/li>\n<li><b>TOXAV_CALL_CONTROL_SHOW_VIDEO<\/b> \u2014 \u043e\u043f\u0440\u0430\u0432\u043a\u0430 \u0440\u0435\u0441\u043f\u043e\u043d\u0434\u0435\u043d\u0442\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u0432\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432\u0438\u0434\u0435\u043e \u0434\u0430\u043d\u043d\u044b\u0445.<\/li>\n<\/ul>\n<p>  <\/p>\n<h1>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432<\/h1>\n<p>  \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0430\u0443\u0434\u0438\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 <b>toxav_audio_send_frame(friend_number, pcm, sample_count, channels, sampling_rate)<\/b>, \u0433\u0434\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 \u0438\u0437 \u043a\u043e\u043d\u0442\u0430\u043a\u0442-\u043b\u0438\u0441\u0442\u0430, \u0431\u0443\u0444\u0435\u0440 PCM \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u044d\u043c\u043f\u043b\u043e\u0432, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 <b>toxav_audio_receive_frame_cb<\/b> \u0434\u043b\u044f \u0441\u0442\u0435\u0440\u0435\u043e \u043f\u043e\u0442\u043e\u043a\u0430 16-\u0438 \u0431\u0438\u0442\u043d\u044b\u0435 \u043e\u0442\u0441\u0447\u0435\u0442\u044b \u0434\u043b\u044f \u043b\u0435\u0432\u043e\u0433\u043e \u0438 \u043f\u0440\u0430\u0432\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0434\u0442\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433 \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u043c.<\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043d\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 2 (\u0441\u0442\u0435\u0440\u0435\u043e), \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f 8, 12, 16, 24 \u0438 48 KHz \u0438 \u0438\u0437 \u0437\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u043a\u043e\u0434\u0435\u043a\u0430 opus, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u044d\u043c\u043f\u043b\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u0434\u0440\u0430 \u0432 2.5, 5, 10, 20, 40 \u0438\u043b\u0438 60 ms.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043a\u0430\u0434\u0440\u0430 \u0432\u0438\u0434\u0435\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 <b>toxav_video_send_frame<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 python \u043e\u0431\u0435\u0440\u0442\u043a\u0435 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d \u0432 <b>toxav_video_send_yuv420_frame(friend_number, width, height, y, u, v)<\/b>, \u0433\u0434\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 \u0438\u0437 \u043a\u043e\u043d\u0442\u0430\u043a\u0442-\u043b\u0438\u0441\u0442\u0430, \u0448\u0438\u0440\u0438\u043d\u0430 \u0438 \u0432\u044b\u0441\u043e\u0442\u0430 \u043a\u0430\u0434\u0440\u0430 \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u0445, \u0431\u0443\u0444\u0435\u0440\u044b Y (\u044f\u0440\u043a\u043e\u0441\u0442\u044c) \u0438 \u0446\u0432\u0435\u0442\u043e\u0440\u0430\u0437\u043d\u043e\u0441\u0442\u043d\u044b\u0435 U-V.<\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437 BGR \u0432 YUV420 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u00b5Tox (<a href=\"https:\/\/github.com\/GrayHatter\/uTox\/blob\/develop\/util.c\">bgrtoyuv420<\/a>). \u0412 python \u043e\u0431\u0435\u0440\u0442\u043a\u0435 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043c\u0435\u0442\u043e\u0434\u044b <b>toxav_video_send_bgr_frame(friend_number, width, height, bgr)<\/b> \u0438 <b>toxav_video_send_rgb_frame(friend_number, width, height, rgb)<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e (\u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f bgrtoyuv420 \u0438\u0437 \u043a\u043e\u0434\u0430 \u00b5Tox).<\/p>\n<h1>\u041f\u0440\u0438\u043c\u0435\u0440\u044b<\/h1>\n<p>  Python \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c \u0434\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b. \u0414\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043e\u0439 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u0432\u044b\u0448\u0435\u0438\u0437\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <a href=\"https:\/\/github.com\/abbat\/pytoxcore\/tree\/master\/examples\">\u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432<\/a>:<\/p>\n<p>  <a href=\"https:\/\/github.com\/abbat\/pytoxcore\/blob\/master\/examples\/echobot.py\">echobot.py<\/a> \u2014 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 echo-\u0431\u043e\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0435\u043c\u0443 \u0442\u0435\u043a\u0441\u0442\u043e\u043c. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c\u0438, \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u043c\u0438, \u0430\u0432\u0430\u0442\u0430\u0440\u043a\u0430\u043c\u0438, \u0444\u0430\u0439\u043b\u0430\u043c\u0438. \u042f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0430\u0437\u043e\u0432\u044b\u043c \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432.<\/p>\n<p>  <a href=\"https:\/\/github.com\/abbat\/pytoxcore\/blob\/master\/examples\/echoavbot.py\">echoavbot.py<\/a> \u2014 \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e echo-\u0431\u043e\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u043c\u0443 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0435\u043c\u0443 \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u043f\u043e\u0442\u043e\u043a\u0438. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u043e\u0431\u0435\u043d \u0434\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u0441\u0435\u0442\u0438 \u043d\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438, \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  <a href=\"https:\/\/github.com\/abbat\/pytoxcore\/blob\/master\/examples\/avbot.py\">avbot.py<\/a> \u2014 \u0431\u043e\u0442 \u0434\u043b\u044f \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u0438 \u0440\u0435\u0441\u043f\u043e\u043d\u0434\u0435\u043d\u0442\u0430, \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u043e\u0431\u0435\u043d \u0434\u043b\u044f \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u0437\u0430 \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u043c\u0438 \u0436\u0438\u0432\u043e\u0442\u043d\u044b\u043c\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \ud83d\ude42<\/p>\n<h1>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h1>\n<p>  \u041f\u0440\u043e\u0435\u043a\u0442 Tox \u0436\u0438\u0432 \u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f. <a href=\"http:\/\/habrahabr.ru\/post\/264383\/\">\u0420\u0430\u0437\u0440\u044b\u0432 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u0441 Tox Foundation<\/a> \u043d\u0438\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0437\u0430\u0442\u043e\u0440\u043c\u043e\u0437\u0438\u043b \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438, \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0434\u0430\u043b \u0435\u043c\u0443 \u0432\u0442\u043e\u0440\u043e\u0435 \u0434\u044b\u0445\u0430\u043d\u0438\u0435 \u2014 \u043d\u0430\u0447\u0430\u043b\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f PR, \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0442\u0438\u043a\u0435\u0442\u044b, \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0441\u0430\u0439\u0442 \u0438 \u0432\u0435\u0434\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043d\u0430\u0434 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432 \u0441\u043a\u043e\u0440\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u044f\u0434\u0440\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043b\u0438\u0442\u0430 <a href=\"https:\/\/github.com\/JFreegman\/toxcore.git\">\u0432\u0435\u0442\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0433\u0440\u0443\u043f\u043f\u043e\u0432\u044b\u043c\u0438 \u0447\u0430\u0442\u0430\u043c\u0438<\/a> \u0438 \u044f\u0434\u0440\u043e \u043f\u0440\u0438\u043c\u0435\u0442 \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u0435\u0434\u0440\u0435\u043b\u0438\u0437\u043d\u044b\u0439 \u0432\u0438\u0434.<\/p>\n<h1>\u0421\u0441\u044b\u043b\u043a\u0438<\/h1>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/tox.chat\/\">tox.chat<\/a> \u2014 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0430\u0439\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Tox.<\/li>\n<li>\u041f\u0440\u043e\u0435\u043a\u0442 \u044f\u0434\u0440\u0430 <a href=\"https:\/\/github.com\/irungentoo\/toxcore\">toxcore \u043d\u0430 github<\/a>.<\/li>\n<li>\u041f\u0440\u043e\u0435\u043a\u0442 python-\u043e\u0431\u0435\u0440\u0442\u043a\u0438 <a href=\"https:\/\/github.com\/abbat\/pytoxcore\">pytoxcore \u043d\u0430 github<\/a>.<\/li>\n<li>\u041f\u0440\u043e\u0435\u043a\u0442 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a <a href=\"https:\/\/github.com\/abbat\/tox.pkg\">tox.pkg \u043d\u0430 github<\/a> \u0432\u043a\u043b\u044e\u0447\u0430\u044f oldstable \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u044b \u0442\u0438\u043f\u0430 Debian Wheezy, Ubuntu Precise \u0438 CentOS 6, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u00ab\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435\u00bb \u0441\u0431\u043e\u0440\u043a\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f.<\/li>\n<\/ul>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/272999\/\"> http:\/\/habrahabr.ru\/post\/272999\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       \u041f\u043e\u043a\u0430 \u043e\u0434\u043d\u0438 \u043b\u044e\u0434\u0438 \u0434\u0443\u043c\u0430\u044e\u0442 \u043e \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u043e\u0432, \u0434\u0440\u0443\u0433\u0438\u0435 \u043b\u044e\u0434\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u044b. \u0412 <a href=\"https:\/\/habrahabr.ru\/post\/264179\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/a> \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u043e\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 API \u044f\u0434\u0440\u0430 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430 Tox \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e echo-\u0431\u043e\u0442\u0430. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 Tox \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u0438 3-\u0433\u043e \u043d\u043e\u044f\u0431\u0440\u044f \u044f\u0434\u0440\u043e Tox <a href=\"https:\/\/blog.tox.chat\/2015\/11\/new-tox-av-api\/\">\u043e\u0431\u043e\u0433\u0430\u0442\u0438\u043b\u043e\u0441\u044c<\/a> \u043d\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u2014 <b>ToxAV<\/b> \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0438 \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/7bb\/28c\/d78\/7bb28cd781a34835ac3156c432bc4527.png\" alt=\"image\"\/><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-270232","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/270232","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=270232"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/270232\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=270232"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=270232"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=270232"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}