Erlyvideo потоковое видео на Erlang
-
Upload
caryn-salas -
Category
Documents
-
view
56 -
download
5
description
Transcript of Erlyvideo потоковое видео на Erlang
![Page 2: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/2.jpg)
Что такое стриминг?
![Page 3: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/3.jpg)
Ютуб — это не стриминг.
![Page 4: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/4.jpg)
10 минут видео раздаются nginx
![Page 5: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/5.jpg)
Что же такое «стриминг»?
![Page 6: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/6.jpg)
Пользовательское ТВ
![Page 7: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/7.jpg)
Пользовательское ТВ
•Пользователь загружает видеофайлы
![Page 8: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/8.jpg)
Пользовательское ТВ
•Пользователь загружает видеофайлы
•Составляет плейлист
![Page 9: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/9.jpg)
Пользовательское ТВ
•Пользователь загружает видеофайлы
•Составляет плейлист
•По запросу других плейлист начинает проигрываться
![Page 10: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/10.jpg)
Пользовательское ТВ
•Пользователь загружает видеофайлы
•Составляет плейлист
•По запросу других плейлист начинает проигрываться
•Если никому не нужно, то видео не играется
![Page 11: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/11.jpg)
Может всё таки nginx?
![Page 12: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/12.jpg)
nginx не справится с организацией видеопотока
![Page 13: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/13.jpg)
Для этой задачи нужен стример
![Page 14: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/14.jpg)
Что делает стример?
•Распаковывает видео и аудио из файловых контейнеров
![Page 15: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/15.jpg)
Что делает стример?
•Распаковывает видео и аудио из файловых контейнеров
•Упаковывает в транспортный контейнер
![Page 16: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/16.jpg)
Что делает стример?
•Распаковывает видео и аудио из файловых контейнеров
•Упаковывает в транспортный контейнер
•Посылает кадры синхронно с реальным временем
![Page 17: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/17.jpg)
Отступление про кодеки
•Кодек — формат представления сжатых аудио и видео данных
•Контейнер — формат упаковки одного и более потоков аудио и видео в файле или в потоке
•H.264/AAC — лучшие кодеки
•MP4 — самый компактный файловый контейнер
![Page 18: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/18.jpg)
Этапы User TV
•Скачать плейлист
•Распаковать файл
•Упаковать кадры в транспортный контейнер (RTMP, MPEG-TS,…)
•Зачистить всё, когда уйдут клиенты
•Позволить обновить код, не отключая клиентов
![Page 19: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/19.jpg)
Традиционные способы решения
•Red5, Wowza — Java
• rtmpd — C++
![Page 20: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/20.jpg)
Парсинг 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](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/21.jpg)
Парсинг 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](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/22.jpg)
Меньше кода, меньше места ошибкам
![Page 23: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/23.jpg)
Тысячи клиентов — новые проблемы
![Page 24: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/24.jpg)
Проблемы классических решений при тысячах
клиентов•Управление памятью: утекание, либо
преждевременное высвобождение
•Контроль за ресурсами клиентов
•Хаотическое разрушение системы при сбое в одном месте
•Ввод/вывод при обслуживании тысяч клиентов
![Page 25: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/25.jpg)
Red5 валится под 100 пользователями
![Page 26: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/26.jpg)
Wowza распухает при сложной бизнес-логике
![Page 27: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/27.jpg)
epoll/kqueue сложны для долгих соединений из-за
управления памятью
![Page 28: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/28.jpg)
rtmpd сваливается в core dump ежедневно из-за
мелких сбоев
![Page 29: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/29.jpg)
Корни проблем
•Общая память
![Page 30: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/30.jpg)
Корни проблем
•Общая память
•Передача данных по ссылкам
![Page 31: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/31.jpg)
Web-подход: пускай течет, скоро
прибьемне работает
![Page 32: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/32.jpg)
Erlang решает эти проблемы радикально
![Page 33: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/33.jpg)
Процессы
•Параллельные потоки выполнения
•Изолированная область памяти
•Обмен через посылку сообщений
•Переменные неизменяемые
•Нет данных вне процессов
![Page 34: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/34.jpg)
Все данные хранятся внутри перечислимых
объектов
![Page 35: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/35.jpg)
Обработка ошибок
•Их можно ловить
•Если не ловить, то завершается процесс
•Соседи об этом узнают через сообщения
•Гарантированная зачистка ресурсов
![Page 36: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/36.jpg)
Слежение за процессами
•Связи
•Супервизоры
•appmon
![Page 37: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/37.jpg)
В Erlang настоящее горячее обновление кода
![Page 38: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/38.jpg)
Без отключения клиентов!
![Page 39: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/39.jpg)
Какие результаты использования Erlang?
![Page 40: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/40.jpg)
Erlyvideo
•Мультипротокольный сервер
•Держит тысячи клиентов на одном сервере
•Существующая инфраструктура для плагинов
![Page 41: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/41.jpg)
Решает озвученную задачу
![Page 42: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/42.jpg)
Выводы
•Задачи потокового видео имеют специфику, отличающую их от веба
•Необходимы инструменты эффективные и высокоуровневые одновременно
•Erlang прекрасно вписывается в эту нишу
•Практическое использование показало эффективность выбора
![Page 43: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/43.jpg)
Где ещё использовать?
![Page 44: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/44.jpg)
Применимость erlang
•Видеостриминг (erlyvideo)
![Page 45: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/45.jpg)
Применимость erlang
•Видеостриминг (erlyvideo)
• Jabber-сервер (ejabberd)
![Page 46: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/46.jpg)
Применимость erlang
•Видеостриминг (erlyvideo)
• Jabber-сервер (ejabberd)
•Банковский процессинг (Приват Банк)
![Page 47: Erlyvideo потоковое видео на Erlang](https://reader035.fdocuments.net/reader035/viewer/2022062304/56813716550346895d9ea219/html5/thumbnails/47.jpg)
Применимость erlang
•Видеостриминг (erlyvideo)
• Jabber-сервер (ejabberd)
•Банковский процессинг (Приват Банк)
•Онлайн игры (Online Poker)