Что такое webrtc и как его отключить

Selecting a test client

Load testing is typically done with a single client to control for client impacts. Ideally you can run many instances of the test client in parallel in a single virtual machine (VM). Since this is WebRTC, it makes sense to use one of the browsers. Edge and Safari are limited to a single process, which does not make they very suitable. Additionally, Safari only runs MacOS or iOS, which only runs on Apple hardware. It is relatively easy to spawn a million VMs on AWS if you’re running Windows or Linux. It’s quite a bit more difficult, and costly, to setup one million Macs, iPhones, or iPads for testing (Note, I am still dreaming about this though).

That leaves you with Chrome or Firefox which allow multiple instances just fine. It is our opinion that the implementation of webdriver for Chrome is easier to manage with fewer flags and plugins (i.e. H264) to handle, so we chose to use Chrome.


First a few disclaimers. All teams have seen and commented on the result of their SFUs.

The Kurento Media Server team is aware that their server is currently crashing early and we are working with them to address this. On Kurento/OpenVidu, we tested max 140 streams (since it crashes so early).

In addition, there is a known bug in libnice, which affected both Kurento/OpenVidu and Janus during our initial tests.  After a libnice patch was applied as advised by the Janus team, their results significantly improved.  However, the re-test with the patch on Kurento/OpenVidu actually proved even worse. Our conclusion was that there are other issues with Kurento. We are in contact with them and working on fixes so, the Kurento/OpenVidu results might improve soon.

The latest version of Jitsi Videobridge (up to the point of this publication) always became unstable at exactly 240 users. The Jitsi team is aware of that and working on the problem. They have however pointed out that their general advice is to rely on horizontal scaling with a larger number of smaller instances as described here. Note that a previous version (as two months ago) did not have these stability issues but did not perform as well (see more on this in the next section). We chose to keep version 0.1.1077 as it included made simulcast much better and improved the results significantly (up to 240 participants, that is).

Also note nearly all of these products have had version releases since testing. Some have made improvements since the test results shown here.

Что по вашему IP-адресу можно узнать о вас и вашем местоположении

Ваш IP-адрес дает довольно подробную информацию о вашем местоположении:

  • Город
  • Страна
  • Штат/область
  • Почтовый индекс

Веб-сайты, которые вы посещаете, могут собрать еще больше информации о вас. Объединив данные об IP-адресе с другой информацией, полученной из метаданных, файлов cookie, трекеров и цифровых отпечатков браузера, владельцы веб-сайтов, маркетологи и рекламодатели могут составить достаточно подробный профиль о вас.

Они могут собрать по кусочкам и соединить воедино информацию о вашем местоположении, о веб-сайтах, которые вы посещаете, о том, что вас интересует, какие файлы вы скачиваете через торренты, с кем вы общаетесь и т. д., и показывать вам целевую рекламу или продать ваши данные тем, кто больше заплатит.

Интернет-провайдеры имеют доступ к гораздо большему количеству информации. Вашему интернет-провайдеру известно почти всё о вас. Так как вы являетесь их клиентом, они знают ваше имя, адрес, номер телефона, номер кредитной карты, данные банковского счета, кредитную историю и, возможно, много чего еще.

В таких странах, как Австралия и Великобритания, интернет-провайдеры обязаны регистрировать все ваши действия онлайн и передавать данные бесчисленным правительственным учреждениям без ордера. Если вы просматриваете веб-сайты, не защищенные протоколом HTTPS, ваш интернет-провайдер может видеть отдельные незашифрованные веб-страницы, на которые вы заходите.


Prebuilt libraries

The easiest way to get started is using the official prebuilt libraries
available at JCenter. These libraries are compiled from the tip-of-tree and are
meant for development purposes only.

On Android Studio 3 add to your dependencies:

On Android Studio 2 add to your dependencies:

The version of the library is . The hash of the commit
can be found in the .pom-file. The third party licenses can be found in the
THIRD_PARTY_LICENSES.md file next to the .aar-file.

Getting the Code

Android development is only supported on Linux.

  1. Install prerequisite software

  2. Create a working directory, enter it, and run:

This will fetch a regular WebRTC checkout with the Android-specific parts
added. Notice that the Android specific parts like the Android SDK and NDK are
quite large (~8 GB), so the total checkout size will be about 16 GB.
The same checkout can be used for both Linux and Android development since you
can generate your Ninja project files in different directories for each
build config.

See Development for instructions on how to update
the code, building etc.


  1. Generate projects using GN.

    Make sure your current working directory is src/ of your workspace.
    Then run:

    You can specify a directory of your own choice instead of ,
    to enable managing multiple configurations in parallel.

    • To build for ARM64: use
    • To build for 32-bit x86: use
    • To build for 64-bit x64: use
  2. Compile using:

Using the Bundled Android SDK/NDK

In order to use the Android SDK and NDK that is bundled in
, run this to get it included in your (from

Then you’ll have and all the other Android tools in your .

Running the AppRTCMobile App

AppRTCMobile is an Android application using WebRTC Native APIs via JNI (JNI
wrapper is documented here).

For instructions on how to build and run, see

Using Android Studio

Note: This is known to be broken at the moment. See bug:

  1. Build the project normally (out/Debug should be the directory you used when
    generating the build files using GN):

  2. Generate the project files:

  3. Import the project in Android Studio. (Do not just open it.) The project
    is located in . If asked which SDK to use, choose to use
    Android Studio’s SDK. When asked whether to use the Gradle wrapper, press

  4. Ensure target is selected and press Run.
    AppRTCMobile should now start on the device.

If you do any changes to the C++ code, you have to compile the project using
ninja after the changes (see step 1).

Note: Only “arm” is supported as the target_cpu when using Android Studio. This
still allows you to run the application on 64-bit ARM devices. x86-based devices
are not supported right now.

Running WebRTC Native Tests on an Android Device

To build APKs with the WebRTC native tests, follow these instructions.

  1. Ensure you have an Android device set in Developer mode connected via

  2. Compile as described in the section above.

  3. To see which tests are available: look in .

  4. Run a test on your device:

  5. If you want to limit to a subset of tests, use the ,

  6. NOTICE: The first time you run a test, you must accept a dialog on
    the device!

If want to run Release builds instead; pass to GN (and
preferably generate the projects files into a directory like ).
Then use the scripts generated in instead.

Running WebRTC Instrumentation Tests on an Android Device

The instrumentation tests (like AppRTCMobileTest and
libjingle_peerconnection_android_unittest) gets scripts generated in the same
location as the native tests described in the previous section.


Most people interested in scalability questions will measure the CPU, RAM, and bandwidth footprints of the server as the “load” (streams, users, rooms…) ramps up. That is a traditional way of doing things that supposes that the quality of the streams, their bitrate… all stay equal.

WebRTC’s encoding engine makes this much more complex. WebRTC includes bandwidth estimation, bitrate adaptation and overall congestion control mechanism, one cannot assume streams will remain unmodified across the experiment. In addition to  the usual metrics, the tester also needs to record client-side metrics like sent bitrate, bandwidth estimation results and latency. It is also important to keep an eye on the video quality, as it can degrade way before you saturate the CPU, RAM and/or bandwidth of the server.

On the client side, we ended up measuring the following:

  • Rate of success and failures (frozen video, or no video)
  • Sender and receiver bitrates
  • Latency
  • Video quality (more on that in the next section)

Measuring different metrics on the server side can be as easy as pooling the getStats API yourself or integrating a solution like callstats.io. In our case, we measured:

  • CPU footprint,
  • RAM footprint,
  • Ingress and egress bandwidth in and out,
  • number of streams,
  • along with a few of other less relevant metrics.

The metrics above were not published in the Scientific article because of space limitation, but should be released in a subsequent Research Report.

All of these metrics are simple to produce and measure with the exception of video quality. What is an objective measure of video quality? Several proxies for video quality exist such as Google rendering time, received frames, bandwidth usage, but none of these gave an accurate measure.

Video quality metric

Ideally a video quality metric would be visually obvious when impairments are present.  This would allow one to measure the relative benefits of resilient techniques, such as like Scalable Video Coding (SVC), where conceptually the output video has a looser correlation with jitter, packet loss, etc. than other encoding methods. See the below video from Agora for a good example of a visual comparison:

After doing some quick research on a way to automate this kind of visual quality measurement, we realized that nobody had developed a method to assess the video quality as well as a human would in the absence of reference media with a  real-time stream. So, we went on to develop our own metric leveraging Machine Learning with neural networks. This allowed for real-time, on-the-fly video quality assessment. As an added benefit, it can be used without recording customer media, which is a sometimes a legal or privacy issue.

The specifics of this mechanism is beyond the scope of this article but you can read more about the video quality algorithm here. The specifics of this AI-based algorithm have been submitted for publication and will be made public as soon as it is accepted.

Show me the money results

We set up the following five open-source WebRTC SFUs, using the latest source code downloaded from their respective public GitHub repositories (except for Kurento/OpenVidu, for which the Docker container was used):

  • Jitsi Meet (JVB version 0.1.1077),
  • Janus Gateway (version 0.4.3) with its video room plugin,
  • Medooze (version 0.32.0) SFU app,
  • Kurento (from OpenVidu Docker container, Kurento Media Server version  6.7.0),
  • mediasoup (version 2.2.3),

Each was setup in a separate but identical Virtual Machine and with default configuration.

Как отключить WebRTC?

Из всех современных браузеров лучше всего поддается дрессировке Firefox. И в данном конкретном случае Firefox показал себя с лучшей стороны, давая возможность пользователю не используя сторонние дополнения, с помощью скрытых настроек отключить WebRTC.

Отключение WebRTC Firefox

Для отключения в браузере Firefox необходимо ввести в адресной строке команду about:config, после чего появится это сообщение.

Нажимаем на кнопку «Я обещаю…» и продолжаем дальше.

В окне настроек, в строке поиска (не в адресной строке!), как это показано на скрине ниже вводим команду media.peerconnection.enabled. Появится необходимая нам строка. Нажмем на нее правым шелчком мышки и в выпадающем меню выберем первый пункт «Переключить«.

После переключения в поле «Значение» вы должные увидеть параметр «False«. Теперь закрываем это окно и перегружаем браузер.

Еще один способ, это установить специальное расширение Disable WebRTC. Но я предпочитаю и вам советую выполнить эту операцию самим. Не люблю устанавливать программы на компьютер тем-более в браузер.

Есть еще более простой способ — скачать утилиту ConfigFox, которая кроме данной операции может значительно улучшить конфиденциальность и анонимность браузера Firefox. Об этой программе мы писали в статье «Настройки безопасности Firefox«. Я очень рекомендую использовать данную утилиту всем пользователям браузера Mozilla Firefox. Программа не устанавливает себя в браузер, а просто позволяет изменять файл настроек.

Отключение WebRTC Chrome

В браузере Google Chrome все немного сложнее. В Хроме нет возможности отключить данную функцию в самом браузере. Для этого необходимо скачать специальное дополнение, называется оно WebRTC Block. Скачать и установить дополнение вы можете по этой прямой ссылке. Мы не тестировали данное расширение и гарантий дать никаких не можем.

Также существует дополнение ScriptSafe, которое тоже может помочь в решении данной проблемы. На мой взгляд это лучший способ решить проблему WebRTC в Хроме.

С этим расширением неопытному пользователю будет сложнее, но если вы из продвинутых, то очень советую в нем поковыряться.

Отключение WebRTC Opera / Яндекс Браузер

Для браузера Opera есть несколько плагинов: WebRTC Leak Prevent и WebRTC Control. Лично не проверял пробуйте и пишите, что помогло, а что нет.

В заключение хочу сказать, что на данный момент не существует надежного сто процентного способа отключить WebRTC  в Chromium браузерах таких как: Chrome, Yandex, Opera и т.д. Поэтому я советуют всем, кто использует VPN и кому важна анонимность, временно прекратить пользоваться этими браузерами. Я думаю в скором будущем, эта дыра будет закрыта и вы сможете вернутся к ним. А пока можете временно переехать на Firefox.

На этом все. В следующих статьях будем говорить об анонимности и надежности VPN и публичных Proxy. Будет весело, будем ломать стереотипы. Вам это понравится ;)!

Как подать хороший отчет об ошибке


  • Определите, какой багтрекер использовать:
    • Если вы столкнулись с проблемой в Chrome, сообщите об ошибке с помощью компонента Blink> WebRTC . Это можно сделать, выбрав «Я веб-разработчик, пытающийся что-то создать» и «Проблемы с браузерным API», и убедитесь, что на вашу ошибку посмотрят нужные люди.
    • Если вы разработчик, работающий с нативным кодом, сообщите об ошибке по этой ссылке .
  • Включите как можно больше данных, указанных ниже.

Примеры точек данных

  • Версия браузера / приложения
    • Для Chrome: копировать / вставить из Chrome: // версия
    • Для собственного кода WebRTC: если применимо, включите ветку (например, транк) и ревизию WebRTC (например, r8207), которую использует ваше приложение
  • Операционная система (Windows, Mac, Linux, Android, iOS и т. Д.) И версия (например, Windows 7, OS X 10.9, Ubuntu 14 и т. Д.)
  • Аппаратная платформа / модель устройства (например, ПК, Mac, Samsung 4S, Nexus 7, iPhone 5S, iPad Air 2 и т. Д.)
  • Модель и версия камеры и микрофона (если применимо)
  • URL веб-сайта
  • Этапы воспроизведения: подробная информация о том, как воспроизвести ошибку. Если применимо, пожалуйста, приложите или укажите минимальную тестовую страницу в HTML + JavaScript.
  • Для сбоев
    • Если во время использования Chrome произошел сбой, укажите идентификатор сбоя, выполнив следующие инструкции .
    • Если вы столкнулись с ошибкой при использовании собственного кода WebRTC, пожалуйста, включите полную трассировку стека.
  • Для функциональных проблем или проблем ICE, в Chrome или в собственном приложении, соберите собственный журнал .
  • Для проблем с подключением в Chrome убедитесь, что chrome: // webrtc-internals открыт на другой вкладке перед началом вызова и во время вызова,
    • разверните раздел Создать дамп,
    • нажмите кнопку Загрузить обновления данных и статистики PeerConnection. Вам будет предложено сохранить дамп на локальном компьютере. Пожалуйста, приложите этот дамп к сообщению об ошибке.
  • При возникновении проблем с качеством звука в Chrome во время разговора
    • пожалуйста, откройте chrome: // webrtc-internals в другой вкладке,
    • разверните раздел Создать дамп,
    • установите флажок Включить диагностические аудиозаписи. Вам будет предложено сохранить запись на локальном компьютере. После завершения вызова прикрепите запись к ошибке.
  • При возникновении проблем с эхом попробуйте захватить аудиозапись со стороны, которая генерирует эхо, а не со стороны, которая слышит эхо. Например, если пользователь A и пользователь B находятся в состоянии разговора, а пользователь A слышит речь, пожалуйста, получите аудиозапись от пользователя B.

Получение уведомлений об ошибках безопасности в Chrome

Чтобы получать автоматические уведомления об активности / комментариях об ошибках безопасности в Chrome, вам нужно либо явно указывать cc: d на определенные ошибки (кем-то, кто имеет доступ к этой ошибке), либо быть частью специального списка рассылки для всех уведомлений об ошибках безопасности. Чтобы попасть в этот список, вы должны обратиться в группу безопасности Chrome, подробнее об этом на странице безопасности Chrome в разделе «Как получить доступ к уязвимостям Chromium?» внизу страницы.

Обратите внимание, что список уведомлений безопасности Chrome будет получать уведомления обо всех ошибках безопасности в Chrome, а не только об WebRTC. Обычно это не должно быть проблемой, чтобы выяснить, влияет ли проблема на WebRTC, поскольку она, скорее всего, будет помечена одним из компонентов, связанных с WebRTC (одним из Blink> WebRTC, Blink> GetUserMedia, Blink> MediaStream, Blink> MediaRecording) или их подкомпоненты

Также обратите внимание, что доступ, предоставленный списком, будет применяться только к ошибкам Type = Bug-Security. Однако не все ошибки со сбоями, утечками памяти и другими потенциальными уязвимостями помечаются как ошибки безопасности

Вы можете узнать больше о том, какие категории ошибок считаются ошибками безопасности, в Руководстве по серьезности проблем безопасности, а также на странице FAQ по безопасности .

  1. Любой, кто имеет аккаунт Google, может ошибках

Подача ошибки безопасности

Команда WebRTC очень серьезно относится к безопасности. Если вы обнаружите уязвимость в WebRTC, пожалуйста, сообщите об ошибке безопасности Chromium , даже если эта ошибка затрагивает только собственный код WebRTC, а не Chromium.

Историю исправленных ошибок безопасности Chromium лучше всего найти в заметках по безопасности в обновлениях стабильного канала в блоге Google Chrome .

Вы также можете найти исправленные, общедоступные ошибки Type = Bug-Security в трекере проблем (примечание: ошибки безопасности обычно становятся общедоступными через 14 недель после их исправления). Если в коде WebRTC есть ошибка, которой не пользуется Chromium (например, обертки Java / ObjC для Android / iOS), мы отдельно объявим об исправлениях на Discussion-Webrtc .

Обратите внимание, что мы, как правило, НЕ объединяем исправления безопасности назад с любыми ветвями, поэтому, если вы используете более старые ветки, вы обязаны убедиться, что соответствующие исправления безопасности объединены

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *