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
Много ядер — много ниток
• Языки 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