48
Макс Лапшин [email protected] http://erlyvideo.org / Erlyvideo потоковое видео на Erlang

Макс Лапшин Erlyvideo

  • Upload
    siel01

  • View
    2.778

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Макс Лапшин   Erlyvideo

Макс Лапшин[email protected]://erlyvideo.org/

Erlyvideoпотоковое видео на Erlang

Page 2: Макс Лапшин   Erlyvideo

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

Page 3: Макс Лапшин   Erlyvideo

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

Page 4: Макс Лапшин   Erlyvideo

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

Page 5: Макс Лапшин   Erlyvideo

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

Page 6: Макс Лапшин   Erlyvideo

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

Page 7: Макс Лапшин   Erlyvideo

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

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

Page 8: Макс Лапшин   Erlyvideo

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

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

•Составляет плейлист

Page 9: Макс Лапшин   Erlyvideo

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

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

•Составляет плейлист

•По запросу других плейлист начинает проигрываться

Page 10: Макс Лапшин   Erlyvideo

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

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

•Составляет плейлист

•По запросу других плейлист начинает проигрываться

•Если никому не нужно, то видео не играется

Page 11: Макс Лапшин   Erlyvideo

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

Page 12: Макс Лапшин   Erlyvideo

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

Page 13: Макс Лапшин   Erlyvideo

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

Page 14: Макс Лапшин   Erlyvideo

Что делает стример?

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

Page 15: Макс Лапшин   Erlyvideo

Что делает стример?

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

•Упаковывает в транспортный контейнер

Page 16: Макс Лапшин   Erlyvideo

Что делает стример?

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

•Упаковывает в транспортный контейнер

•Посылает кадры синхронно с реальным временем

Page 17: Макс Лапшин   Erlyvideo

Отступление про кодеки

•Кодек — формат представления сжатых аудио и видео данных

•Контейнер — формат упаковки одного и более потоков аудио и видео в файле или в потоке

•H.264/AAC — лучшие кодеки

•MP4 — самый компактный файловый контейнер

Page 18: Макс Лапшин   Erlyvideo

Этапы User TV

•Скачать плейлист

•Распаковать файл

•Упаковать кадры в транспортный контейнер (RTMP, MPEG-TS,…)

•Зачистить всё, когда уйдут клиенты

•Позволить обновить код, не отключая клиентов

Page 19: Макс Лапшин   Erlyvideo

Традиционные способы решения

•Red5, Wowza — Java

• rtmpd — C++

Page 20: Макс Лапшин   Erlyvideo

Парсинг 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);

• }

• }

Page 21: Макс Лапшин   Erlyvideo

Парсинг mp3 на Erlang• decode(<<2#11111111111:11, VsnBits:2, LayerBits:2, _:1, BitRate:4, _/binary>> = Packet) ->

• Layer = layer(LayerBits),

• Version = version(VsnBits),

• <<Frame:(framelength(bitrate({Version,Layer}, BitRate))/binary, Rest/binary>> = Packet,

• {ok, Frame, Rest}.

Page 22: Макс Лапшин   Erlyvideo

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

Page 23: Макс Лапшин   Erlyvideo

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

Page 24: Макс Лапшин   Erlyvideo

Проблемы классических решений при тысячах

клиентов•Управление памятью: утекание, либо

преждевременное высвобождение

•Контроль за ресурсами клиентов

•Хаотическое разрушение системы при сбое в одном месте

•Ввод/вывод при обслуживании тысяч клиентов

Page 25: Макс Лапшин   Erlyvideo

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

Page 26: Макс Лапшин   Erlyvideo

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

Page 27: Макс Лапшин   Erlyvideo

epoll/kqueue сложны для долгих соединений из-за

управления памятью

Page 28: Макс Лапшин   Erlyvideo

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

мелких сбоев

Page 29: Макс Лапшин   Erlyvideo

Корни проблем

•Общая память

Page 30: Макс Лапшин   Erlyvideo

Корни проблем

•Общая память

•Передача данных по ссылкам

Page 31: Макс Лапшин   Erlyvideo

Web-подход: пускай течет, скоро

прибьемне работает

Page 32: Макс Лапшин   Erlyvideo

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

Page 33: Макс Лапшин   Erlyvideo

Процессы

•Параллельные потоки выполнения

•Изолированная область памяти

•Обмен через посылку сообщений

•Переменные неизменяемые

•Нет данных вне процессов

Page 34: Макс Лапшин   Erlyvideo

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

объектов

Page 35: Макс Лапшин   Erlyvideo

Обработка ошибок

•Их можно ловить

•Если не ловить, то завершается процесс

•Соседи об этом узнают через сообщения

•Гарантированная зачистка ресурсов

Page 36: Макс Лапшин   Erlyvideo

Слежение за процессами

•Связи

•Супервизоры

•appmon

Page 37: Макс Лапшин   Erlyvideo

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

Page 38: Макс Лапшин   Erlyvideo

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

Page 39: Макс Лапшин   Erlyvideo

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

Page 40: Макс Лапшин   Erlyvideo

Erlyvideo

•Мультипротокольный сервер

•Держит тысячи клиентов на одном сервере

•Существующая инфраструктура для плагинов

Page 41: Макс Лапшин   Erlyvideo

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

Page 42: Макс Лапшин   Erlyvideo

Выводы

•Задачи потокового видео имеют специфику, отличающую их от веба

•Необходимы инструменты эффективные и высокоуровневые одновременно

•Erlang прекрасно вписывается в эту нишу

•Практическое использование показало эффективность выбора

Page 43: Макс Лапшин   Erlyvideo

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

Page 44: Макс Лапшин   Erlyvideo

Применимость erlang

•Видеостриминг (erlyvideo)

Page 45: Макс Лапшин   Erlyvideo

Применимость erlang

•Видеостриминг (erlyvideo)

• Jabber-сервер (ejabberd)

Page 46: Макс Лапшин   Erlyvideo

Применимость erlang

•Видеостриминг (erlyvideo)

• Jabber-сервер (ejabberd)

•Банковский процессинг (Приват Банк)

Page 47: Макс Лапшин   Erlyvideo

Применимость erlang

•Видеостриминг (erlyvideo)

• Jabber-сервер (ejabberd)

•Банковский процессинг (Приват Банк)

•Онлайн игры (Online Poker)

Page 48: Макс Лапшин   Erlyvideo

Вопросы?

•Макс Лапшин

[email protected]

•http://erlyvideo.org/