2017-04-08 01 Евгений Оськин. video streaming: от идеи до...

Post on 12-Apr-2017

34 Views

Category:

Education

2 Downloads

Preview:

Click to see full reader

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 –

хорошие ресурсы для старта

top related