Erlyvideo потоковое видео на Erlang Макс Лапшин max@maxidoors.ru

Презентация:



Advertisements
Похожие презентации
Профилирование Эрливидео Макс Лапшин
Advertisements

Erlang: сырая игрушка или надежный инструмент? Макс Лапшин, «Злые марсиане»
Проф. В.К.Толстых, Технологии разработки Internet- приложений ASP.NET приложения – обработка ошибок страниц и приложения, Global.aspx.
Распределенная обработка информации Разработано: Е.Г. Лаврушиной.
Сервер Flash-вещаний (RTMP) на Python или создание высоконагруженных сетевых серверов с использованием Twisted Андрей Смирнов NetStream.
WEB- ТЕХНОЛОГИИ Лекция 1. WEB- ПРИЛОЖЕНИЯ 1 Особый тип программ, построенных по архитектуре « клиент - сервер » Основа получение запросов от пользователя.
Протокол эмуляции удаленного доступа терминала Telnet.
«Крошка Енот» От улыбки хмурый день светлей, От улыбки в небе радуга проснется... Поделись улыбкою своей, И она к тебе не раз еще вернется.
Организация распределенных прикладных систем. Попытаемся ответить на вопросы Как устроены распределенные прикладные системы? Каковы наиболее важные их.
Медиацентр NV Матвиенко Дмитрий Николаевич Eltex, департамент развития бизнеса, руководитель направления IPTV
Лекция 22 Лекция 22 Локальные, сетевые и распределенные базы данных. Архитектура «файл- сервер». Двух и трехуровневая архитектура «клиент-сервер». Модель.
Лекция 6 Понятие операционных систем Учебные вопросы: 1. Характеристики ОС 2. Свободные и проприетарные ОС.
Об агентстве 10 сотрудников 4 года работы 100+ клиентов (проектов) 5 внутренних направлений 03 декабря 2011 г.DrupalConf Moscow.
Программирование на языке Паскаль Работа с файловой системой.
Информационные ресурсы Интернета Из опыта работы учителя информатики Ермаковой Вероники Викентьевны.
Событийные машины Сетевая многозадачность: событийные машины Павел Кудинов HighLoad 2007.
Информационные системы Тема: «Классификация информационных систем» Е.Г. Лаврушина.
"Электронные библиотеки " Дубна Россия Метаданные в системе управления многоязычной лингвистической базой знаний Н.В. Лунева Институт.
Разработка многопользовательских онлайн игр. Архитектура Dozory.ru и Chernovik-online.ru Лекция 3.
1 Системы сбора статистики посещаемости сайтов Гиппиев Михаил группа: Петрозаводск 2010.
Транксрипт:

Erlyvideo потоковое видео на Erlang Макс Лапшин

Что такое стриминг?

Ютуб это не стриминг.

10 минут видео раздаются nginx

Что же такое «стриминг»?

Пользовательское ТВ

Пользователь загружает видеофайлы

Пользовательское ТВ Пользователь загружает видеофайлы Составляет плейлист

Пользовательское ТВ Пользователь загружает видеофайлы Составляет плейлист По запросу других плейлист начинает проигрываться

Пользовательское ТВ Пользователь загружает видеофайлы Составляет плейлист По запросу других плейлист начинает проигрываться Если никому не нужно, то видео не играется

Может всё таки nginx?

nginx не справится с организацией видеопотока

Для этой задачи нужен стример

Что делает стример? Распаковывает видео и аудио из файловых контейнеров

Что делает стример? Распаковывает видео и аудио из файловых контейнеров Упаковывает в транспортный контейнер

Что делает стример? Распаковывает видео и аудио из файловых контейнеров Упаковывает в транспортный контейнер Посылает кадры синхронно с реальным временем

Отступление про кодеки Кодек формат представления сжатых аудио и видео данных Контейнер формат упаковки одного и более потоков аудио и видео в файле или в потоке H.264/AAC лучшие кодеки MP4 самый компактный файловый контейнер

Этапы User TV Скачать плейлист Распаковать файл Упаковать кадры в транспортный контейнер (RTMP, MPEG- TS,…) Зачистить всё, когда уйдут клиенты Позволить обновить код, не отключая клиентов

Традиционные способы решения Red5, Wowza Java rtmpd C++

Парсинг mp3 на Java if (id3v1 instanceof ID3V1_1Tag) { try { // Add the track property graph.add(mp3Resource, processor.resolveIdentifier(IdentifierProcessor.TRCK), factory.createLiteral("" + ((ID3V1_1Tag) id3v1).getAlbumTrack())); } catch (GraphException graphException) { throw new ParserException( "Unable to add track number to id3v1 resource.", graphException); } catch (GraphElementFactoryException graphElementFactoryException) { throw new ParserException(.... ещё 600 строк кода graphElementFactoryException); }

Парсинг mp3 на Erlang decode( > = Packet) -> Layer = layer(LayerBits), Version = version(VsnBits), > = Packet, {ok, Frame, Rest}.

Меньше кода, меньше места ошибкам

Тысячи клиентов новые проблемы

Проблемы классических решений при тысячах клиентов Управление памятью: утекание, либо преждевременное высвобождение Контроль за ресурсами клиентов Хаотическое разрушение системы при сбое в одном месте Ввод/вывод при обслуживании тысяч клиентов

Red5 валится под 100 пользователями

Wowza распухает при сложной бизнес-логике

epoll/kqueue сложны для долгих соединений из-за управления памятью

rtmpd сваливается в core dump ежедневно из-за мелких сбоев

Корни проблем Общая память

Корни проблем Общая память Передача данных по ссылкам

Web-подход: пускай течет, скоро прибьем не работает

Erlang решает эти проблемы радикально

Процессы Параллельные потоки выполнения Изолированная область памяти Обмен через посылку сообщений Переменные неизменяемые Нет данных вне процессов

Все данные хранятся внутри перечислимых объектов

Обработка ошибок Их можно ловить Если не ловить, то завершается процесс Соседи об этом узнают через сообщения Гарантированная зачистка ресурсов

Слежение за процессами Связи Супервизоры appmon

В Erlang настоящее горячее обновление кода

Без отключения клиентов!

Какие результаты использования Erlang?

Erlyvideo Мультипротокольный сервер Держит тысячи клиентов на одном сервере Существующая инфраструктура для плагинов

Решает озвученную задачу

Выводы Задачи потокового видео имеют специфику, отличающую их от веба Необходимы инструменты эффективные и высокоуровневые одновременно Erlang прекрасно вписывается в эту нишу Практическое использование показало эффективность выбора

Где ещё использовать?

Применимость erlang Видеостриминг (erlyvideo)

Применимость erlang Видеостриминг (erlyvideo) Jabber-сервер (ejabberd)

Применимость erlang Видеостриминг (erlyvideo) Jabber-сервер (ejabberd) Банковский процессинг (Приват Банк)

Применимость erlang Видеостриминг (erlyvideo) Jabber-сервер (ejabberd) Банковский процессинг (Приват Банк) Онлайн игры (Online Poker)

Вопросы? Макс Лапшин