SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
Erlyvideo —
                          видеостриминг на
                                erlang
                                 Макс Лапшин
                             max@evilmartians.com
                              http://erlyvideo.org/



Tuesday, April 13, 2010
Телевизор был удобным


                  •       Включил и смотри;

                  •       Быстро и удобно переключать каналы.




Tuesday, April 13, 2010
А так ли удобен интернет?

                  •       Как долго стартует просмотр видео в интернете?

                  •       Почему такая медленная перемотка по роликам на ютубе?

                  •       На что тратится такая мощь и скорость каналов?

                  •       Что выберет ваша бабушка: телевизор Рубин или ютуб?



Tuesday, April 13, 2010
Плата за возможность
                               смотреть то, что хочешь

                   •      Телевизор показывает то, что   •   В интернете выбираем сами;
                          подготовили для всех;
                                                         •   Сервер для каждого
                   •      Телебашня вещает                   выполняет персональные
                          миллионам одно и то же.            действия.



Tuesday, April 13, 2010
Какие проблемы в интернете?
                  •       Большое время открытия видео с сервера;

                  •       Сложность алгоритмов сжатия видео;

                  •       Невозможность покадровой перемотки;

                  •       Чувствительность к потерям данных;

                  •       Неравномерная скорость сети.




Tuesday, April 13, 2010
Все способы трансляции видео
                       в интернете имеют плюсы и
                                минусы.

                                 Какие?

Tuesday, April 13, 2010
Файлы по HTTP
                  •        Путь, выбранный youtube.com;

                  •        Прекрасное решение для 10-минутных роликов;

                  •        Самые низкие стартовые траты на ПО и аппаратуру;


               •          Мучительная перемотка;

               •          Неравномерное использование канала;

               •          Непригодность для трансляции прямого эфира.
Tuesday, April 13, 2010
«Бесконечные» файлы по HTTP
                  •       Несложный способ раздачи прямого эфира;


                  •       Проблемы с антивирусами;

                  •       Невозможность отмотки назад (timeshift);

                  •       На паузе можно держать не больше чем позволит жесткий диск;

                  •       Невозможно транслировать видео на сервер с камеры;

                  •       Невозможность контролировать буфер проигрывания.
Tuesday, April 13, 2010
RTMP (Adobe streaming)
                                   Real Time Media Protocol
                • Оптимальное использование ширины канала;
                • Быстрая перемотка;
                • Быстрый старт проигрывания;
                • Возможность видеоконференции.
               • Закрытый протокол;
               • Проблемы с антивирусами;
               • Сервер обязан присылать видеокадры в реальном времени.
Tuesday, April 13, 2010
Существующий у меня опыт

                  •       Есть успешная реализация RTMP сервера на ObjectiveC;

                  •       Сложности с таймаутами, утечками памяти, многоядерностью;

                  •       Возникло предположение, что многие проблемы — артефакты
                          платформы.




Tuesday, April 13, 2010
Гипотеза об
                                 эффективности erlang

                  Предположение: язык erlang даст сосредоточиться на бизнес-логике.
                          Результат: erlyvideo — открытый видеостриминговый сервер.




Tuesday, April 13, 2010
Почему именно erlang?




Tuesday, April 13, 2010
Много ядер — много ниток
                  •        Языки C++, Java и т.п. дают возможность разрушить приложение
                           одновременным доступом к памяти из разных ниток;

                  •        Ошибка в одной нитке может разрушить остальные.



               •          В erlang-е существует полная изоляция данных и кода по
                          псевдопроцессам (сотни тысяч в одной программе);

               •          Ошибка в одном псевдопроцессе не обрушит остальные;


Tuesday, April 13, 2010
Утечки памяти
                  •        Сложность инструментов (valgrind) для нахождения утечек на C;

                  •        Дороговизна полного устранения утечек в программе на С.




               •          Иная природа утечек памяти в erlang упрощает устранение: оно
                          сводится к локализации и проблемой не является.


Tuesday, April 13, 2010
Горячее обновление кода
                  •        На языках C, Java и т.п. задача обновления кода не решена до
                           конца;

                  •        Отсутствует простой способ обновления кода без отключения
                           клиентов.


               •          Горячее обновление кода из коробки без усилий программиста
                          даже в работающих процессах;

               •          Жестко детерминированные точки обновления кода.

Tuesday, April 13, 2010
Параметризация функций
               Параметризация по типу входных данных:

               •          не всегда отражает детали бизнес-логики;

               •          порождает мифы о непригодности ООП.


               Параметризация по значениям входных данных:

               •          ближе к бизнес-логике;

               •          дает удобный синтаксис для работы с бинарными данными.
Tuesday, April 13, 2010
RPC
                  •        Задача вызова функций на другом компьютере для семейства
                           языков C за 30 лет не решена до конца;

                  •        Проблемы с передачей объектов, ссылок на них, распределенной
                           сборкой мусора.


               •          Замена в erlang классических объектов и ссылок на них на
                          процессы, PID-ы которых прозрачно передаются по сети в
                          сообщениях;

               •          Надежный мониторинг состояния процессов на других нодах.
Tuesday, April 13, 2010
Масштабирование по ядрам

                  •        Сложность написания линейно масштабирующуейся по ядрам
                           программы на C из-за синхронизации доступа к общим данным.




               •          erlang даёт линейное масштабирование по количеству ядер на
                          рассматриваемых задачах без усилий программиста.



Tuesday, April 13, 2010
Время обучения

                  •        Пары месяцев на C++ вряд ли хватит.




               •          По информации от различных источников: 2 недель хватит;

               •          Программист может учиться «в бою» и писать плохой код: он не
                          разрушит работу чужого кода.

Tuesday, April 13, 2010
Неужели нет проблем?

                          Есть — и о некоторых стоит
                                знать заранее.


Tuesday, April 13, 2010
Стоит учесть:

                  •       медленную арифметику;

                  •       сложность ручного контроля за памятью;

                  •       отсутствие штатного менеджера пакетов;

                  •       много церемонии при использовании библиотеки на C;

                  •       непригодность для embedded: 10МБ RAM минимум для erlang.


Tuesday, April 13, 2010
Роль erlang в erlyvideo
                  •       Эффективный, отлаженный, взрослый инструмент для создания
                          сетевого сервера;

                  •       более быстрое развитие, чем у аналогичного сервера на Java: Red5;

                  •       мало коммитеров как из-за специфики предметной области, так и
                          из-за редкого языка;

                  •       сложности со скриптингом: lua/руби в erlang не встроишь;

                  •       больше концентрации на предметной области, чем на языке.

Tuesday, April 13, 2010
Результаты erlyvideo
                              В короткие сроки получился медиасервер, который умеет:

               •          Брать видео из файлов, с плат захвата, программ транскодирования и аппаратных
                          перекодировщиков, с IP-вебкамер и обычных камер;

               •          Раздавать видео как флеш-клиентам по RTMP и endless flv, так на iPhone и телеприставки;

               •          Организовывать видеоконференции через веб;

               •          Выполнять функции на сервере;

               •          Показывать прямые трансляции с отмоткой назад;

               •          Справляется с обслуживанием 1800 пользователей, раздавая 1 гигабит видео с одного
                          компьютера.


Tuesday, April 13, 2010
Цены на RTMP серверы:
                  •       Erlyvideo 0$ (открыты исходники, MIT)

                  •       Adobe FMS 4500$ (995$ за крайне урезанный вариант) (закрытый)

                  •       Wowza 995$ (закрытый)

                  •       Red5 0$ (открыты исходники, LGPL)




Tuesday, April 13, 2010
Планы развития
                                          erlyvideo
                  •       Раздача прямого эфира на iPhone из буфера таймшифта;

                  •       Сохранение и показ бесконечных потоков с камер
                          видеонаблюдения;

                  •       Серверное эхоподавление (с веб-страницы нельзя проводить
                          конференцию без гарнитуры).



Tuesday, April 13, 2010
Выводы

                  •       Erlang — эффективная как по скорости разработки, так и
                          стабильности работы среда;

                  •       Вполне обосновано использование erlang вместо классического
                          выбора (C++/Java);

                  •       Доказательством тому является полнофункциональный,
                          развивающийся видеостриминговый сервер erlyvideo.



Tuesday, April 13, 2010
Вопросы?

                            Макс Лапшин
                               max@evilmartians.com



                          http://erlyvideo.org/

Tuesday, April 13, 2010

Mais conteúdo relacionado

Semelhante a Erlyvideo v3

что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
rit2011
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис Цыплаков
Alex Tumanoff
 
[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF
Aleksey Shipilev
 
Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.
Max Lapshin
 
Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
Николай Сивко "Хорошо поддерживаемое в продакшне приложение"Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
Tanya Denisyuk
 
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
HappyDev
 
вычислительное устройство, компьютер
вычислительное устройство, компьютервычислительное устройство, компьютер
вычислительное устройство, компьютер
psemitkin
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей Шетухин
Ontico
 
Роман Еникеев - PHP обязан умирать
Роман Еникеев - PHP обязан умиратьРоман Еникеев - PHP обязан умирать
Роман Еникеев - PHP обязан умирать
DataArt
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
Alex Chistyakov
 

Semelhante a Erlyvideo v3 (20)

Erlang for Yandex
Erlang for YandexErlang for Yandex
Erlang for Yandex
 
Eventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийEventmachine: структура evented-приложений
Eventmachine: структура evented-приложений
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис Цыплаков
 
[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF
 
Wargaming.net: Архитектура современных 3D движков
Wargaming.net: Архитектура современных 3D движковWargaming.net: Архитектура современных 3D движков
Wargaming.net: Архитектура современных 3D движков
 
Erlang ruby
Erlang rubyErlang ruby
Erlang ruby
 
“Чем хорош Erlang вообще и для веб-разработки в частности?”

“Чем хорош Erlang вообще и для веб-разработки в частности?”
“Чем хорош Erlang вообще и для веб-разработки в частности?”

“Чем хорош Erlang вообще и для веб-разработки в частности?”

 
Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
 
Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
Николай Сивко "Хорошо поддерживаемое в продакшне приложение"Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
 
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
Porting existing games to Apple Metal API. Case study: Divinity Original Sin ...
 
Distributed systems
Distributed systemsDistributed systems
Distributed systems
 
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
 
вычислительное устройство, компьютер
вычислительное устройство, компьютервычислительное устройство, компьютер
вычислительное устройство, компьютер
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей Шетухин
 
Зачем нужен Go?
Зачем нужен Go?Зачем нужен Go?
Зачем нужен Go?
 
Роман Еникеев - PHP обязан умирать
Роман Еникеев - PHP обязан умиратьРоман Еникеев - PHP обязан умирать
Роман Еникеев - PHP обязан умирать
 
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 

Erlyvideo v3

  • 1. Erlyvideo — видеостриминг на erlang Макс Лапшин max@evilmartians.com http://erlyvideo.org/ Tuesday, April 13, 2010
  • 2. Телевизор был удобным • Включил и смотри; • Быстро и удобно переключать каналы. Tuesday, April 13, 2010
  • 3. А так ли удобен интернет? • Как долго стартует просмотр видео в интернете? • Почему такая медленная перемотка по роликам на ютубе? • На что тратится такая мощь и скорость каналов? • Что выберет ваша бабушка: телевизор Рубин или ютуб? Tuesday, April 13, 2010
  • 4. Плата за возможность смотреть то, что хочешь • Телевизор показывает то, что • В интернете выбираем сами; подготовили для всех; • Сервер для каждого • Телебашня вещает выполняет персональные миллионам одно и то же. действия. Tuesday, April 13, 2010
  • 5. Какие проблемы в интернете? • Большое время открытия видео с сервера; • Сложность алгоритмов сжатия видео; • Невозможность покадровой перемотки; • Чувствительность к потерям данных; • Неравномерная скорость сети. Tuesday, April 13, 2010
  • 6. Все способы трансляции видео в интернете имеют плюсы и минусы. Какие? Tuesday, April 13, 2010
  • 7. Файлы по HTTP • Путь, выбранный youtube.com; • Прекрасное решение для 10-минутных роликов; • Самые низкие стартовые траты на ПО и аппаратуру; • Мучительная перемотка; • Неравномерное использование канала; • Непригодность для трансляции прямого эфира. Tuesday, April 13, 2010
  • 8. «Бесконечные» файлы по HTTP • Несложный способ раздачи прямого эфира; • Проблемы с антивирусами; • Невозможность отмотки назад (timeshift); • На паузе можно держать не больше чем позволит жесткий диск; • Невозможно транслировать видео на сервер с камеры; • Невозможность контролировать буфер проигрывания. Tuesday, April 13, 2010
  • 9. RTMP (Adobe streaming) Real Time Media Protocol • Оптимальное использование ширины канала; • Быстрая перемотка; • Быстрый старт проигрывания; • Возможность видеоконференции. • Закрытый протокол; • Проблемы с антивирусами; • Сервер обязан присылать видеокадры в реальном времени. Tuesday, April 13, 2010
  • 10. Существующий у меня опыт • Есть успешная реализация RTMP сервера на ObjectiveC; • Сложности с таймаутами, утечками памяти, многоядерностью; • Возникло предположение, что многие проблемы — артефакты платформы. Tuesday, April 13, 2010
  • 11. Гипотеза об эффективности erlang Предположение: язык erlang даст сосредоточиться на бизнес-логике. Результат: erlyvideo — открытый видеостриминговый сервер. Tuesday, April 13, 2010
  • 13. Много ядер — много ниток • Языки C++, Java и т.п. дают возможность разрушить приложение одновременным доступом к памяти из разных ниток; • Ошибка в одной нитке может разрушить остальные. • В erlang-е существует полная изоляция данных и кода по псевдопроцессам (сотни тысяч в одной программе); • Ошибка в одном псевдопроцессе не обрушит остальные; Tuesday, April 13, 2010
  • 14. Утечки памяти • Сложность инструментов (valgrind) для нахождения утечек на C; • Дороговизна полного устранения утечек в программе на С. • Иная природа утечек памяти в erlang упрощает устранение: оно сводится к локализации и проблемой не является. Tuesday, April 13, 2010
  • 15. Горячее обновление кода • На языках C, Java и т.п. задача обновления кода не решена до конца; • Отсутствует простой способ обновления кода без отключения клиентов. • Горячее обновление кода из коробки без усилий программиста даже в работающих процессах; • Жестко детерминированные точки обновления кода. Tuesday, April 13, 2010
  • 16. Параметризация функций Параметризация по типу входных данных: • не всегда отражает детали бизнес-логики; • порождает мифы о непригодности ООП. Параметризация по значениям входных данных: • ближе к бизнес-логике; • дает удобный синтаксис для работы с бинарными данными. Tuesday, April 13, 2010
  • 17. RPC • Задача вызова функций на другом компьютере для семейства языков C за 30 лет не решена до конца; • Проблемы с передачей объектов, ссылок на них, распределенной сборкой мусора. • Замена в erlang классических объектов и ссылок на них на процессы, PID-ы которых прозрачно передаются по сети в сообщениях; • Надежный мониторинг состояния процессов на других нодах. Tuesday, April 13, 2010
  • 18. Масштабирование по ядрам • Сложность написания линейно масштабирующуейся по ядрам программы на C из-за синхронизации доступа к общим данным. • erlang даёт линейное масштабирование по количеству ядер на рассматриваемых задачах без усилий программиста. Tuesday, April 13, 2010
  • 19. Время обучения • Пары месяцев на C++ вряд ли хватит. • По информации от различных источников: 2 недель хватит; • Программист может учиться «в бою» и писать плохой код: он не разрушит работу чужого кода. Tuesday, April 13, 2010
  • 20. Неужели нет проблем? Есть — и о некоторых стоит знать заранее. Tuesday, April 13, 2010
  • 21. Стоит учесть: • медленную арифметику; • сложность ручного контроля за памятью; • отсутствие штатного менеджера пакетов; • много церемонии при использовании библиотеки на C; • непригодность для embedded: 10МБ RAM минимум для erlang. Tuesday, April 13, 2010
  • 22. Роль erlang в erlyvideo • Эффективный, отлаженный, взрослый инструмент для создания сетевого сервера; • более быстрое развитие, чем у аналогичного сервера на Java: Red5; • мало коммитеров как из-за специфики предметной области, так и из-за редкого языка; • сложности со скриптингом: lua/руби в erlang не встроишь; • больше концентрации на предметной области, чем на языке. Tuesday, April 13, 2010
  • 23. Результаты erlyvideo В короткие сроки получился медиасервер, который умеет: • Брать видео из файлов, с плат захвата, программ транскодирования и аппаратных перекодировщиков, с IP-вебкамер и обычных камер; • Раздавать видео как флеш-клиентам по RTMP и endless flv, так на iPhone и телеприставки; • Организовывать видеоконференции через веб; • Выполнять функции на сервере; • Показывать прямые трансляции с отмоткой назад; • Справляется с обслуживанием 1800 пользователей, раздавая 1 гигабит видео с одного компьютера. Tuesday, April 13, 2010
  • 24. Цены на RTMP серверы: • Erlyvideo 0$ (открыты исходники, MIT) • Adobe FMS 4500$ (995$ за крайне урезанный вариант) (закрытый) • Wowza 995$ (закрытый) • Red5 0$ (открыты исходники, LGPL) Tuesday, April 13, 2010
  • 25. Планы развития erlyvideo • Раздача прямого эфира на iPhone из буфера таймшифта; • Сохранение и показ бесконечных потоков с камер видеонаблюдения; • Серверное эхоподавление (с веб-страницы нельзя проводить конференцию без гарнитуры). Tuesday, April 13, 2010
  • 26. Выводы • Erlang — эффективная как по скорости разработки, так и стабильности работы среда; • Вполне обосновано использование erlang вместо классического выбора (C++/Java); • Доказательством тому является полнофункциональный, развивающийся видеостриминговый сервер erlyvideo. Tuesday, April 13, 2010
  • 27. Вопросы? Макс Лапшин max@evilmartians.com http://erlyvideo.org/ Tuesday, April 13, 2010