Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
1
Что сейчас будет?
Рассказывает Григорий Петров
Специализация Руководство разработкой
Чем занимается Технический евангелист
Опыт Более 15 лет
Время выступления 45 минут
Вопросы В конце выступления, 15 минут
2
Проблема?
Кроссплатформенные видео и голос
3
Проблема?
Кроссплатформенные видео и голос
Flash для веб, AIR для остального
4
Проблема?
Кроссплатформенные видео и голос
Flash для веб, AIR для остального
Низкое качество звука и видео
5
Проблема?
Кроссплатформенные видео и голос
Flash для веб, AIR для остального
Низкое качество звука и видео
Media Server и Media Gateway стоят дорого
6
Проблема?
Кроссплатформенные видео и голос
Flash для веб, AIR для остального
Низкое качество звука и видео
Media Server и Media Gateway стоят дорого
Трудно интегрировать в приложения
7
Решение
Протоколы и API для браузеров
8
Решение
Протоколы и API для браузеров
Новый стандарт — WebRTC
9
Что такое WebRTC?
10
Что такое WebRTC?
●JavaScript API для браузеров
11
Что такое WebRTC?
●JavaScript API для браузеров
oВидео и голос, запись и воспроизведение
12
Что такое WebRTC?
●JavaScript API для браузеров
oВидео и голос, запись и воспроизведение
oСвязь peer-to-peer в реальном времени
13
Что такое WebRTC?
●JavaScript API для браузеров
oВидео и голос, запись и воспроизведение
oСвязь peer-to-peer в реальном времени
●SRTP, SDP, Opus, G.711, H.264/5, VP8/9
14
Что такое WebRTC?
●JavaScript API для браузеров
oВидео и голос, запись и воспроизведение
oСвязь peer-to-peer в реальном времени
●SRTP, SDP, Opus, G.711, H.264/5, VP8/9
●Внешний сигнальный протокол
15
Зачем оно в аппе?
Потому что все хотят в стор!
16
А что, либки нету?
17
А что, либки нету?
Есть, libwebrtc от Google
18
А что, либки нету?
Есть, libwebrtc от Google
Но я хочу рассказать про React Native
19
Что такое React Native?
20
Что такое React Native?
Еще один способ создания мобильных
приложений для iOS и Android
21
Еще один способ?
Нативно
Phonegap
Titanium, NativeScript
Unity
Marmalade
Xamarin
Вообще их больше 50-ти...
22
Еще один способ?
Нативно 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
23
Еще один способ?
Нативно 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
24
Лучшее от обоих миров
Собственный UI
Нативный UI
25
Лучшее от обоих миров
Собственный UI HTML или виджеты, чужеродно
Нативный UI Свой для каждой платформы
26
Лучшее от обоих миров
Собственный UI HTML или виджеты, чужеродно
Нативный UI Свой для каждой платформы
React Native
27
Как это работает
JJavaSScript + XML +
CSS
виджеты iOS / Android
28
И как в ЭТО добавить WebRTC?
npm install не очень для c-шного кода
29
30
Вообще есть готовое
31
Вообще есть готовое
Но мне надо выступать на конфах
32
Интересно, как совместить самим
Мы для своего React Native SDK совместили
33
React Native изнутри
34
React Native изнутри
●Android и iOS проекты
35
React Native изнутри
●Android и iOS проекты
●"main" для Java и Objective-C
36
React Native изнутри
●Android и iOS проекты
●"main" для Java и Objective-C
●Нативная либка React Native
37
React Native изнутри
●Android и iOS проекты
●"main" для Java и Objective-C
●Нативная либка React Native
●Ваш JavaScript код
38
React Native изнутри
●Android и iOS проекты
●"main" для Java и Objective-C
●Нативная либка React Native
●Ваш JavaScript код
Самый простой способ туда влезть
39
React Native изнутри
●Android и iOS проекты
●"main" для Java и Objective-C
●Нативная либка React Native
●Ваш JavaScript код
Самый простой способ туда влезть
Но не для SDK
40
Что есть для SDK?
React Native Module
React Native UI Component
41
Что есть для SDK?
React Native Module
React Native UI Component
Создаете свой класс и регистрируем его в
main (макросом в iOS)
42
Первая засада
Проект Android/iOS
Он не знает про node_modules
43
Первая засада
Проект Android/iOS
Он не знает про node_modules
Можно попросить разработчика добавлять
44
Первая засада
Проект Android/iOS
Он не знает про node_modules
Можно попросить разработчика добавлять
CI будет очень недовольно
45
Первая засада
Проект Android/iOS
Он не знает про node_modules
Можно попросить разработчика добавлять
CI будет очень недовольно
Поэтому React Native включил в себя rnpm
46
react-native link
1.Внимательно осматривает
"node_modules"
47
react-native link
1.Внимательно осматривает
"node_modules"
2.Ищет расширения React Native
48
react-native link
1.Внимательно осматривает
"node_modules"
2.Ищет расширения React Native
3.Сам модифицирует Android и iOS
проекты
49
"Внимательно осматривает"?
Много черной магии и эвристики
50
"Внимательно осматривает"?
Много черной магии и эвристики:
●".xcodeproj"
51
"Внимательно осматривает"?
Много черной магии и эвристики:
●".xcodeproj"
●“^/android” и “^/android/app”
52
"Внимательно осматривает"?
Много черной магии и эвристики:
●".xcodeproj"
●“^/android” и “^/android/app”
●“package.json#rnpm”
53
Процесс можно немного тюнить
Хуки в package.json до/после установки
54
Процесс можно немного тюнить
Хуки в package.json до/после установки
Мы используем, чтобы починить iOS
55
Как дружат нейтив и JavaScript?
56
Нужны контракты
●ReactContextBaseJavaModule
●RCT_EXPORT_MODULE
●RCT_EXPORT_METHOD
57
Как JavaScript видит наш код
58
Как JavaScript видит наш код
React Native Module
Объект с методами и свойствами
59
Как наш код видит JavaScript
60
Как наш код видит JavaScript
Наш код получает параметры методов
61
Как наш код видит JavaScript
Наш код получает параметры методов
Может вызывать переданные функции
62
Как наш код видит JavaScript
Наш код получает параметры методов
Может вызывать переданные функции
Имеет доступ к переданным объектам
63
Как наш код видит JavaScript
Наш код получает параметры методов
Может вызывать переданные функции
Имеет доступ к переданным объектам
Может использовать EventEmitter
64
React Native UI Component
UIView на iOS и View на Android
65
66
Самое интересное: C/C++
Потому что в нем живут библиотеки!
67
Android
Gradle и JNI из коробки
68
Android
Gradle и JNI из коробки
Хорошо, если для либы есть jar
69
Android
Gradle и JNI из коробки
Хорошо, если для либы есть jar
Для WebRTC — есть. И мы его используем
70
iOS
Objective-C и Swift совместимы с C/C++
71
iOS
Objective-C и Swift совместимы с C/C++
За исключением name mangling
72
Хозяйке на заметку
●Все что занимает время — в потоки
73
Хозяйке на заметку
●Все что занимает время — в потоки
●Эвристика rnpm плохо документирована
74
Хозяйке на заметку
●Все что занимает время — в потоки
●Эвристика rnpm плохо документирована
●Креш в плюсах нас огорчает
75
Хозяйке на заметку
●Все что занимает время — в потоки
●Эвристика rnpm плохо документирована
●Креш в плюсах нас огорчает
●64-битный React Native: месяц от роду
76
Хозяйке на заметку
●Все что занимает время — в потоки
●Эвристика rnpm плохо документирована
●Креш в плюсах нас огорчает
●64-битный React Native: месяц от роду
●Зависимости. Обновил – и не работает
77
Хозяйке на заметку
●Все что занимает время — в потоки
●Эвристика rnpm плохо документирована
●Креш в плюсах нас огорчает
●64-битный React Native: месяц от роду
●Зависимости. Обновил – и не работает
●Тяжело сделать Hot Reloading
78
Хозяйке на заметку
●Все что занимает время — в потоки
●Эвристика rnpm плохо документирована
●Креш в плюсах нас огорчает
●64-битный React Native: месяц от роду
●Зависимости. Обновил – и не работает
●Тяжело сделать Hot Reloading
●Пока нет поддержки permissions
79
Ссылки!
https://github.com/voximplant/react-native-voximplant
https://github.com/voximplant/react-native-demo
хук для ремонта: scripts/rnpm-postlink.js
80
Это всё!
Вопросы?
Григорий Петров
grigory.v.p@gmail.com
http://facebook.com/grigoryvp
81

More Related Content

Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"