Макс Лапшин
max@maxidoors.ru
http://erlyvideo.org/
Erlyvideo
Erlangпотоковое видео на
?Что такое стриминг
— .Ютуб это не стриминг
10 минут видео раздаются
nginx
“ ”?Что же такое стриминг
Пользовательское ТВ
Пользовательское ТВ
• Пользователь загружает видеофайлы
Пользовательское ТВ
• Пользователь загружает видеофайлы
• Составляет плейлист
Пользовательское ТВ
• Пользователь загружает видеофайлы
• Составляет плейлист
• По запросу других плейлист начинает проигр...
Пользовательское ТВ
• Пользователь загружает видеофайлы
• Составляет плейлист
• По запросу других плейлист начинает проигр...
nginx?Может всё таки
nginx не справится с
организацией видеопотока
Для этой задачи нужен
стример
?Что делает стример
• Распаковывает видео и аудио из файловых контейнеров
?Что делает стример
• Распаковывает видео и аудио из файловых контейнеров
• Упаковывает в транспортный контейнер
?Что делает стример
• Распаковывает видео и аудио из файловых контейнеров
• Упаковывает в транспортный контейнер
• Посылае...
Отступление про кодеки
• —Кодек формат представления сжатых аудио и видео
данных
• — Контейнер формат упаковки одного и бо...
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, proce...
mp3 ErlangПарсинг на
• decode(<<2#11111111111:11, VsnBits:2, LayerBits:2, _:1, BitRate:4, _/binary>> = Packet) ->
• Layer ...
,Меньше кода
меньше места ошибкам
— Тысячи клиентов новые
проблемы
Проблемы классических
решений при тысячах
клиентов
• : ,Управление памятью утекание либо преждевременное
высвобождение
• К...
Red5 100валится под
пользователями
Wowza распухает при сложной
-бизнес логике
epoll/kqueue сложны для
-долгих соединений из за
управления памятью
rtmpd core dumpсваливается в
-ежедневно из за мелких сбоев
Корни проблем
• Общая память
Корни проблем
• Общая память
• Передача данных по ссылкам
Web- :подход
,пускай течет скоро прибьем
не работает
Erlang решает эти проблемы
радикально
Процессы
• Параллельные потоки выполнения
• Изолированная область памяти
• Обмен через посылку сообщений
• Переменные неиз...
Все данные хранятся внутри
перечислимых объектов
Обработка ошибок
• Их можно ловить
• ,Если не ловить то завершается процесс
• Соседи об этом узнают через сообщения
• Гара...
Слежение за процессами
• Связи
• Супервизоры
• appmon
ErlangВ настоящее горячее
обновление кода
!Без отключения клиентов
Какие результаты
Erlang?использования
Erlyvideo
• Мультипротокольный сервер
• Держит тысячи клиентов на одном сервере
• Существующая инфраструктура для плагинов
Решает озвученную задачу
Выводы
• ,Задачи потокового видео имеют специфику отличающую их
от веба
• Необходимы инструменты эффективные и
высокоуровн...
?Где ещё использовать
erlangПрименимость
• (erlyvideo)Видеостриминг
erlangПрименимость
• (erlyvideo)Видеостриминг
• Jabber- (ejabberd)сервер
erlangПрименимость
• (erlyvideo)Видеостриминг
• Jabber- (ejabberd)сервер
• ( )Банковский процессинг Приват Банк
erlangПрименимость
• (erlyvideo)Видеостриминг
• Jabber- (ejabberd)сервер
• ( )Банковский процессинг Приват Банк
• (Online ...
?Вопросы
•Макс Лапшин
•max@maxidoors.ru
•http://erlyvideo.org/
Upcoming SlideShare
Loading in …5
×

Макс Лапшин Erlyvideo

3,001 views

Published on

Published in: Technology, News & Politics
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,001
On SlideShare
0
From Embeds
0
Number of Embeds
602
Actions
Shares
0
Downloads
25
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Макс Лапшин Erlyvideo

  1. 1. Макс Лапшин max@maxidoors.ru http://erlyvideo.org/ Erlyvideo Erlangпотоковое видео на
  2. 2. ?Что такое стриминг
  3. 3. — .Ютуб это не стриминг
  4. 4. 10 минут видео раздаются nginx
  5. 5. “ ”?Что же такое стриминг
  6. 6. Пользовательское ТВ
  7. 7. Пользовательское ТВ • Пользователь загружает видеофайлы
  8. 8. Пользовательское ТВ • Пользователь загружает видеофайлы • Составляет плейлист
  9. 9. Пользовательское ТВ • Пользователь загружает видеофайлы • Составляет плейлист • По запросу других плейлист начинает проигрываться
  10. 10. Пользовательское ТВ • Пользователь загружает видеофайлы • Составляет плейлист • По запросу других плейлист начинает проигрываться • ,Если никому не нужно то видео не играется
  11. 11. nginx?Может всё таки
  12. 12. nginx не справится с организацией видеопотока
  13. 13. Для этой задачи нужен стример
  14. 14. ?Что делает стример • Распаковывает видео и аудио из файловых контейнеров
  15. 15. ?Что делает стример • Распаковывает видео и аудио из файловых контейнеров • Упаковывает в транспортный контейнер
  16. 16. ?Что делает стример • Распаковывает видео и аудио из файловых контейнеров • Упаковывает в транспортный контейнер • Посылает кадры синхронно с реальным временем
  17. 17. Отступление про кодеки • —Кодек формат представления сжатых аудио и видео данных • — Контейнер формат упаковки одного и более потоков аудио и видео в файле или в потоке • H.264/AAC — лучшие кодеки • MP4 — самый компактный файловый контейнер
  18. 18. User TVЭтапы • Скачать плейлист • Распаковать файл • (RTMP, MPEG-TS,Упаковать кадры в транспортный контейнер …) • ,Зачистить всё когда уйдут клиенты • ,Позволить обновить код не отключая клиентов
  19. 19. Традиционные способы решения • Red5,Wowza — Java • rtmpd — C++
  20. 20. 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); • } • }
  21. 21. 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}.
  22. 22. ,Меньше кода меньше места ошибкам
  23. 23. — Тысячи клиентов новые проблемы
  24. 24. Проблемы классических решений при тысячах клиентов • : ,Управление памятью утекание либо преждевременное высвобождение • Контроль за ресурсами клиентов • Хаотическое разрушение системы при сбое в одном месте • /Ввод вывод при обслуживании тысяч клиентов
  25. 25. Red5 100валится под пользователями
  26. 26. Wowza распухает при сложной -бизнес логике
  27. 27. epoll/kqueue сложны для -долгих соединений из за управления памятью
  28. 28. rtmpd core dumpсваливается в -ежедневно из за мелких сбоев
  29. 29. Корни проблем • Общая память
  30. 30. Корни проблем • Общая память • Передача данных по ссылкам
  31. 31. Web- :подход ,пускай течет скоро прибьем не работает
  32. 32. Erlang решает эти проблемы радикально
  33. 33. Процессы • Параллельные потоки выполнения • Изолированная область памяти • Обмен через посылку сообщений • Переменные неизменяемые • Нет данных вне процессов
  34. 34. Все данные хранятся внутри перечислимых объектов
  35. 35. Обработка ошибок • Их можно ловить • ,Если не ловить то завершается процесс • Соседи об этом узнают через сообщения • Гарантированная зачистка ресурсов
  36. 36. Слежение за процессами • Связи • Супервизоры • appmon
  37. 37. ErlangВ настоящее горячее обновление кода
  38. 38. !Без отключения клиентов
  39. 39. Какие результаты Erlang?использования
  40. 40. Erlyvideo • Мультипротокольный сервер • Держит тысячи клиентов на одном сервере • Существующая инфраструктура для плагинов
  41. 41. Решает озвученную задачу
  42. 42. Выводы • ,Задачи потокового видео имеют специфику отличающую их от веба • Необходимы инструменты эффективные и высокоуровневые одновременно • Erlang прекрасно вписывается в эту нишу • Практическое использование показало эффективность выбора
  43. 43. ?Где ещё использовать
  44. 44. erlangПрименимость • (erlyvideo)Видеостриминг
  45. 45. erlangПрименимость • (erlyvideo)Видеостриминг • Jabber- (ejabberd)сервер
  46. 46. erlangПрименимость • (erlyvideo)Видеостриминг • Jabber- (ejabberd)сервер • ( )Банковский процессинг Приват Банк
  47. 47. erlangПрименимость • (erlyvideo)Видеостриминг • Jabber- (ejabberd)сервер • ( )Банковский процессинг Приват Банк • (Online Poker)Онлайн игры
  48. 48. ?Вопросы •Макс Лапшин •max@maxidoors.ru •http://erlyvideo.org/

×