Материал: Передача потоковых данных на основе WebRTC

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Передача потоковых данных на основе WebRTC

Министерство образования и науки Российской Федерации

ФГБОУ ВПО «Сыктывкарский государственный университет»

Колледж экономики, права и информатики

ДОПУСТИТЬ К ЗАЩИТЕ:

Зам. директора КЭПИ

_____________Т. В. Гилева

 «_____» __________ 2014  г.


ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА

Передача потоковых данных на основе WebRTC

Научный руководитель:

___________ Л. М. Мартынова

«_____» __________ 2014  г.

Исполнитель:

студент 35 группы  

__________ К. И. Лопырев

«_____» __________ 2014  г.



Сыктывкар 2014

СОДЕРЖАНИЕ

СПИСОК СОКРАЩЕНИЙ И ОБОЗНАЧЕНИЙ.....................................   3

          ВВЕДЕНИЕ................................................................................................          5

1 ВНУТРЕННЯЯ АРХИТЕКТУРА И API WEBRTC.............................   7

1.1 Сравнение с аналогичными технологиями.............................   7

1.1.1 Java................................................................................ 7

1.1.2 Flash............................................................................... 8

1.1.3 WebRTC........................................................................ 8

1.1.4 Итоговое сравнение.....................................................  9

1.2 Внутренняя архитектура WebRTC..........................................   12

1.3 Использование Web API........................................................... 15

1.3.1 Создание подключения...............................................  15

1.3.2 Получение локального потока....................................   18

1.3.3 Отправка и получение потоков...................................  19

2 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ НА ОСНОВЕ WEB API..............     21

                   2.1 Web-приложение, внедряемое на сторонний ресурс.............   21

2.2 WebRTC-сервис.........................................................................          31

          ЗАКЛЮЧЕНИЕ..........................................................................................         38

          СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ..................................  39

СПИСОК СОКРАЩЕНИЙ И ОБОЗНАЧЕНИЙ

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

GIPS (Global IP Solutions) - компания, занимавшаяся разработкой программного обеспечения для обработки и передачи видео и аудио в IP-сетях. В 2010 году компанию выкупила корпорация Google, после чего она стала подразделением Google и ныне известна как WebRTCProject.[7]

API (ApplicationProgrammingInterface) - набор готовых классов, процедур, функций, структур и констант, предоставляемых приложением (библиотекой) для использования во внешних программных продуктах. Часто выполняет роль слоя абстракции, упрощающего доступ к функциям приложения (библиотеки). Используется для написания всевозможных приложений, основанных на готовом программном решении.[20]

JRE (JavaRuntimeEnvironment) - среда выполнения программного кода на языке Java.

RTP (RealTimeTransportProtocol) - открытый протокол потоковой передачи данных в IP-сетях, работающий на прикладном уровне и использующийся при передаче трафика реального времени. Протокол был разработан Audio-VideoTransportWorkingGroup и впервые опубликован в 1996 году.[11]

FCS MX (Flash Communication Server) - сервернаясредаот Adobe, прародитель Adobe Media Server.

RTMP (RealTimeMessagingProtocol) - проприетарный протокол потоковой передачи данных, в основном используется для передачи потокового медиа в Интернет.

VoIP - IP-телефония - набор технологий для передачи видео и аудио сигнала по протоколу IP, имеющий функции обычной телефонной связи, такие как, например, набор номера, дозвон и т.п.[16]

STUN (SessionTraversalUtilitiesfor NAT) - утилиты прохождения сессий для NAT - сетевой протокол, который позволяет клиенту, находящемуся за сервером трансляции адресов, определить свой внешний IP-адрес, способ трансляции адреса и порт во внешней сети. Эта информация используется для установления соединения UDP между двумя хостами, находящимися за NAT-маршрутизаторами.[14]

          NAT (NetworkAddressTranslation) - преобразование сетевых адресов - это механизм в IP-сетях, используемый для преобразования IP-адресов передаваемых по сети пакетов.[8]

          TURN (TraversalUsingRelay NAT) - протокол, который позволяет узлу за NAT или файерволом получать входящие данные через TCP или UDP соединения.[15]

          Libjingle - набор C++ библиотек с открытым исходным кодом для организации подключений реального времени через Интернет.

          W3C (WorldWideWebConsortium) - Консорциум Всемирной паутины - организация, разрабатывающая и внедряющая технологические стандарты для Всемирной паутины. Консорциум возглавляет Тимоти Джон Бернерс-Ли, автор множества разработок в области информационных технологий.[21]

          SDP (SessionDescriptionProtocol) - протокол прикладного уровня и формат сообщений для описания сессий потоковой передачи данных.

ВВЕДЕНИЕ

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

Основной идеей проекта WebRTC была идея о том, чтобы сделать технологии подключений реального времени открытыми и простыми для использования. Поэтому сейчас исходный код WebRTCопубликован под лицензией BSD-3.

WebRTC позволяет создавать полнодуплексное соединение между клиентами и не требует наличия сервера для передачи потоков. WebRTC стал первым стеком технологий, дающим возможности организации полноценной видео и аудио связи без использования дополнительных плагинов и приложений, с использованием только HTML5 и JavaScript. Эти аспекты выделили данную технологию из ряда других уже используемых и способствовали быстрому внедрению на рынок. По мнению большинства экспертов, после полноценного внедрения WebRTC в самые популярные браузеры и веб-клиенты браузер GoogleChrome может составить конкуренцию Skype.[19]

Одной из  серьезных задач web-технологий в последнее время - сделать подключения реального времени (RTC) такими же естественными, как, например, ввод текста на web-странице. До появления WebRTC технологии, дающие возможности потоковой передачи данных были закрытыми и требовали от разработчика наличия лицензии на использование. Это сильно затормаживало развитие этой области web-технологий. Ситуация стала меняться, когда этой проблемой вплотную занялась корпорация Google. В 2008 году компания On2 Technologies разработала видео кодек VP8 как замену предыдущим кодекам VP7 и VP6. В 2010 году компания Google приобрела фирму-создателя и 19 мая 2010 года представляет открытые исходные коды. В 2009 году корпорация GIPS создала аудио кодек iSAC, ядро аудио и видео обработки и протокол WebRTC. GIPS на тот момент являлся лидером в разработке технологий, используемых для RTC. GIPS был куплен Google вместе с патентными правами на их разработки, которые были опубликованы Google в 2011 под лицензией BSD-3 как WebRTCProject. И  уже в ноябре 2012 Google объявил о внедрении поддержки WebRTC в свой браузер GoogleChrome. В начале 2013 года осуществлён первый видеозвонок между Chrome и Firefox.[12]

На момент написания данной работы технология поддерживается браузерами:

● GoogleChrome;

● GoogleChromeMobile;

● MozillaFirefox;

● MozillaFirefoxMobile;

● Opera.

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

В рамках данной дипломной работы будет изучена технология WebRTC и возможность ее практического применения уже сейчас.

1 ВНУТРЕННЯЯ АРХИТЕКТУРА И API WEBRTC

1.1 Сравнение с аналогичными технологиями

1.1.1 Java

Первой технологией, которая имела возможности организации браузерныхвидеозвонков, была Java. JRE, как правило, присутствует на большинстве ПК либо предустановлена в виде плагина в браузере. В итоге Java-код может выполняться ПК или браузерным плагином, захватывать медиа и отправлять его на сервер по стандартному протоколу RTP.[5]

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

Плюсы:

● широкая распространенность и доступность JRE для конечного пользователя;

● протокол RTP имеет возможность восстановления утерянных в сети пакетов за счет Jitter-буфера.

Минусы:

● слабое подавление эха;

● ручная регулировка усиления;

● слабое подавление шума;

● низкое быстродействие Java по сравнению с C++ (на котором написан WebRTC);

● клиент-серверная архитектура.

1.1.2 Flash

Выпущенный в 2002 году FlashPlayer 6 умел взаимодействовать с FCS MX 1.0, захватывать медиапоток пользователя и обмениваться с сервером аудиопотоками по протоколу RTMP. Эхоподавления в этой технологии не было, но платформа исправно передавала медиапоток от плеера к плееру через сервер и на тот момент могла претендовать на монопольность. Протокол работал поверх TCP, следствием этого было сохранение утерянных пакетов. Большой размер буфера был причиной довольно больших задержек при передаче потока. В результате на базе RTMP развивались, в основном, livevideo, или вебинары с одним ведущим, где задержка не так важна. Только в последующих версиях была добавлена поддержка UDP и эхоподавления.[5]

Плюсы:

● распространенность (самый широкий охват);

● качественная VoIP передача аудио и видео.

Минусы:

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

● требует промежуточного сервера;

● не поддерживает открытые UDP протоколы, такие как RTP/SRTP;

● медленное развитие;

● клиент-серверная архитектура;

● закрытость исходного кода.

1.1.3 WebRTC

WebRTC на стадии релиза спецификации версии 1.0 состоял из стека технологий: SRTP, DTLS, ICE, STUN, AEC, AGC, адаптивный Jitter-буфер, Opus, VP8. SRTP и DTLS обеспечивает защиту трафика между WebRTC узлами. ICE и STUN помогают преодолеть NAT. AEC, AGC и Jitter-буфер работают для того, чтобы сделать аудио и видео качественным. Кодеки Opus и VP8 хорошо подходят для глобального Интернета, где битрейт при передаче может падать до очень низких значений из-за низкого качества связи.[5]

Плюсы:

● полноценное VoIP только средствами браузера;

● архитектура “точка-точка”;

● открытый исходный код под лицензией BSD-3.

Минусы:

● пока недостаточно поддерживающих технологию браузеров, хотя ситуация довольно быстро исправляется;

● отсутствие совместимости с традиционным VoIP.

1.1.4 Итоговое сравнение

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

          На таблицах ниже представлено итоговое сравнение трех описанных выше технологий.

Таблица 1 - Поддерживаемые протоколы и технологии


Java

Flash

WebRTC

UDP

*

-

-

TCP

*

-

-

RTMP

*

+

-

RTMFP

*

+

-


            Таблица 1 - Продолжение

RTP

*

-

+

SRTP

*

-

+

DTLS

*

-

+

SIP

*

-

-

ICE

-

+

STUN

*

-

+

TURN

*

-

+


Таблица 2 - Поддерживаемые аудио кодеки


Java

Flash

WebRTC

G.711

*

+

+

G.729

*

-

-

Speex

*

+

-

NellyMoser

*

+

-

Opus

*

-

+

iLBC

*

-

-


Таблица 3 - Поддерживаемые видео кодеки


Java

Flash

WebRTC

H.264

*

+

-

H.263

*

-

-

VP8

*

-

+


Таблица 4 - Поддержка браузерами


Java

Flash

WebRTC

Firefox

+

+

+

Chrome 30

+

+

+

IE 10

+

+

-

+

+

-

Opera

+

+

+

FirefoxMobile

?

?

+

ChromeMobile

?

?

+


Знаком “*” обозначены технологии, которые теоретически могут быть реализованы, вопрос только в том, сколько на это понадобится времени и ресурсов. Знаком “?” обозначены браузеры, которые имеют частичную поддержку технологии.

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

1.2 Внутренняя архитектура WebRTC

Общая архитектура WebRTC представлена на рисунке 1.

Рисунок 1 - Общая архитектура WebRTC

Основной частью стека WebRTC является C++ API - набор библиотек и интерфейсов, написанных на C++. Предполагается, что разработчики различных web-клиентов или браузеров могут встроить в свои приложения набор C++ компонентов WebRTC и обеспечить к ним доступ через высокоуровневый Web API на JavaScript. Этот набор библиотек обеспечивает весь функционал стека WebRTC: