Wowza Transcoder AddOn

This post is also available in: Английский

Wowza-Transcoder
В продолжение обзора возможностей медиа сервера Wowza мы рассмотрим функции транскодирования видео потоков при помощи плагина. Данная функциональность бывает полезна, когда у вас есть только один источник видео в высоком качестве, а доставлять видео желательно пользователям с различными устройствами. Еще один пример — это доставка Audio only видео потока в iOS приложение (требование AppStore), в этом случае нужен дополнительный поток с вырезанным видео контентом. Типовой подход к решению данной задачи — использование транскодера (audio only поток можно также получить и в новом Adobe Media Server 5.0). Как правило это отдельный сервер, оптимизированный под обработку видео. Wowza предлагает альтернативный подход — транскодирование на медиа сервере. Посмотрим подробнее, как это работает.

Wowza Transcoder – это платное дополнение к Wowza Media Server. Предоставляет возможность перекодирования входящего видео потока, в формат H.264 (MPEG-4) для разных устройств отображения. Для работы транскодера необходима установка 64-битной версии java. Wowza Media Server поддерживает технологии аппаратного транскодера: Intel Quick Sync hardware acceleration и Nvidia CUDA hardware acceleration.

Если транскодер настроен корректно, в процессе запуска сервера Wowza, при проверке аппаратного транскодера будет выведено сообщение, например:

1
2
3
4
INFO server comment - JNI:TranscoderSession.isCUDAAvailable[_defaultVHost_:
transcoder/_definst_/live1]: NVidia CUDA hardware acceleration is NOT available
INFO server comment - JNI:TranscoderSession.isQuickSyncAvailable[_defaultVHost_:
transcoder/_definst_/live1]: Intel Quick Sync hardware acceleration is available, version:1.1

В данном примере Wowza Media Server обнаружил аппаратную поддержку технологии Intel Quick Sync.

Конфигурирование приложения «transcoder»
1. Создать директорию «[install-dir]\conf\transcoder»
2. Скопировать базовый конфигурационный файл «Application.xml» из «[install-dir]\conf» в директорию «[install-dir]\conf\transcoder»
3. Создать директорию «transcoder» в директории «[install-dir]\applications»
4. Внести следующие изменения в конфигурационный файл «[install-dir]\conf\transcoder\Application.xml», указав следующие параметры:

1
2
3
4
5
live-lowlatency
sanjosestreamingpacketizer
transcoder
${SourceStreamName}.xml,transrate.xml
${com.wowza.wms.context.VHostConfigHome}/transcoder/profiles

5. Скопировать базовый конфигурационный файл транскодера «[install-dir]\transcoder\templates\transrate.xml» в ту же директорию, указав новое имя «live1.xml»
6. Внести следующие изменения в конфигурационный файл «[install-dir]\transcoder\templates\live1.xml», указав параметры создаваемых потоков.
В данном примере создаются 3 потока:

  • видео исходный битрейт (1000) + аудио исходный битрейт 48. Поток не транскодируется.
  • видео битрейт 750 + аудио исходный битрейт 48
  • видео битрейт 300 + аудио исходный битрейт 48

После этого в параметрах Flash Media Live Encoder (FMLE) необходимо указать битрейт потока передаваемого на медиа-сервер Wowza. В нашем примере на сервер будут передаваться поток с битрейтом 1000. Вещание нужно настроить на приложение transcoder.

Для просмотра вещаемого потока будем использовать OSMF Media Player. Данный плеер является примером использования открытого фрейморка OSMF. Указываем адрес манифеста для группы live1_all (имя группы указано в конфигурационном файле транскодера «[install-dir]\transcoder\templates\live1.xml») : «http://127.0.0.1:1935/transcoder/ngrp:live1_all/manifest.f4m»
После получения с FMLE потока, серверу Wowza требуется некоторое время на подготовку манифеста. После создания манифеста его можно посмотреть, указав в браузере URL: «http://127.0.0.1:1935/transcoder/ngrp:live1_all/manifest.f4m»

Нагрузочные характеристики

Сравнительный тест производительности при использовании Wowza Transcoder AddOn. Тест проводится для сравнения производительности двух систем, с поддержкой аппаратного транскодера и без него.

В тесте принимают участие 2 системы:
1. Система на базе бюджетного процессора Intel Core i3-2120 Sandy Bridge (CPU 3.30GHz, ОЗУ 4 Гб, Windows 7 Home x64, GPU Intel HD Graphics 200). Данная система поддерживает «Intel Quick Sync hardware acceleration».
2. Система на базе 2х серверных процессоров Intel Xeon E5620 Westmere (CPU 2.40 GHz, ОЗУ 8 Гб, Ubuntu 10.04.4 LTS). Данная система не имеет поддержки аппаратного транскодера.

Тест будет проводится с использованием траскодера, предварительно настроенного в ранее.
В результате работы транскодера создаются 3 потока:

  • видео исходный битрейт (1000) + аудио исходный битрейт (48). Поток не транскодируется;
  • видео битрейт 750 + аудио исходный битрейт 48;
  • видео битрейт 300 + аудио исходный битрейт 48;

В дополнение, транскодер накладывает в углу видео картинки логотип «Wowza» (логотип «Wowza» расположен в директории «[install-dir]\content»). Для определения загрузки процессора будем использовать приложение JConsole. Данное приложение было описано в предыдущей статье про Wowza нашего блога.

Результаты теста

Бюджетный процессор и аппаратное ускорение Intel Quick Sync:
wowza-transcoding-a
На графиках показано использование ресурсов в системе с процессором Intel Core i3-2120 во время работы транскодера. Нагрузка немного подрастала в моменты сбора мусора в JVM (Garbage Collector) до 12%. Но в среднем загрузка процессора составляла 9%.

Двухпроцессорный сервер:
Wowza-transcoding
На графиках показано использование ресурсов в системе с процессорами Intel Xeon E5620 во время работы транскодера. Нагрузка немного подрастала в моменты сбора мусора в JVM (Garbage Collector) до 8%. Но в среднем загрузка процессора составляла 7%.

В результате теста можно сделать промежуточные выводы:

  • использование памяти на двух системах несколько отличалось и на системе с ОС Linux сбор мусора в JVM (Garbage Collector) проводился чаще. Пиковое значение использования оперативной памяти не отличалось и составляло примерно 170Мб;
  • система с бюджетным процессором Intel Core i3-2120 благодаря использованию встроенного графического ядра, хорошо справилась с задачей транскодирования и незначительно уступила в производительности (на 2%) системе с более мощными серверными процессорами Intel Xeon E5620, не имеющими графического ядра;

Для увеличения нагрузки мы попробовали нагрузить Wowza одновременно двумя потоками с такими же настройками транскодирования и получили следующие результаты.

Бюджетный процессор и аппаратное ускорение Intel Quick Sync:
Wowza-transcoding-под-нагрузкой
На графиках показано использование ресурсов в системе с процессором Intel Core i3-2120 во время работы транскодера c одним и двумя входящими видео потоками. Нагрузка на процессор при транскодировании 2х потоков нелинейно возросла и составила в среднем 36%.

Двухпроцессорный сервер:
Wowza-transcoding-1-2-b
На графиках показано использование ресурсов в системе с процессорами Intel Xeon E5620 во время работы транскодера c одним и двумя входящими видео потоками. Нагрузка на процессор при транскодировании 2х потоков нелинейно возросла и составила в среднем 30%.

В результате теста можно сделать промежуточные выводы:

  • динамика использования памяти на двух системах отличалась незначительно и в пике составила 250 – 300 Мб;
  • система с бюджетным процессором Intel Core i3-2120 уступила в производительности системе с серверными процессорами Intel Xeon E5620 в среднем на 6%. Возможной причиной увеличения отставания является слабое видео ядро используемое Wowza при транскодировании;
  • обе системы показали нелинейное увеличение нагрузки на процессор при транскодировании двух потоков;
  • стоит быть очень аккуратным при расчетах нагрузки в такой схеме, есть риск нестабильной работы;

В заключение хотелось бы добавить, что транскодинг на Java — это оригинально 🙂 Впрочем, как показано Выше — это работает вполне приемлемо и позволяет весьма бюджетно организовать транскодинг live потоков. В своих проектах мы используем либо промышленные транскодеры, либо open source альтернативы на выделенных серверах (ffmpeg, avconv, VLC).