История одной интеграции Agora SDK
Всем привет. Меня зовут Дмитрий, и я типичный представитель касты гребцов на галере X. Основной ЯП, который я использую — PHP, но иногда приходится писать на других.
Предыстория
Как-то пришел очередной, немного не доделанный, проект «убийца» продукта Y. Все бы ничего, если бы его не делали изначально индусы. Первоначальный анализ кода и все оценкой фич занимался другой разработчик. В итоге было решено взять наследие индусов, немного подправить и в прод.
Немного подправить и в продакшн, растянулось где-то на пол года. Все уже к этому времени поняли что лучше бы выбрали вариант — переписать заново, но было уже поздно, а отступать назад не хотелось. В итоге проект выехал live, но был чертовски страшный и неудобный со стороны UI/UX. Поэтому начался плавный редизайн всего и вся. Все что описано выше, было до меня, я пришел на проект только через пол года.
Постановка задачи и начальные условия
Новый спринт, новые тикеты. Одна из задач звучит как: «Редизайн текущего механизма видео/аудио звонков». Для данного функционала мы использовали Agora Web SDK 3.4.0v. Почему именно Agora — потому что ее выбрали индусы (скорее всего из-за 10000 бесплатных минут). Возможно еще подкупило то что есть SDK под различные платформы:

Поехали
Первый делом я глянул последнюю версию Web SDK. Как оказалось — уже вышла абсолютно новая мажорная версия Agora Web SDK 4.x. Ну, если мы все равно полностью редизайним — то почему бы и не взять новую версию и использовать ее. Все равно будет полный прогон со стороны QA, в добавок — поменялся сам флоу созвона. Сказано — сделано, только насторожила запись:

Вроде разговор идет только про несовместимость Web SDK (у нас еще используется React Native SDK для мобильных устройств), но осадок остался.
На новый дизайн и сервер ушло где-то 3 — 4 дня (не люблю верстать, но что поделать). Настало время самого интересного — запуск процесса интервью. В итоге была взята Agora Web SDK 4.4.0. В течение следующего дня получилось сделать всю JS часть для созвона по видео и ауди (со всеми плюшками). За основу был взят пример из их же гитхаба (если что, то в архиве с самой либой лежат похожие примеры интеграции)
Еще через день все было уже на testing энвайронменте. Первые пол дня тестов прошли хорошо, на web портале все более-менее работало. Настало время проверки звонков с разных платформ (один человек с мобильного девайса — второй с сайта).
Первый звоночек
При звонке с мобилы на web, и наоборот — звонок не устанавливается. Проверили на проде тот же кейс — все огонь. Значит что-то пошло не так. Так как код на мобильных девайсах не менялся вообще (на их стороне изначально подумали над дизайном и все продумали) — значит проблема на моей стороне. Первое действие — нужно подписаться на все события от SDK что доступны — https://docs.agora.io/en/Voice/API%20Reference/web_ng/interfaces/iagorartcclient.html и смотреть что, где всплывает. Каково же было мое удивление, когда я увидел пустоту в консоле хромиума. Да это же не может быть, что бы Agora Web SDK 4.4.0 была не совместима с Agora React Native API 3.х!

После многих попыток, хоть как-то это дело завести — пришло «Принятие». Что поделать, придется брать все же Agora Web SDK 3.x.
Новый день начинается со скачивания последней версии (в рамках 3.x) и переделкой существующего функционала под другой SDK. К счастью, дело пошло быстро и за первую половину дня — все было готово. На локальной машине все работало отлично. Решил протестировать с коллегой по офису (он должен открыть ветку с прода и попробовать созвонится). И хоп, мы получаем ту же проблему — звонок не устанавливается, но что обнадеживает — в консоле проскакивают логи, что оппонент по звонку выходит из румы (в терминах агоры — это channel). Ну хоть какой прогресс, по сравнению с 4.x.
После первых двух часов дебага — было решено взять код с прода и попробовать его запустить. К черту текущее решение, просто берем код с прода, вcтавляем в HTML, пробрасываем пару конфигов и запускаем. О чудо, все работает. Все друг друга видят и слышат. Первая хорошая новость за день. Значит минорные версии 3.x совместимы между собой (это вселяет надежду с мобилами). Быстро подчищаем код с HTML и переносим его в JS модули. Запускаем и получаем дырку от бублика. Да что ж за день то сегодня такой. Откатываемся назад на вариант с кодом в HTML — работает. Ладно, теперь это уже личное.
Переносим «строчку за строчкой» из HTML в JS модули и почти каждый раз проверяем локально и с коллегой. Хм. Почему же оно все еще работает? Когда была перенесена последняя строчка, я очень удивился. Код был почти один-в-один как после миграции на 3.x, который я получил пол дня назад и он РАБОТАЛ. А давай-ка я попробую запустить старый свой вариант на 3.x. Оп-па не работает. Истина где-то рядом. Как хорошо что есть гит и можно сравнить. Отбросив различия в кодстайле я был очень удивлен увиденным:

Да не может же быть, что бы я так лоханулся. Быстро открываем документацию по либе (uid используется для подключения к руме). Нас интересует метод join:

Все! Я больше не могу. Поеду я домой, рабочий день уже давно закончен.
Второй звоночек
Новый день — новые силы. Как оказалось — на проде используется number, потому что со стороны мобил (с их слов) было жесткое требование на int и ничего более. Успокаиваемся и работаем. Проверяем локально, потом с коллегой, все хорошо — едем на testing. Проверяем web — хорошо, мобилы — черный экран у того кто остался на вебе, но звук работает отлично. Хоть какой прогресс.
После пары часы дебага и проверки различный гипотез, я был готов сдаться, но здесь произошло чудо. Разраб со стороны мобил говорит что у него все работает. После того, как мы созвонились, через один из мессенджеров, и расшарили экран — я действительно убедился, все условия соблюдены и оно действительно работает. Начали искать отличия. Мы с коллегой в офисе. QA на уделенке дома. Разработчик мобильной версии в Латвии. Просим QA пере-проверить кейс со звонком на разных платформа, только пусть звонит на мне в офис, а кому-то вне офиса. О-да, работает. Мы где-то близко.
Услышав наши «горячие» споры в комнате офиса, глава департамента встает и говорит: «Парни, а вы используете STUN / TURN сервера?». Такие слова я слышал впервые, поэтому пришлось гуглить.
В общем, все сошлись на том что для текущей версии проекта — никто не будет пока подключать STUN / TURN сервера (ибо если бесплатные STUN еще можно найти, то бесплатных TURN нет).
Почему не догадались, что из-за NAT в офисе — ловим проблемы? Да потому что звук работал. И видео на одной стороне работало отлично. А как раз черный экран в видео мы уже получали, когда ловили кейсы, где один клиент инициировал созвон по связке rtc/vp8, а второй live/h264.
Appdata — что это за папка и что в ней хранится
Неопытным пользователям крайне не рекомендуется что-то удалять из системных папок Windows, потому что там хранятся важные файлы. Application data – специальный раздел, который скрыт от владельца ПК, но часть данных в нем только занимают место и не несут важной функции, поэтому необходимо знать, как получить доступ в эту директорию и почистить ее от «мусора». Ниже описаны способы анализа этой папки, что можно удалить и как это сделать.
Что хранится в папке Appdata
Директория Application Data по умолчанию недоступна для просмотра, относится к группе системных, содержится в подкаталогах с названием User. Скрытая папка Appdata содержит личные данные всех пользователей, которые зарегистрированы на этом компьютере. В ней хранится документация, созданная программным обеспечением с ПК, разработчики сделали ее скрытой. ЕЕ файлы не должны представлять интерес для рядового пользователя. Так, по крайней мере, рассуждают создатели Windows.
В реальности же практика использования системы показывает, что со временем скапливается большое количество данных и они занимают место на жестком диске. Это особенно ощутимо, если используется SSD-накопитель, который не имеет большого объема памяти. При этом часть файлов не будут использоваться совсем. Хранятся данные в следующих папках:
- Local;
- LocalLow;
- Roaming.
Для чего нужна
Windows записывает в AppData файлы программ, которые установлены на компьютере: кэш, конфигурационные документы, временные файлы, логи приложений, сохраненные сеансы и т.д. Программное обеспечение со своего компьютера имеет личную папку для хранения данных, это касается и антивируса, и принтера, и игр. К примеру, браузеры сохраняют в AppData данные профилей, в которые входят куки, кэш, расширения, историю просмотренных интернет-страниц.

Как найти Appdata на Windows
Папка по умолчанию скрыта от пользователя (даже с правами администратора), сделано это с учетом того, что обычному юзеру что-то удалять из этой директории не нужно. Некоторые программы не поддерживают функцию импорта и экспорта настроек, проектов и прочих параметров, если переустановить заново Windows. Если же скопировать эту папку и после переустановки операционной системы скопировать ее, то программы проще привести к прежнему состоянию. Для этого нужно знать, как найти AppData. Сделать это можно двумя путями:
- при помощи командной строки;
- изменить отображение содержимого и сделать видимыми скрытые директории.
Расположение в системе
Существует путь через директории, который приведет к AppData. Для этого вам нужно сделать следующее:
- Откройте «Мой компьютер».
- Зайдите на диск С.
- Найдите директорию «Пользователи» или «Users».
- Кликните на соответствующее имя пользователя.
- Здесь и находится заветная папочка.
Существует еще один способ, который поможет быстро переместиться в директорию даже без необходимости делать ее видимой. Можно воспользоваться следующей инструкцией:
- Кликните по пункту быстрого доступа «Пуск».
- Найдите функцию «Выполнить».
- Напишите в строку следующую команду %appdata%.
- Кликните Ок – и вы попадете в подкатегорию Roaming. Просто поднимитесь на один уровень выше – и окажетесь внутри AppData.
Как сделать скрытую папку видимой
Добраться по стандартному пути к директории AppData получится, если включить отображение невидимых каталогов. Это системная настройка, которая легко меняется в Виндовс 10 по следующему алгоритму:
- Откройте любую папку в проводнике.
- Найдите вкладку «Вид» в верхнем меню.
- В дополнительном меню справа будет раздел с названием «Параметры».
- Кликните по нему и нажмите на «Изменить параметры папок и поиска».
- Откроется дополнительное окно, перейдите на вкладку «Вид».
- Пролистайте список вниз, здесь нужно активировать опцию «Показывать скрытые файлы, папки и диски».
Если установлена другая версия операционной системы (7 или 8), то изменить настройки можно по следующему алгоритму:
- Откройте «Панель управления».
- Перейдите в меню «Оформление и персонализация».
- Кликните по надписи «Параметры папок».
- Здесь нажмите по вкладке «Вид».
- Пролистайте список параметров вниз и установите галочку напротив «Показывать скрытые файлы, папки и диски».
Структура системной папки
При работе с AppData необходимо учитывать, что у каждого пользователя, который завел учетную запись на компьютере, отдельная папка. Внесение изменений у пользователя А не распространяется на пользователя Б. При переходе в директорию вы увидите три папки, о которых говорилось ранее:
- Local;
- LocalLow;
- Roaming.
Каталог Local
Это первая директория, которая находится в AppData. В ней хранятся файлы и данные, относящиеся к локальному типу, их нельзя скопировать или перенести вместе с профилем пользователя. К примеру, тут можно найти загруженные файлы, которым не было указано конкретное место или сохраненные игры. Как правило, она имеет самый большой объем занимаемого места на винчестере.
Тут же хранится каталог под название Microsoft, который сохраняет всю активность операционной системы Windows. Local содержит каталог с временными файлами необходимые для ускорения загрузки программ, игр, созданные во время работы с ними. Называется папка «Temp». Содержимое директории постоянно растет и со временем начинает занимать много места. Это один из вариантов информации, которую можно безболезненно для операционной системы удалить.
Папка Roaming
Файлы из этой папки при необходимости человек может без проблем перенести, если появилась такая необходимость. К примеру, вы решили переустановить операционную систему. Скопируйте данные на съемный носитель, а после инсталляции просто скопируйте Roaming на место. Это поможет сохранить персональные настройки в первоначальном виде. Тут же хранится информация из интернет-проводников, закладок, сохраненные человеком.
Каталог LocalLow
Этот каталог похож на Local, но собирается в него информация из браузера или системы, когда пользователь работает в защищенном режиме. Директория не синхронизируется с другими учетными записями на компьютере.
Сканирование структуры с помощью WinDirStat
Это бесплатная программа, которая используется для анализа, просмотра актуальной статистики касательно состояния дискового пространства (винчестера), сколько занимают места файлы или папки. Инструмент WinDirStat проверят и AppData, при желании можно с ее помощью очистить от ненужных директорий, папок и файлов жесткий диск. Программа выдает подробный график и сведения о том, где, какие документы на вашем винчестере занимают место.

Что делать если папка Appdata занимает много места
Со временем информация накапливается, особенно если после последней переустановки Windows прошло много времени. Система не рассчитана на автоматическую очистку AppData, поэтому пользователь может вручную уменьшить ее объем. Первый вариант – очистка от временных файлов. При желании можно полностью удалить все содержимое каталога «Temp», в котором нет важных системных данных. В очистке могут помочь и специализированные программы, к примеру, Ccleaner.
Необязательно очищать AppData, ее можно просто переместить с системного диска, на котором всегда должен быть запас свободного места. Это особенно актуально, если вы пользуетесь SSD-диском. Используйте для этих целей следующую инструкцию:
- На другом диске создайте папку с таким же названием (на D), создайте соответствующие подпапки (LocalLow, Roaming, Local). По отдельности перенесите содержимое в соответствующие директории.
- Если появляется сообщение, что скопировать файл не получается, то просто пропускайте его. Это говорит о том, что приложение в данный момент запущено и использует этот документ.
- Запустите функцию «Выполнить» при помощи сочетания кнопок Win+R. Наберите в строке без кавычек «regedit».
- Откроется окно редактора реестра. Необходимо найти раздел под название «HKEY_CURRENT_USER», раскройте его и перейдите в «Software», затем в «Microsoft». Далее кликните по директории «Windows», затем по «CurrentVersion», зайдите в «Explorer». Здесь вам понадобится категория «Shell Folders».
- Найдите через поиск все строчки, которые содержат «AppData», измените изначальный адрес на D:/AppData.
- Перезагрузите компьютер.
Можно ли удалить полностью
Если вы выполнили инструкцию, которая описана выше (сменили расположение AppData), то с диска С ее нужно удалить. В остальных случаях стереть ее полностью не получится и не следует. Она хранит данные о программах, с которыми вы работаете, что будет конфликтовать при попытке их удалить. Если стереть папку полностью, то Windows будет продолжать работать, критических ошибок не будет, но приложения и программы либо запустятся со стандартными настройками, либо не запустятся совсем.
Как почистить Appdata
Допускается частичное удаление некоторых директорий, но система не всегда разрешает провести операцию. Связано это с тем, что приложение в данный момент запущено в активном или фоновом режиме. Как правило, запущен процесс Updater, который проверят наличие обновлений для конкретного приложения, подгружает его и инсталлирует. Чтобы удалить необходимый файл нужно:
- Нажмите сочетание клавиш Ctrl+Alt+Del (win 10 поддерживает комбинацию Ctrl+Shift+Esc).
- Запустите диспетчер задач и откройте вкладку «Процессы».
- Найдите по названию процесс, совпадающий с именем файла.
- Правой кнопкой кликните по строчке и выберите пункт «Завершить процесс».
- После этого вы сможете удалить папку из Appdata.
Встроенная утилита очистки диска Windows 10
Чтобы не менять настройки системы, не искать функцию показа скрытых директорий, воспользуйтесь стандартным инструментом операционной системы. Windows 10 может самостоятельно очистить временные документы из папки «Temp». Для этого вам нужно воспользоваться следующей инструкцией:
- Кликните правой кнопкой по меню «Пуск».
- Нажмите на строчку «Система».
- Слева нажмите на строчку под названием «Хранилище».
- Справа появится список разделов на вашем жестком (-их) диске (-ах). Нажмите на ярлык тома С.
- Система проведет анализ, покажет, сколько места занято разными приложениями. Найдите строчку с названием «Временные файлы», нажмите на нее.
- Откроется новое диалоговое окно с перечнем типов документов из этой директории.
- Установите необходимые галочки и кликните кнопку «Удалить файлы».
Удаление временных файлов с расширением TEMP вручную
Мусорные данные от софта накапливаются и «раздувают» объем AppData. Периодически рекомендуется проводить очистку этого каталога, чтобы увеличить размер свободного места на системном диске. Чтобы добраться до Temp, необязательно делать видимой AppData, можно воспользоваться специальными командами через строку браузера. Выполнить действие можно следующим образом:
- Запустите интернет-проводник и напишите в адресной строке «shell:history» (без кавычек). Вас перенаправит сразу же в папку с историей браузера Internet Explorer (он же Edge в 10-й версии Виндовс).
- Команда «shell:cache» откроет каталог с офлайн буфером обмена интернет-проводника.
- Команда «shell:cookies» открывает данные файлов «Куки» (Ckookie).
- Если написать «shell:sendto», появится возможность добавлять, удалять ярлыки из меню «Отправить».
С помощью CCleaner
Выполнение удаления элементов из Appdata, чтобы повысить производительность компьютера, можно сделать при помощи специального софта. Программа CCleaner помогает деинсталлировать приложения, чистит реестр от поврежденных и устаревших файлов, помогает освободить место на диске С. Это избавит от необходимости вручную проверять содержание директории. Для проведения процедуры необходимо:
Agora.Io – вопросы и ответы
Ищете еще? Найдите вопросы с помощью поисковой формы вверху страницы или с помощью рубрикатора, помогите ответить на вопросы без ответа.
Рубрики
progi.pro – один из крупнейших сервисов вопросов и ответов по программированию. У нас вы можете найти вопросы по языкам программирования Javascript, PHP, Java, C#, Python и многим другим.
А так же делитесь знаниями, знакомьтесь с новыми утилитами и приложениями, учитесь у всегда готовых помочь ответить на самые сложные вопросы во всех сферах IT и программирования. Станьте гуру и экспертом разработки ПО, получите признание коллег, заработайте репутацию, создайте стартап или приложение которое будет работать на вас!