Министерство образования и науки Российской Федерации
ФГБОУ ВПО «Сыктывкарский государственный университет»
Колледж
экономики, права и информатики
ДОПУСТИТЬ К ЗАЩИТЕ:
Зам. директора КЭПИ
_____________Т. В. Гилева
«_____»
__________ 2014 г.
ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА
Передача
потоковых данных на основе WebRTC
Научный руководитель:
___________ Л. М. Мартынова
«_____»
__________ 2014 г.
Исполнитель:
студент 35 группы
__________ К. И. Лопырев
«_____»
__________ 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: