SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
Erlyvideo —
                          видеостриминг на
                                erlang
                                 Макс Лапшин
                              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
Вопросы?

                            Макс Лапшин

                          http://erlyvideo.org/


Tuesday, April 13, 2010

Weitere ähnliche Inhalte

Ähnlich wie Max Lapshin Erlyvideo V2

Что и почему писать на Erlang
Что и почему писать на ErlangЧто и почему писать на Erlang
Что и почему писать на ErlangMax Lapshin
 
Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?Minsk Linux User Group
 
Erlang for Yandex
Erlang for YandexErlang for Yandex
Erlang for YandexMax Lapshin
 
Eventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийEventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийАлександр Ежов
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4rit2011
 
Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Max Lapshin
 
[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoFAleksey Shipilev
 
“Чем хорош Erlang вообще и для веб-разработки в частности?”

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

“Чем хорош Erlang вообще и для веб-разработки в частности?”
Olga Lavrentieva
 
Wargaming.net: Архитектура современных 3D движков
Wargaming.net: Архитектура современных 3D движковWargaming.net: Архитектура современных 3D движков
Wargaming.net: Архитектура современных 3D движковDevGAMM Conference
 
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 ...DevGAMM Conference
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковAlex Tumanoff
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)Ontico
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинOntico
 
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...HappyDev
 
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019corehard_by
 
dont badmouth mojo
dont badmouth mojodont badmouth mojo
dont badmouth mojoAnton Ukolov
 

Ähnlich wie Max Lapshin Erlyvideo V2 (20)

Erlyvideo
ErlyvideoErlyvideo
Erlyvideo
 
Что и почему писать на Erlang
Что и почему писать на ErlangЧто и почему писать на Erlang
Что и почему писать на Erlang
 
Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?
 
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
 
Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.
 
[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF
 
Erlang ruby
Erlang rubyErlang ruby
Erlang ruby
 
“Чем хорош Erlang вообще и для веб-разработки в частности?”

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

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

 
Wargaming.net: Архитектура современных 3D движков
Wargaming.net: Архитектура современных 3D движковWargaming.net: Архитектура современных 3D движков
Wargaming.net: Архитектура современных 3D движков
 
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 ...
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис Цыплаков
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 
Distributed systems
Distributed systemsDistributed systems
Distributed systems
 
История проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей ШетухинИстория проекта, который никогда не падает / Андрей Шетухин
История проекта, который никогда не падает / Андрей Шетухин
 
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
 
Зачем нужен Go?
Зачем нужен Go?Зачем нужен Go?
Зачем нужен Go?
 
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
Многопоточность в играх. Игорь Лобанчиков. CoreHard Spring 2019
 
dont badmouth mojo
dont badmouth mojodont badmouth mojo
dont badmouth mojo
 

Mehr von rit2010

Sphinx new
Sphinx newSphinx new
Sphinx newrit2010
 
Microsoft cluster systems ritconf
Microsoft cluster systems ritconfMicrosoft cluster systems ritconf
Microsoft cluster systems ritconfrit2010
 
анатомия интернет банка Publish
анатомия интернет банка Publishанатомия интернет банка Publish
анатомия интернет банка Publishrit2010
 
анатомия интернет банка Publish
анатомия интернет банка Publishанатомия интернет банка Publish
анатомия интернет банка Publishrit2010
 
Anatol filin pragmatic documentation 1_r
Anatol filin  pragmatic documentation 1_rAnatol filin  pragmatic documentation 1_r
Anatol filin pragmatic documentation 1_rrit2010
 
Ilia kantor паттерны серверных comet решений
Ilia kantor паттерны серверных comet решенийIlia kantor паттерны серверных comet решений
Ilia kantor паттерны серверных comet решенийrit2010
 
Alexei shilov 2010 rit-rakudo
Alexei shilov 2010 rit-rakudoAlexei shilov 2010 rit-rakudo
Alexei shilov 2010 rit-rakudorit2010
 
Alexandre.iline rit 2010 java_fxui_extra
Alexandre.iline rit 2010 java_fxui_extraAlexandre.iline rit 2010 java_fxui_extra
Alexandre.iline rit 2010 java_fxui_extrarit2010
 
Konstantin kolomeetz послание внутреннему заказчику
Konstantin kolomeetz послание внутреннему заказчикуKonstantin kolomeetz послание внутреннему заказчику
Konstantin kolomeetz послание внутреннему заказчикуrit2010
 
Bykov monitoring mailru
Bykov monitoring mailruBykov monitoring mailru
Bykov monitoring mailrurit2010
 
Alexander shigin slides
Alexander shigin slidesAlexander shigin slides
Alexander shigin slidesrit2010
 
иван василевич Eye tracking и нейрокомпьютерный интерфейс
иван василевич Eye tracking и нейрокомпьютерный интерфейсиван василевич Eye tracking и нейрокомпьютерный интерфейс
иван василевич Eye tracking и нейрокомпьютерный интерфейсrit2010
 
Andrey Petrov P D P
Andrey Petrov P D PAndrey Petrov P D P
Andrey Petrov P D Prit2010
 
Andrey Petrov методология P D P, часть 1, цели вместо кейсов
Andrey Petrov методология P D P, часть 1, цели вместо кейсовAndrey Petrov методология P D P, часть 1, цели вместо кейсов
Andrey Petrov методология P D P, часть 1, цели вместо кейсовrit2010
 
Dmitry lohansky rit2010
Dmitry lohansky rit2010Dmitry lohansky rit2010
Dmitry lohansky rit2010rit2010
 
Dmitry Lohansky Rit2010
Dmitry Lohansky Rit2010Dmitry Lohansky Rit2010
Dmitry Lohansky Rit2010rit2010
 
Related Queries Braslavski Yandex
Related Queries Braslavski YandexRelated Queries Braslavski Yandex
Related Queries Braslavski Yandexrit2010
 
молчанов сергей датацентры 10 04 2010 Light
молчанов сергей датацентры 10 04 2010  Lightмолчанов сергей датацентры 10 04 2010  Light
молчанов сергей датацентры 10 04 2010 Lightrit2010
 
Sergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
Sergey Ilinsky Rit 2010 Complex Gui Development Ample SdkSergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
Sergey Ilinsky Rit 2010 Complex Gui Development Ample Sdkrit2010
 
Serge P Nekoval Grails
Serge P  Nekoval GrailsSerge P  Nekoval Grails
Serge P Nekoval Grailsrit2010
 

Mehr von rit2010 (20)

Sphinx new
Sphinx newSphinx new
Sphinx new
 
Microsoft cluster systems ritconf
Microsoft cluster systems ritconfMicrosoft cluster systems ritconf
Microsoft cluster systems ritconf
 
анатомия интернет банка Publish
анатомия интернет банка Publishанатомия интернет банка Publish
анатомия интернет банка Publish
 
анатомия интернет банка Publish
анатомия интернет банка Publishанатомия интернет банка Publish
анатомия интернет банка Publish
 
Anatol filin pragmatic documentation 1_r
Anatol filin  pragmatic documentation 1_rAnatol filin  pragmatic documentation 1_r
Anatol filin pragmatic documentation 1_r
 
Ilia kantor паттерны серверных comet решений
Ilia kantor паттерны серверных comet решенийIlia kantor паттерны серверных comet решений
Ilia kantor паттерны серверных comet решений
 
Alexei shilov 2010 rit-rakudo
Alexei shilov 2010 rit-rakudoAlexei shilov 2010 rit-rakudo
Alexei shilov 2010 rit-rakudo
 
Alexandre.iline rit 2010 java_fxui_extra
Alexandre.iline rit 2010 java_fxui_extraAlexandre.iline rit 2010 java_fxui_extra
Alexandre.iline rit 2010 java_fxui_extra
 
Konstantin kolomeetz послание внутреннему заказчику
Konstantin kolomeetz послание внутреннему заказчикуKonstantin kolomeetz послание внутреннему заказчику
Konstantin kolomeetz послание внутреннему заказчику
 
Bykov monitoring mailru
Bykov monitoring mailruBykov monitoring mailru
Bykov monitoring mailru
 
Alexander shigin slides
Alexander shigin slidesAlexander shigin slides
Alexander shigin slides
 
иван василевич Eye tracking и нейрокомпьютерный интерфейс
иван василевич Eye tracking и нейрокомпьютерный интерфейсиван василевич Eye tracking и нейрокомпьютерный интерфейс
иван василевич Eye tracking и нейрокомпьютерный интерфейс
 
Andrey Petrov P D P
Andrey Petrov P D PAndrey Petrov P D P
Andrey Petrov P D P
 
Andrey Petrov методология P D P, часть 1, цели вместо кейсов
Andrey Petrov методология P D P, часть 1, цели вместо кейсовAndrey Petrov методология P D P, часть 1, цели вместо кейсов
Andrey Petrov методология P D P, часть 1, цели вместо кейсов
 
Dmitry lohansky rit2010
Dmitry lohansky rit2010Dmitry lohansky rit2010
Dmitry lohansky rit2010
 
Dmitry Lohansky Rit2010
Dmitry Lohansky Rit2010Dmitry Lohansky Rit2010
Dmitry Lohansky Rit2010
 
Related Queries Braslavski Yandex
Related Queries Braslavski YandexRelated Queries Braslavski Yandex
Related Queries Braslavski Yandex
 
молчанов сергей датацентры 10 04 2010 Light
молчанов сергей датацентры 10 04 2010  Lightмолчанов сергей датацентры 10 04 2010  Light
молчанов сергей датацентры 10 04 2010 Light
 
Sergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
Sergey Ilinsky Rit 2010 Complex Gui Development Ample SdkSergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
Sergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
 
Serge P Nekoval Grails
Serge P  Nekoval GrailsSerge P  Nekoval Grails
Serge P Nekoval Grails
 

Max Lapshin Erlyvideo V2

  • 1. Erlyvideo — видеостриминг на erlang Макс Лапшин 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. Вопросы? Макс Лапшин http://erlyvideo.org/ Tuesday, April 13, 2010