WEBRTC без какого -либо сервера даже не возможно

Краткое содержание

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

1. Что такое webrtc?

WEBRTC-это набор компонентов, который позволяет разработчикам настраивать медиа-каналы в реальном времени и каналы данных между браузерами. Он был создан Google и содержит ключевые компоненты, которые поставляются в Chrome, Firefox, Opera и Microsoft Edge (ORTC).

2. Зачем вам сервис бэкэнд?

Несмотря на возможности WEBRTC, для определенных функциональных возможностей требуется бэкэнд -сервис. Например, чтобы позвонить кому -то, вам нужно знать его адрес, который обычно является динамичным. Эта информация должна храниться и управлять на сервере. Кроме того, бэкэнд -сервис может отслеживать все устройства для пользователя и уведомить их о входящих звонках.

3. Какие компоненты и оборудование участвуют в настройке WEBRTC?

WEBRTC помогает настроить физическую среду, такую ​​как камеры, динамики и микрофоны, а также другое оборудование, такие как отмена эха и оборудование отмены фона. Он также помогает настройке сети с использованием STUN (утилиты прохождения сеанса для NAT).

4. Какие аудиокодеки поддерживаются WEBRTC?

WEBRTC поддерживает различные аудиокодеки, включая G711, ILBC и Opus. Opus-это высококачественный переменный кодек, широко используемый в Webrtc.

5. Какие видеокодеки поддерживаются WEBRTC?

WEBRTC поддерживает кодеки VP8 и VP9, ​​которые являются вариациями H Google без роялти H.264/ч.265. Это также поддерживает ч.264.

6. Почему аудиокодеки важны в WEBRTC?

Аудиокодеки обрабатывают задачи, такие как потеря пакета, кодирование и декодирование аудио, коррекция ошибок, отмена шума, отмена эха и выравнивание объема. Они способствуют популярности WEBRTC на мобильных устройствах и настольных компьютерах.

7. Каков каталог, кто можно позвонить?

Чтобы инициировать звонок, вам нужно знать адрес получателя. Каталог служит динамическими белыми страницами, позволяя пользователям проверять с сервером и предоставлять контактную информацию. Это может быть реализовано с использованием XMPP, SIP или пользовательских протоколов.

8. Зачем вам сервер STUN?

Сервер STUN (утилиты обхода сеанса для NAT) помогает определить внешний IP -адрес устройства и проверять, могут ли два устройства напрямую общаться. Это играет решающую роль в установлении связей между сверстниками.

9. Что такое сервер поворота?

Если одноранговая сеанс невозможна из-за ограничений брандмауэра, необходим сервер поворота (обход с использованием реле вокруг NAT). Это помогает в передаче данных между устройствами, обходя ограничения брандмауэра.

10. Почему вы должны подумать о использовании бэкэнд -сервиса, такой как Sinch?

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

11. Webrtc только о бэкэнд?

Нет, WEBRTC включает в себя как аспекты фронта, так и бэкэнд. Например, Sinch настраивает и настраивает их Webrtc SDK, чтобы обеспечить оптимальную производительность между устройствами и условиями сети. Они реализуют такие функции, как адаптивный OPUS, для корректировки качества записи на основе качественных показателей от трафика.

12. Каковы преимущества использования Sinch?

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

13. Насколько заметна задержка сети в разговоре?

Около 250 мс задержки сети заметно во время разговора. Такие факторы, как задержка сети, время обработки и кодирование данных, могут способствовать общей задержке.

14. Какие функциональные возможности предоставляет услуга бэкэнд в Webrtc?

Бэкэнд -сервис обрабатывает такие задачи, как управление каталогами, сигнализация, оглушение и управление сервером и отслеживание устройств для пользователей.

15. Что делает WEBRTC популярным на мобильных устройствах и настольных компьютерах?

Поддержка WEBRTC для аудио и видеокодеков, наряду с его простотой использования и возможностями в реальном времени, способствует его популярности на мобильных устройствах и настольных компьютерах.

WEBRTC без какого -либо сервера даже не возможно

Затем откройте две вкладки в вашем браузере (или в двух разных браузерах) и введите Localhost: 7000. Как уже упоминалось ранее, лучше всего иметь две камеры, доступные для этого примера для работы. Если все пойдет хорошо, вы должны увидеть один видео -канал на каждой из вкладок.

Webrtc и почему вам все еще нужна сервис бэкэнд

Присоединяйтесь к сообществу Dzone и получите полный опыт участника.

Эта статья первоначально появилась в блоге Sinch Christian Jensen.

Что такое webrtc?

WEBRTC – это набор компонентов, основанных на нескольких инновациях от компаний, которые Google купил в 2010 году. WEBRTC позволяет разработчику настроить каналы носителя и данных в реальном времени между двумя браузерами (или мобильными телефонами, если вы скомпилируете его для этого). Он содержит пару ключевых компонентов, и все они поставляются в Chrome, Firefox и Opera, и в Microsoft существует версия в Microsoft’S новый браузер Edge (ORTC).

Настройка потоков данных и оборудования

WEBRTC помогает настройке как физической среды (например, камеры, динамиков и микрофонов), так и другого оборудования (например, отмены Echo и оборудование отмены фона – те, которые вы найдете в основном в мобильных теле), плюс помогая выяснить сеть вместе с STUN.

Аудиокодеки и видеокодеки

Одним из основных преимуществ использования WEBRTC по сравнению с другим программным обеспечением при работе с аудио и видео в реальном времени является кодеки с открытым исходным кодом/роялти, которые Google достаточно добр, чтобы отправить.

Аудиокодеки

  • G711, используется в обычных телефонных сетях
  • ILBC, старая узкополосная кодировка, также используется в телефонных сетях
  • Opus, высококачественная переменная и (поддержка адаптивного) кодек, который является новым в кодеке, используемой в Webrtc.

Есть больше отправленных, но это основные и наиболее широко используемые.

Видеокодеки

  • VP8 и скоро VP9, ​​это Google’S вариация без роялти H.264/ч.265 Кодек
  • ЧАС.264 (добавлено в 2015 году в качестве соглашения для ORTC)

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

Итак, теперь я могу построить свой собственный звонок на основе браузера в Pure JavaScript, используя (добавьте здесь свою любимую кадров JS -фреймворк)). К сожалению, это’S не так просто, чтобы настроить звонок, так как здесь отсутствуют две основные вещи.

Справочник, кто можно позвонить (или открытие сверстников)

Чтобы позвонить кому -то, вам нужно знать адрес, и, в отличие от обычных номеров телефонов, адресация в Интернете в основном динамические IP -адреса. Чтобы решить это, вы должны вести учет о том, где все. Это можно сделать несколькими способами, используя XMPP, SIP, пользовательские протоколы и т. Д., Но все сводится к тому, что любой, кто готов получить проверку вызова с сервером, так или иначе, и позволяет серверу узнать, как связаться с этим однорангом (подразумевается для дальнейшей доставки предложения/приглашения/SDP и т. Д.).

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

Затем вы, вероятно, хотите отслеживать все устройства для конкретного пользователя и уведомить его на всех устройствах, если есть вызов. Используя Sinch, мы заботимся об этой части для вас.

STUN SERVER

После того, как ваш сервер сигнализации обнаружил устройство и отправляет предложение, вам нужен сервер STUN. Сервер STUN будет способствовать определению вашего внешнего IP -адреса, а также, если два (или более) устройства могут напрямую общаться друг с другом. Синч позаботится об этом тоже для вас.

Сервер ретрансляционного реле (повернуть сервер)

Если одноранговая сеанс невозможна (наши собственные данные предполагают, что это учетные записи около 25% сеансов), вам понадобится сервер поворота. Сервер поворота в основном перенесет биты для вас через открытые отверстия в брандмауэре между двумя клиентами. Почему это происходит? Наиболее распространенными являются асимметричные брандмауэры и возможность пробить отверстия в разных портах в брандмауэрах.

ОК, но почему Дон’Я сам это настроил?

Ну, ты мог. Это может быть немного излишним, и потребуется еще одна компетенция в вашей операционной команде. Ваша очередь и оглушенные серверы, вероятно, будут в значительной степени под используемыми и дорогими. И вот где входит масштабируемая экономика. Поскольку Sinch делает более миллиарда минут в год, наши цены на передачу данных дешевле, чем большинство компаний могут получить.

Вы, вероятно, тоже хотите иметь распределенную сеть. Если, например, у вас есть сервер поворота в U.С. И звонки происходят между клиентами в Европе, вы добавите задержку только потому, что все движение необходимо пересечь океан. Хорошим эмпирическим правилом является то, что в разговоре заметно около 250 мс (здесь больше информации о качестве обслуживания). Таким образом, не добавляя какую -либо задержку сети в клиенту и время обработки, чтобы кодировать данные, вы в основном гарантированно будете иметь слишком большую задержку между клиентами.

Это только о бэкэнд?

Это’S не только о бэкэнд. В Sinch у нас есть обширный опыт работы в реальном времени, и мы настраиваем и настраиваем нашу SDK WEBRTC, чтобы лучше всего работать на всех устройствах и в разных сетях. Несколько примеров – это реализация адаптивного OPUS, который будет корректировать качество записи на основе качественных показателей от нашего трафика. Мы также знаем, какие кодеки использовать в определенных обстоятельствах, а какие выбрать для минимизации транскодирования и задержки во всем мире.

Опубликовано в Dzone с разрешения Кристиана Дженсена . Смотрите оригинальную статью здесь.

Мнения, выраженные участниками Dzone, являются их собственными.

WEBRTC без какого -либо сервера даже не возможно?

Планируйте сеть

Я пытаюсь настроить плагин Cordova для iOS, который реализует функции WEBRTC без использования какого -либо сервера, и он будет использоваться только в локальной сети. Я знаю, что есть этот плагин, который выглядит многообещающе, но у меня есть некоторые проблемы с ним. Мой план не в том, чтобы использовать Trun, STUN или какой -либо сервер сигнализации. Может ты думаешь прямо сейчас: “ОК, это невозможно. Никакая передача сигналов не равняется соединению.“Но позвольте мне сначала объяснить. Как указывалось здесь и здесь можно избежать использования сервера Trun, Stun или Ice. Я думаю, что это хороший способ начать мой проект, но все еще есть открытый вопрос. Как устройства найдут друг друга, если нет никакой передачи сигналов (в примере они используют узел.JS Server)? Прямо сейчас я играю с идеей QR-кода, который содержит всю необходимую информацию. В конце это должно выглядеть так (черные арри более важны): идея состоит в том, что каждый, кто входит в комнату, должен сканировать QR-код на RP, а затем устройство знает IP, порт и т. Д. RP и соединение WEBRTC с помощью данных DataChancel будет установлено. Я искал ответ уже несколько дней, но из -за факта (или, по крайней мере, одной из причин), что WEBRTC даже не поддерживается на iOS Nativly, не так много примеров WEBRTC, которые работают на iOS, и никого для местной сети. Итак, мой вопрос: я в правильном пути или это даже не возможно? (Я не нашел этого нигде примера, но если я размесчу все посты, которые прочитал, я думаю, что это должно быть возможно.)

спросил 10 августа 2017 года в 12:38

3257 3 3 Золотые значки 11 11 Серебряные значки 19 19 Бронзовые значки

Неважно, как вы решаете обнаружение, но для установления соединения WEBRTC вам нужно как -то получить предложение и отвечать на сообщения между сверстниками. Эти сообщения автоматически содержат кандидатов на ледя. Смотрите Stackoverflow.com/a/29056385/918910.

Webrtc: рабочий пример

Недавно мне пришлось использовать WEBRTC для простого проекта. Сама технология имеет много преимуществ и разрабатывается как открытый стандарт, без необходимости каких -либо плагинов. Тем не менее, я был совершенно новичок в WEBRTC и у меня были некоторые проблемы с тем, чтобы разобраться в основных понятиях, а также создал рабочее решение. Есть много учебных пособий (как этот, что вдохновило мое решение). Но большинство из них неполны, устарели или заставляли меня использовать некоторые сторонние услуги (E.г. Google Firebase), которая сделала лишь более сложный процесс более сложным для настройки и труднее понять.

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

Это не будет полным учебником по технологии WEBRTC. Вы можете найти множество учебных пособий и подробных объяснений по всему Интернету, например, здесь. Вы также можете проверить API WEBRTC, если вам нужна дополнительная информация. Этот пост просто покажет вам один возможный пример WEBRTC и объясните, как он работает.

Общее описание

Полный исходный код этого примера доступен на GitHub. Программа состоит из трех частей:

  • веб приложение
  • сигнальный сервер
  • Повернуть сервер

А веб приложение очень просто: один файл HTML и один файл JavaScript (плюс одна зависимость: разъем.io.младший, который включен в хранилище). Он предназначен для работы только с двумя клиентами (два веб -браузера или две вкладки одного и того же браузера). После того, как вы откроете его в браузере (протестировано на Firefox 74), он попросит разрешения использовать камеру и микрофон. Как только разрешение будет предоставлено, видео и аудио с каждой из вкладок будут передаваться на другой.

Примечание: вы можете столкнуться с некоторыми проблемами, если попытаетесь получить доступ к одной и той же камере с обеих вкладок. В моем тесте я’VE использовал два устройства во время тестирования на моей машине (встроенная камера для ноутбука и веб-камера USB).

А сигнальный сервер используется приложениями WEBRTC для обмена информацией, необходимой для создания прямого соединения между сверстниками. Вы можете выбрать любую технологию для этого. В этом примере используются веб -токи (Python-Socketio на бэкэнд и разъем.io-client на фронте).

А ПОВЕРНУТЬ Сервер требуется, если вы хотите использовать этот пример в общедоступной сети. Процесс описан далее в этом посте. Для тестирования локальной сети вам не понадобится.

Сигнализация

Сервер сигнализации записан в Python3 и выглядит так:

от aiohttp import web import socketio room = 'room' sio = socketio.Asyncserver (cors_allowed_origins = '*') app = web.Application () sio.Прикрепить (приложение) @sio.Событие Async def Connect (sid, Environ): print ('подключен', sid) ждать sio.Emit ('ready', Room = Room, skip_sid = sid) sio.enter_room (sid, комната) @sio.Событие DEF DENSCONCEECT (SID): SIO.Leave_room (sid, Room) print ('Depnonded', sid) @sio.Event Async DEF DATA (SID, DATA): PRINT ('Сообщение от <>: <>'.Формат (SID, DATA)) AWAIT SIO.Emit ('Data', Data, Room = Room, Skip_SID = SID) IF __name__ == '__main__': Интернет.run_app (приложение, порт = 9999)

Каждый клиент присоединяется к одной комнате. Перед входом в комнату готовый Мероприятие отправляется всем клиентам в настоящее время в комнате. Это означает, что первое соединение WebSocket не получит никакого сообщения (комната пуста), но когда второе соединение будет установлено, первое получит готовый Событие, сигнализирующее о том, что в комнате есть как минимум два клиента, и соединение WEBRTC может начать. Кроме этого, этот сервер будет пересылать любые данные (данные событие), которое отправляется одним веб -сокетом другим.

Настройка довольно проста:

CD Signaling PIP установка AIOHTTP Python-Socketio Python Server.пирог

Это запустит сервер сигнализации на Localhost: 9999.

Webrtc

Упрощенный процесс использования WEBRTC в этом примере выглядит следующим образом:

  • Оба клиента получают свои местные медиа -потока
  • После получения потока каждый клиент подключается к серверу сигнализации
  • Как только второй клиент подключится, первый получает готовый событие, что означает, что соединение WEBRTC можно договориться
  • Первый клиент создает объект RTCpeerConnection и отправляет предложение второму клиенту
  • Второй клиент получает предложение, создает объект RTCpeerConnection и отправляет ответ
  • Больше информации также обменяется, как кандидаты на ледяной
  • После того, как соединение будет договоренно, вызовов для получения удаленного потока называется, и этот поток используется в качестве источника видео элемент.

Если вы хотите запустить этот пример на Localhost, сигнальный сервер и веб -приложение – все, что вам нужно. Основной частью файла HTML является единственный видео элемент (какой источник будет установлен позже сценарием):

    WEBRTC Рабочий пример  

JavaScript часть немного сложнее, и я&rsquo;ll объяснить это шаг за шагом. Во -первых, есть переменные конфигурации:

// конфигурационные переменные const signing_server_url = 'http: // localhost: 9999'; const pc_config = <>;

Для местного хоста, Pc_config может оставаться пустым и Signaling_server_url должен указывать на сервер сигнализации, который вы&rsquo;VE начал на предыдущем шаге.

Далее у нас есть методы сигнализации:

Let Socket = io (сигнал_SERVER_URL, < autoConnect: false >); разъем.on ('data', (data) => < console.log('Data received: ',data); handleSignalingData(data); >); разъем.on ('ready', () => < console.log('Ready'); createPeerConnection(); sendOffer(); >); Пусть SendData = (data) => < socket.emit('data', data); >;

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

Далее у нас есть переменные, связанные с WEBRTC:

Пусть ПК; Пусть локалсдрем; Пусть remoteStreamElement = документ.QuerySelector ('#Remotestream');

А ПК будет держать наше сверстное соединение, Местный руд это поток, который мы получаем из браузера, и remoteStreamelement это видео элемент, который мы будем использовать для отображения удаленного потока.

Чтобы получить медиа -поток из браузера, мы будем использовать getLocalStream Метод:

Пусть getLocalStream = () => < navigator.mediaDevices.getUserMedia(< audio: true, video: true >) .Тогда ((поток) => < console.log('Stream found'); localStream = stream; // Connect after making sure that local stream is availble socket.connect(); >) .поймать (error => < console.error('Stream not found: ', error); >); >

Как видите, мы собираемся подключиться к серверу сигнализации только после получения потока (аудио и видео). Обратите внимание, что все типы и переменные, связанные с WEBRTC (например, Навигатор, Rtcpeerconnection, и т. д.) предоставляются браузером и не требуют ничего устанавливать.

Создать коллегие соединения относительно легко:

Пусть CreatePeerConnection = () => < try < pc = new RTCPeerConnection(PC_CONFIG); pc.onicecandidate = onIceCandidate; pc.onaddstream = onAddStream; pc.addStream(localStream); console.log('PeerConnection created'); >поймать (ошибка) < console.error('PeerConnection failed: ', error); >>;

Два обратных вызова, которые мы собираемся использовать OniceCandidate (вызвано, когда удаленная сторона отправляет нам кандидата от льда) и OnAddStream (Вызовов после удаленной стороны добавляет свой локальный медиа -поток к своему сверстному соединению).

Далее у нас есть логика предложения и ответа:

Пусть sendoffer = () => < console.log('Send offer'); pc.createOffer().then( setAndSendLocalDescription, (error) => < console.error('Send offer failed: ', error); >); >; Пусть sendanswer = () => < console.log('Send answer'); pc.createAnswer().then( setAndSendLocalDescription, (error) => < console.error('Send answer failed: ', error); >); >; Пусть setandsendlocaldescription = (sessiondescription) => < pc.setLocalDescription(sessionDescription); console.log('Local description set'); sendData(sessionDescription); >;

Подробная информация о переговорах по переговорам с ответом WEBRTC не является частью этого поста (пожалуйста, проверьте документацию WEBRTC, если вы хотите узнать больше о процессе). Это&rsquo;Достаточно, чтобы знать, что одна сторона отправляет предложение, другая реагирует на него, отправив ответ, и обе стороны используют описание для соответствующих сопоставлений.

Обратные вызовы WEBRTC выглядят так:

Let OniceCandidate = (Event) => < if (event.candidate) < console.log('ICE candidate'); sendData(< type: 'candidate', candidate: event.candidate >); >>; let onaddstream = (event) => < console.log('Add stream'); remoteStreamElement.srcObject = event.stream; >;

Полученные кандидаты на ледяной видео элемент.

Последний метод используется для обработки входящих данных:

Let handleSignalingData = (data) => < switch (data.type) < case 'offer': createPeerConnection(); pc.setRemoteDescription(new RTCSessionDescription(data)); sendAnswer(); break; case 'answer': pc.setRemoteDescription(new RTCSessionDescription(data)); break; case 'candidate': pc.addIceCandidate(new RTCIceCandidate(data.candidate)); break; >>;

Когда мы получаем предложение, мы создаем наше собственное соединение со стороны сверстников (удаленное на данный момент готово). Затем мы установили удаленное описание и отправляем ответ. Когда мы получаем ответ, мы просто установим удаленное описание нашего соревновательного соединения. Наконец, когда другой клиент отправляется кандидатом на ледяной.

И, наконец, чтобы фактически запустить соединение WEBRTC, нам просто нужно позвонить getLocalStream:

// начало соединения getLocalStream ();

Бег на Localhost

Если вы запустили сервер сигнализации на предыдущем шаге, вам просто нужно разместить файлы HTML и Javascript, например, например:

CD Web Python -m http.сервер 7000

Затем откройте две вкладки в вашем браузере (или в двух разных браузерах) и введите Localhost: 7000. Как уже упоминалось ранее, лучше всего иметь две камеры, доступные для этого примера для работы. Если все пойдет хорошо, вы должны увидеть один видео -канал на каждой из вкладок.

За пределами местного хоста

У вас может возникнуть соблазн использовать этот пример на двух разных компьютерах в вашей локальной сети, заменив местный хост с вашей машиной&rsquo;S IP -адрес, E.г. 192.168.0.11. Вы быстро заметите, что это не так&rsquo;Т работа, и ваш браузер утверждает, что Навигатор не определен.

Это происходит потому, что webrtc разработан, чтобы быть безопасным. Это означает, что для работы это нужен безопасный контекст. Проще говоря: все ресурсы (в нашем случае HTTP -сервер и сервер сигнализации) должны быть размещены либо на LocalHost, либо с использованием HTTPS. Если контекст не защищен, Навигатор будет неопределенным, и вам не будет разрешено получить доступ к пользовательскому мультимедиа.

Если вы хотите проверить этот пример на разных машинах, используя Localhost, если явно не вариант. Настройка сертификатов не является частью этого поста и совсем не является легкой задачей. Если вы просто хотите быстро проверить этот пример на двух разных компьютерах, вы можете использовать простой трюк. Вместо того, чтобы размещать ресурсы через HTTPS, вы можете включить небезопасенный контекст в Firefox. Идти к О: config, принять риск и изменить значения этих двух переменных на истинный:

  • СМИ.устройства.ненадежный.включено
  • СМИ.getusermedia.ненадежный.включено

Это должно выглядеть так:

Теперь вы должны иметь возможность получить доступ к веб -приложению на двух разных компьютерах, и соединение WEBRTC должно быть должным образом установлено.

Следует глобально

Вы можете использовать этот пример в общедоступной сети, но это&rsquo;S собирается потребовать немного больше работы. Во -первых, вам нужно настроить сервер поворота. Проще говоря, серверы поворотов используются, чтобы обнаружить коллеги из WEBRTC по публичной сети. К сожалению, для этого шага вам понадобится общедоступный сервер. Хорошая новость заключается в том, что, как только у вас будет собственный сервер, процесс настройки будет довольно просты (по крайней мере, для ОС на основе Ubuntu). я&rsquo;В нашем дискуссии о переполнении стека и я нашел много полезной информации о переполнении стека, и я&rsquo;м просто собираюсь скопировать самые важные биты здесь:

Sudo Apt Установка Coturn Turgerver -a -o -v -n - -no -dtls - -no -tls -u Имя пользователя: учетные данные -r realmname

Это запустит сервер поворота с помощью порта 3478. Флаги означают:

  • -A: Используйте долгосрочный механизм полномочий
  • -o: Запустите процесс как демон (отделка от тока)
  • -V: &lsquo;Умеренный&rsquo; многословный режим
  • -n: Не используйте файл конфигурации, возьмите все параметры только из командной строки
  • –NO-DTLS: Не начинайте слушатели клиентов DTLS
  • –NO-TLS: Не начинайте слушатели клиентов TLS
  • -U: Учетная запись пользователя, в форме &lsquo;имя пользователя Пароль&rsquo;, Для долгосрочных полномочий
  • -р: Царство по умолчанию, которая будет использоваться для пользователей

РЕДАКТИРОВАТЬ: Чтобы проверить, правильно ли настройка сервера Turn, вы можете использовать этот валидатор. Чтобы проверить пример выше, вы должны ввести следующие значения:

Нажимать &ldquo;Добавить сервер&rdquo;, удалить другие серверы и выберите &ldquo;Соберите кандидатов&rdquo;. Если у вас есть компонент типа реле, Это означает, что ваша установка работает.

Далее вам нужно немного изменить конфигурацию подключения. Редактировать основной.младший, замена с фактическим IP -адресом вашего сервера:

const turn_server_url = ': 3478'; const turn_server_username = 'username'; const turn_server_credential = 'credential'; const pc_config = < iceServers: [ < urls: 'turn:' + TURN_SERVER_URL + '?transport=tcp', username: TURN_SERVER_USERNAME, credential: TURN_SERVER_CREDENTIAL >, < urls: 'turn:' + TURN_SERVER_URL + '?transport=udp', username: TURN_SERVER_USERNAME, credential: TURN_SERVER_CREDENTIAL >]>;

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

Заключение

Это только один из примеров того, что вы можете сделать с Webrtc. Технология не ограничивается аудио и видео, ее можно использовать для обмена любыми данными. Я надеюсь, что вы нашли этот пост полезным и что он поможет вам начать с ваших собственных идей!

Результаты опроса: и разработчики WEBRTC говорят…

Мы провели короткий опрос разработчиков с Bloggeek.я пару недель назад (см. Этот пост). Мы получили 97 респондентов по состоянию на прошлую пятницу, 1 августа. Цахи случайно выбрал 3 победителя – он уже связался с ними, поэтому, если вы не получили его электронное письмо, мы сожалеем, что вы не выиграли 2 бесплатные электронные книги. Тем не менее, вы все еще имеете право на скидку на 20% и должны были получить электронное письмо с инструкциями с кодами купонов.

97 Респонденты, безусловно, не являются статистически достоверным размером выборки из пула тысяч активных разработчиков WEBRTC (возможно, больше), но есть несколько полезных точек данных, которые мы можем извлечь из данных.

Типы разработчиков

Результаты из

Наш каталог инструментов разработчика разделен на эти варианты, за исключением DevOps. Год назад DevOps Special Tools для WEBRTC не существовало. Я начинаю слышать больше об этом, и я ожидаю, что это будет более существенным &ldquo;инструмент&rdquo; Категория в ближайшем будущем.

Предполагается, что будет больше разработчиков фронта, чем на заднем плане, поэтому немного удивительно, что бэкэнд показал первым. Не было много чистых веб -разработчиков Frontend вообще (см. Пару столов вниз). Webrtc, как правило, не работает без какого -то развития бэкэнд (заметное исключение с проектом WEBRTC без сервера). Вы можете XAAS от кого -то другого, но это обычно подразумевает некоторые расходы. Это может означать, что WEBRTC все еще трудно для большинства разработчиков FUREDEND.

Так же, Родной довольно далеко вниз по списку. По моему опыту, Native все еще довольно сложно обойтись, не вытягивая немного денег для оплачиваемых SDK. Мы&rsquo;ll Посмотрите, как это меняется на Android с Native Webrtc, который идет в Android-L.

Это был единственный вопрос, который был многосекционным, что означает, что респонденты могли выбрать столько, сколько было уместно. Больше всего на свете я был удивлен, увидев, что большинство респондентов делают более одного типа разработки, а третий человек занимается 3 или более:

Выбраны типы разработчиков # %
1 41 42%
2 22 23%
3 25 26%
4 3 3%
5 6 6%

Подсчет респондентов, которые выбрали более одного типа разработчика по счету

Это заставило меня любопытно по таким вопросам, как:

  • Знают ли концентраторы разработчиков больше других типов разработчиков, чем нативных разработчиков?
  • Какие типы развития, как правило, являются суперсенами других?

Вот полная перекрестная табуляция:

Frontend Web Бэкэнд Родной Телеком DevOps
Frontend Web 100% 84% 32% 29% 23%
Бэкэнд 78% 100% 30% 37% 27%
Родной 72% 72% 100% 36% 28%
Телеком 37% 51% 21% 100% 21%
DevOps 72% 89% 39% 50% 100%

Процент респондентов, которые выбрали более одного типа разработчика по типу разработчика

Основываясь на этом наборе данных (и предполагаемой правдивости), разработчики DevOps, как правило, обладают наибольшим количеством навыков в других областях. Нативные разработчики знают много фронта и бэкэнда.

И какая группа была с наибольшей вероятностью только один навык развития: телеком; Почти половина респондентов в списке перечисленных &ldquo;телеком&rdquo; ни с чем больше. Респонденты для телекоммуникаций либо скромны, либо им нужно усилить свои навыки по сравнению с их сверстниками в других категориях.

Dev Type 1 2 3 4 5 Общий итог
Frontend Web 14% 30% 39% 5% 11% 100%
Бэкэнд 10% 33% 42% 5% 10% 100%
Телеком 47% 12% 21% 7% 14% 100%
Родной 20% 8% 40% 8% 24% 100%
DevOps 11% 0% 50% 6% 33% 100%

Количество типов разработчиков, выбранных в процентах от типа DEV, в общей сложности по типу разработки

Фронтовые рамки

201408-Survey-2-Fontend

Это лично меня и несколько других членов команды WebrtChacks лично любопытно. Одна из призовых книг, в конце концов, касается угловой. В последнее время я использую jQuery для своих проектов, и мне было интересно, есть ли лучший способ, поскольку я считаю более сложные приложения.

&ldquo;Другой&rdquo; был значительным ответом здесь – в этой группе JQuery появилась 4 раза (4%). Ничто или обычае не было отмечено 8 (8%)

Бэк-энд-каркасы и инструменты

Во -первых, мы приносим извинения за то, что пренебрегали, чтобы положить &ldquo;другой&rdquo; Категория здесь. Другой вариант должен был быть там. Не имея &ldquo;другой&rdquo; Вариант, трудно предсказать, сколько бы это выбрало, но можно с уверенностью сказать, что это снизило бы ответы для вышеуказанных элементов как минимум на несколько процентных точек.

Никаких больших сюрпризов в отношении ответов выше, но мне было любопытно посмотреть, как это соответствовало различным типам разработчиков:

Тип разработчика
Framework/ Tool Общий Frontend Web Бэкэнд Родной Телеком DevOps
Узел.младший 36% 46% 43% 24% 30% 33%
Джава 20% 16% 20% 20% 19% 11%
Питон или рельсы 14% 13% 12% 16% 16% 22%
Звездочка || Freeswitch 12% 4% 5% 8% 23% 17%
PHP 10% 14% 13% 20% 5% 6%
.СЕТЬ 7% 7% 7% 12% 7% 11%

Cross Tab of Framework/Вопрос инструмента VS. Тип разработчика показан как % от общего количества столбцов

Здесь нет очевидных тенденций, кроме общего предпочтения узла.младший. Я был немного удивлен, увидев Телеком Так фрагментирован – я бы ожидал более сильной кластеризации вокруг более традиционных телекоммуникационных инструментов, таких как Java и Asterisk/Freeswitch. Помните, что эти данные несколько скрыты, потому что вопрос типа разработчика-это многоцелевой.

Специфические инструменты WEBRTC и XAAS

У нас также был вопрос о свободной форме, чтобы позволить респондентам вводить любые инструменты, которые они используют. 86% респондентов что -то вошли. Ниже приведено, кроме всех инструментов, которые упоминались более одного раза:

ВОЗ&rsquo;S далее для WEBRTC – IE, Safari или iOS?

201408-Survey-4-Hose-next

Не так много, чтобы добавить здесь. Мы можем продолжать проверять статус.современный.т.е. для последних на интернет -исследователе. Удачи, пытаясь выяснить, что Apple собирается делать.

Как узнать о webrtc?

201408-Survey-5-learn

Приятно видеть, что у нас есть верная аудитория с вещами в первую очередь &#55357;&#56898; . Было также 4 &ldquo;другой&rdquo; ответы (4%) для GitHub. Это напоминает мне упомянуть, что я выпрямляю страницу WebrtChacks GitHub для моих проектов.

Последние мысли

Моим главным выходом были:

  • Узел.JS, Angular и EasyRtc выигрывают этот конкурс популярности.
  • DevOps делает осмысленный вид – это может быть показателем того, что Webrtc готовится к производству.
  • Навыки развития телекоммуникаций занимают довольно низкие, но не так низкие, как нативные развития и DevOps
  • Навыки телекоммуникации являются наиболее сконцентрированными – наши респонденты с навыками телекоммуникации должны расширить свои наборы навыков развития, чтобы включить больше сети

Я определенно хотел бы сделать это снова в будущем и дать ему больший толчок, чтобы улучшить частоту ответа. В срок мы&rsquo;LL сохраните опрос открытым – не стесняйтесь отвечать, если у вас еще нет. Мы&rsquo;LL периодически регистрируйтесь и обновляйте этот пост по мере необходимости.

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

Вы также можете проверить tsahi&rsquo;S Post о результатах здесь.

Еще раз спасибо всем респондентам – ваш вклад продолжает помогать сообществу WEBRTC!