Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WebRTC в мобильных приложениях при помощи React Native

Grigory
April 06, 2017

WebRTC в мобильных приложениях при помощи React Native

Последние несколько лет в индустрии активно развивается WebRTC — технология, которая позволяет делать голосовые и видеозвонки прямо из браузеров. Но мало кто знает, что эта же технология может быть использована в нативных мобильных приложениях и основанных на них SDK. В своем докладе я хочу рассказать про опыт заворачивания существующих Android и iOS SDK в React Native:

— Как поддерживать несколько разных архитектур
— Как работать с нативными виджетами, такими как «вывод видео»
— Синхронизация event loop между C-реализацией и — JavaScript движком React Native
— Планы на будущее: React Native WebRTC

Grigory

April 06, 2017
Tweet

More Decks by Grigory

Other Decks in Programming

Transcript

  1. Что сейчас будет? Рассказывает Григорий Петров Специализация Руководство разработкой Чем

    занимается Технический евангелист Опыт Более 15 лет Время выступления 45 минут Вопросы В конце выступления, 15 минут 3
  2. Проблема? Кроссплатформенные видео и голос Flash для веб, AIR для

    остального Низкое качество звука и видео 6
  3. Проблема? Кроссплатформенные видео и голос Flash для веб, AIR для

    остального Низкое качество звука и видео Media Server и Media Gateway стоят дорого 7
  4. Проблема? Кроссплатформенные видео и голос Flash для веб, AIR для

    остального Низкое качество звука и видео Media Server и Media Gateway стоят дорого Трудно интегрировать в приложения 8
  5. Что такое WebRTC? • JavaScript API для браузеров ◦ Видео

    и голос, запись и воспроизведение 13
  6. Что такое WebRTC? • JavaScript API для браузеров ◦ Видео

    и голос, запись и воспроизведение ◦ Связь peer-to-peer в реальном времени 14
  7. Что такое WebRTC? • JavaScript API для браузеров ◦ Видео

    и голос, запись и воспроизведение ◦ Связь peer-to-peer в реальном времени • SRTP, SDP, Opus, G.711, H.264/5, VP8/9 15
  8. Что такое WebRTC? • JavaScript API для браузеров ◦ Видео

    и голос, запись и воспроизведение ◦ Связь peer-to-peer в реальном времени • SRTP, SDP, Opus, G.711, H.264/5, VP8/9 • Внешний сигнальный протокол 16
  9. А что, либки нету? Есть, libwebrtc от Google Но я

    хочу рассказать про React Native 20
  10. Еще один способ? Нативно Android API/Java, Cocoa/Objective-C/Swift Phonegap JJavaSScript, собственный

    HTML UI Titanium, NativeScript JJavaSScript, нативный UI Unity C#, JJavaSScript, 2D/3D для игр Marmalade C++, 2D для игр Xamarin C#, нативный UI + собственный UI 24
  11. Еще один способ? Нативно Android API/Java, Cocoa/Objective-C/Swift Phonegap JJavaSScript, собственный

    HTML UI Titanium, NativeScript JJavaSScript, нативный UI Unity C#, JJavaSScript, 2D/3D для игр Marmalade C++, 2D для игр Xamarin C#, нативный UI + собственный UI React Native JJavaSScript, нативный UI 25
  12. Лучшее от обоих миров Собственный UI HTML или виджеты, чужеродно

    Нативный UI Свой для каждой платформы React Native 28
  13. 31

  14. React Native изнутри • Android и iOS проекты • "main"

    для Java и Objective-C • Нативная либка React Native 38
  15. React Native изнутри • Android и iOS проекты • "main"

    для Java и Objective-C • Нативная либка React Native • Ваш JavaScript код 39
  16. React Native изнутри • Android и iOS проекты • "main"

    для Java и Objective-C • Нативная либка React Native • Ваш JavaScript код Самый простой способ туда влезть 40
  17. React Native изнутри • Android и iOS проекты • "main"

    для Java и Objective-C • Нативная либка React Native • Ваш JavaScript код Самый простой способ туда влезть Но не для SDK 41
  18. Что есть для SDK? React Native Module React Native UI

    Component Создаете свой класс и регистрируем его в main (макросом в iOS) 43
  19. Первая засада Проект Android/iOS Он не знает про node_modules Можно

    попросить разработчика добавлять 45
  20. Первая засада Проект Android/iOS Он не знает про node_modules Можно

    попросить разработчика добавлять CI будет очень недовольно 46
  21. Первая засада Проект Android/iOS Он не знает про node_modules Можно

    попросить разработчика добавлять CI будет очень недовольно Поэтому React Native включил в себя rnpm 47
  22. Как наш код видит JavaScript Наш код получает параметры методов

    Может вызывать переданные функции Имеет доступ к переданным объектам 64
  23. Как наш код видит JavaScript Наш код получает параметры методов

    Может вызывать переданные функции Имеет доступ к переданным объектам Может использовать EventEmitter 65
  24. 67

  25. Android Gradle и JNI из коробки Хорошо, если для либы

    есть jar Для WebRTC — есть. И мы его используем 71
  26. Хозяйке на заметку • Все что занимает время — в

    потоки • Эвристика rnpm плохо документирована 75
  27. Хозяйке на заметку • Все что занимает время — в

    потоки • Эвристика rnpm плохо документирована • Креш в плюсах нас огорчает 76
  28. Хозяйке на заметку • Все что занимает время — в

    потоки • Эвристика rnpm плохо документирована • Креш в плюсах нас огорчает • 64-битный React Native: месяц от роду 77
  29. Хозяйке на заметку • Все что занимает время — в

    потоки • Эвристика rnpm плохо документирована • Креш в плюсах нас огорчает • 64-битный React Native: месяц от роду • Зависимости. Обновил – и не работает 78
  30. Хозяйке на заметку • Все что занимает время — в

    потоки • Эвристика rnpm плохо документирована • Креш в плюсах нас огорчает • 64-битный React Native: месяц от роду • Зависимости. Обновил – и не работает • Тяжело сделать Hot Reloading 79
  31. Хозяйке на заметку • Все что занимает время — в

    потоки • Эвристика rnpm плохо документирована • Креш в плюсах нас огорчает • 64-битный React Native: месяц от роду • Зависимости. Обновил – и не работает • Тяжело сделать Hot Reloading • Пока нет поддержки permissions 80