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

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

description

Erlyvideo потоковое видео на Erlang. Макс Лапшин [email protected] http://erlyvideo.org /. Что такое стриминг?. Ютуб — это не стриминг. 10 минут видео раздаются nginx. Что же такое «стриминг»?. Пользовательское ТВ. Пользовательское ТВ. Пользователь загружает видеофайлы. - PowerPoint PPT Presentation

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Этапы User TV

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

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

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

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

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

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

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

•Red5, Wowza — Java

• rtmpd — C++

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

Парсинг mp3 на Javaif (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 потоковое видео на Erlang

Парсинг mp3 на Erlangdecode(<<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 потоковое видео на Erlang

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

мелких сбоев

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

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

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

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

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

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

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

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

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

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

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

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

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

Процессы

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

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

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

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

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

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

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

объектов

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

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

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

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

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

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

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

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

•Связи

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

•appmon

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

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

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

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

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

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

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

Erlyvideo

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

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

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

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

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

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

Выводы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вопросы?

Макс Лапшин

[email protected]

http://erlyvideo.org/