2017-04-08 01 Евгений Оськин. video streaming: от идеи до...
TRANSCRIPT
Video Streaming:от идеи до нагруженной
системыОськин Евгений
developer
С чего мы начинали
С чего мы начинали
С чего мы начинали
С чего мы начинали
Требования
Требования● Live видео с низкой задержкой
Требования● Live видео с низкой задержкой● В штатном режиме 100 параллельных
стримов
Требования● Live видео с низкой задержкой● В штатном режиме 100 параллельных
стримов● Горизонтальное масштабирование
Требования● Live видео с низкой задержкой● В штатном режиме 100 параллельных
стримов● Горизонтальное масштабирование● Основная платформа – iOS
Что мы ожидали
Что мы ожидали● Мы будем использовать 3rd party сервис
для стриминга
Что мы ожидали● Мы будем использовать 3rd party сервис
для стриминга● Работать с HLS будет легко
Что мы ожидали● Мы будем использовать 3rd party сервис
для стриминга● Работать с HLS будет легко● На backend нужно будет реализовать REST
API и клиент для 3rd party сервиса
Какую боль мы испытали
Какую боль мы испытали● Отсутствует сервис, который нас
устраивает
Поиск сервисов● DaCast● Wowza Streaming Cloud● Zencoder● LiveStream.com
Поиск сервисов● DaCast – большая задержка● Wowza Streaming Cloud – большая
задержка● Zencoder – большая задержка● LiveStream.com – большая задержка
Какую боль мы испытали● Отсутствует сервис, который нас
устраивает● Live HLS
Какая проблема с Live HLS?
Какая проблема с Live HLS?● Адаптивный стриминг live видео
Какая проблема с Live HLS?● Адаптивный стриминг live видео● Стриминг видео с фиксированным bitrate
Что значит адаптивный?
Что значит адаптивный?
Что значит адаптивный?
Streaming service
HD
MD
LD
Какую боль мы испытали● Отсутствует сервис, который нас
устраивает● Live HLS● Отсутствует готовое руководство по
созданию платформы для стриминга
Решение
Решение
Сделать свою платформу для video streaming’а
Что если не HLS?
● DASH – HTTP-based
Что если не HLS?
● DASH – HTTP-based● RTMP, RTSP – Real Time Protocol
Что если не HLS?
● DASH – HTTP-based● RTMP, RTSP – Real Time Protocol
Что если не HLS?
Servers for video streaming
● Nginx-rtmp● SRS (Simple RTMP Server)● Wowza Streaming Engine
Servers for video streaming
● Nginx-rtmp● SRS (Simple RTMP Server)● Wowza Streaming Engine
Servers for video streaming
Кодеки и протоколы
Кодеки и протоколыH.264,MPEG-4
Кодеки и протоколыH.264,MPEG-4
AAC,MP3
Кодеки и протоколыH.264,MPEG-4
AAC,MP3
FLV,MP4,AVI MPEG TS
Кодеки и протоколыH.264,MPEG-4
AAC,MP3
FLV,MP4,AVI MPEG TS
Кодеки и протоколыH.264,MPEG-4
AAC,MP3
FLV,MP4,AVI MPEG TS
Архитектура
Архитектура
Архитектура
Архитектура
Архитектура
Архитектура
Архитектура
Архитектура
Deployment
● Docker у разработчика и на AWS
Deployment
● Docker у разработчика и на AWS● Deploy в две команды
Deployment
● Docker у разработчика и на AWS● Deploy в две команды● Запуск тестов в одну команду
Deployment
Flow разработки
● Сложно воспроизводить bug’и руками
Flow разработки
● Сложно воспроизводить bug’и руками● Сложно iOS разработчикам работать с
нестабильным backend’ом
Flow разработки
● Сложно воспроизводить bug’и руками● Сложно iOS разработчикам работать с
нестабильным backend’ом● Страшно изменять архитектуру
Flow разработки
BDD
BDDFeature: Sending feedback after watching a stream.
Scenario: A user watches and shares the record.Given we have a Recorder userAnd we have a Viewer userWhen the Viewer asks the PublisherAnd the Recorder responds with a new streamAnd the Viewer gets “stream notification” and recordsThen the Recorder ends publishing in 25 secondsAnd the Viewer shares the streamAnd an Anonymous user opens the shared link and plays a video
BDDFeature: Sending feedback after watching a stream.
Scenario: A user watches and shares the record.
Given we have a Recorder userAnd we have a Viewer userWhen the Viewer asks the RecorderAnd the Recorder responds with a new streamAnd the Viewer gets “stream notification” and plays the streamThen the Recorder ends publishing in 25 secondsAnd the Viewer shares the streamAnd an Anonymous user opens the shared link and plays a video
BDDFeature: Sending feedback after watching a stream.
Scenario: A user watches and shares the record.Given we have a Recorder userAnd we have a Viewer user
When the Viewer asks the RecorderAnd the Recorder responds with a new streamAnd the Viewer gets “stream notification” and
plays the streamThen the Recorder ends publishing in 25 secondsAnd the Viewer shares the streamAnd an Anonymous user opens the shared link and plays a video
BDDFeature: Sending feedback after watching a stream.
Scenario: A user watches and shares the record.Given we have a Recorder userAnd we have a Viewer userWhen the Viewer asks the RecorderAnd the Recorder responds with a new streamAnd the Viewer gets “stream notification” and plays the stream
Then the Recorder ends publishing in 25 secondsAnd the Viewer shares the streamAnd an Anonymous user opens the shared link
and plays a video
- А что если будет 1000 параллельных стримов?
Вопрос
- А что если будет 1000 параллельных стримов?
- Не понятно. Надо проверить.
Вопрос
Performance тесты
● Locust
Performance тесты
● Locust● Переиспользование кода от behaviour
тестов
Performance тесты
● Locust● Переиспользование кода от behaviour
тестов● Специфика сбора метрик
Performance тесты
● Locust● Переиспользование кода от behaviour
тестов● Специфика сбора метрик● Отдельное окружение
Performance тесты
Итог
Итог● Законченный продукт
Итог● Законченный продукт● Архитектура, BDD и Docker – лучшие
друзья
Итог● Законченный продукт● Архитектура, BDD и Docker – лучшие
друзья● Nginx-RTMP и FFmpeg Streaming Guide –
хорошие ресурсы для старта
Ссылкиhttp://www.look-app.net/
http://bit.ly/nginx-rtmp
http://bit.ly/ffmpeg-streaming
http://bit.ly/simple-rtmp
http://bit.ly/wowza-github
http://bit.ly/wiki-codecs
http://bit.ly/wiki-containers