1 / 48

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

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

caryn-salas
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Erlyvideoпотоковое видео на Erlang • Макс Лапшин • max@maxidoors.ru • http://erlyvideo.org/

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

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

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

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

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

  7. Пользовательское ТВ • Пользователь загружает видеофайлы

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

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

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

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

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

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

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

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

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

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

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

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

  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. Парсинг 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. Меньше кода, меньше места ошибкам

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  48. Вопросы? • Макс Лапшин • max@maxidoors.ru • http://erlyvideo.org/

More Related