27
Erlyvideo — видеостриминг на erlang Макс Лапшин http://erlyvideo.org / Monday, April 12, 2010

Max Lapshin Erlyvideo V1

Embed Size (px)

Citation preview

Page 1: Max Lapshin Erlyvideo V1

Erlyvideo —видеостриминг на

erlang

Макс Лапшинhttp://erlyvideo.org/

Monday, April 12, 2010

Page 2: Max Lapshin Erlyvideo V1

Телевизор был удобный

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

Monday, April 12, 2010

Page 3: Max Lapshin Erlyvideo V1

А так же удобен интернет?

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

• На что тратится такая мощь и скорость каналов?• Что выберет ваша бабушка: телевизор Рубин или ютуб?

Monday, April 12, 2010

Page 4: Max Lapshin Erlyvideo V1

Плата за возможность смотреть что хочешь

• Телевизор показывает то, что подготовили для всех;

• Телебашня вещает миллионам одно и то же.

• В интернете выбираем сами;

• Сервер для каждого выполняет персональные действия.

Monday, April 12, 2010

Page 5: Max Lapshin Erlyvideo V1

Какие проблемы в интернете?

• Большое время открытия видео с сервера;• Очень сложные алгоритмы сжатия видео;

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

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

Monday, April 12, 2010

Page 6: Max Lapshin Erlyvideo V1

Все способы трансляции видеов интернете имеют проблемы.

Какие?

Monday, April 12, 2010

Page 7: Max Lapshin Erlyvideo V1

Файлы по HTTP

• Путь, выбранный youtube.com;

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

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

• Мучительная перемотка;• Неравномерное использование канала;• Непригодность для трансляции прямого эфира.

Monday, April 12, 2010

Page 8: Max Lapshin Erlyvideo V1

«Бесконечные» файлы по HTTP

• Несложный способ раздачи прямого эфира;

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

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

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

Monday, April 12, 2010

Page 9: Max Lapshin Erlyvideo V1

RTMP (Adobe streaming)

• Оптимальное использование ширины канала;

• Быстрая перемотка;• Быстрый старт проигрывания;• Возможность видеоконференции.

• Закрытый протокол;• Проблемы с антивирусами.

Real Time Media Protocol

Monday, April 12, 2010

Page 10: Max Lapshin Erlyvideo V1

Существующий опыт

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

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

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

Monday, April 12, 2010

Page 11: Max Lapshin Erlyvideo V1

Гипотеза об эффективности erlang

Предположение: язык erlang даст сосредоточиться на бизнес-логике.

Результат: erlyvideo — открытый видеостриминговый сервер.

Monday, April 12, 2010

Page 12: Max Lapshin Erlyvideo V1

Почему именно erlang?

Monday, April 12, 2010

Page 13: Max Lapshin Erlyvideo V1

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

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

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

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

Monday, April 12, 2010

Page 14: Max Lapshin Erlyvideo V1

Утечки памяти

• Сложность инструментов (valgrind) для нахождения утечек на C;

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

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

Monday, April 12, 2010

Page 15: Max Lapshin Erlyvideo V1

Горячее обновление кода

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

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

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

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

Monday, April 12, 2010

Page 16: Max Lapshin Erlyvideo V1

Параметризация функций

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

• не всегда отражает детали бизнес-логики;• порождает мифы о непригодности ООП.

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

• ближе к бизнес-логике;• дает удобный синтаксис для работы с бинарными данными.

Monday, April 12, 2010

Page 17: Max Lapshin Erlyvideo V1

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

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

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

• Надежный мониторинг состояния процессов на других нодах.Monday, April 12, 2010

Page 18: Max Lapshin Erlyvideo V1

Масштабирование по ядрам

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

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

Monday, April 12, 2010

Page 19: Max Lapshin Erlyvideo V1

Время обучения

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

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

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

Monday, April 12, 2010

Page 20: Max Lapshin Erlyvideo V1

Неужели нет проблем?

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

Monday, April 12, 2010

Page 21: Max Lapshin Erlyvideo V1

Стоит учесть:

• В erlang медленная арифметика;

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

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

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

Monday, April 12, 2010

Page 22: Max Lapshin Erlyvideo V1

Роль erlang в erlyvideo

• Эффективный, отлаженный, взрослый инструмент для создания сетевого сервера;

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

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

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

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

Monday, April 12, 2010

Page 23: Max Lapshin Erlyvideo V1

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

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

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

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

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

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

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

Monday, April 12, 2010

Page 24: Max Lapshin Erlyvideo V1

Цены на RTMP серверы:

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

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

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

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

Monday, April 12, 2010

Page 25: Max Lapshin Erlyvideo V1

Планы развития

• Раздача прямого эфира на iPhone из буфера таймшифта;

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

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

Monday, April 12, 2010

Page 26: Max Lapshin Erlyvideo V1

Выводы

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

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

• Примером тому является хорошо развивающийся видеостриминговый сервер erlyvideo.

Monday, April 12, 2010

Page 27: Max Lapshin Erlyvideo V1

Вопросы?

http://erlyvideo.org/

Monday, April 12, 2010