В данной заметки будет идти речь о установке и настройка Media Cache плагина для сервера видеостриминга wowaz 3. Данный плагин полезен для масштабирования видеостримов ( а именно vod-ов). Плагин кэширует видео, которое просматривает клиент, и тем самые снижает нагрузку на сервер. Кэш можно хранить как в файловой системе(на жестком диске) так и в оперативной памяти.
Где взять плагин?
Нужно зайти на официальный сайт и заполнить соответствующею форму. Здесь все написано. Через несколько дней, вам придет на почту ссылка, по которой можно скачать плагин. Если ссылка не пришла, я прикрепляю архив к этой заметки — можете воспользоваться им.
Теперь начнем установку.
Подключаемся к уже настроенному серверу wowza и устанавливаем плагин.
unzip MediaCache_2.0.zip cd MediaCache sudo cp lib/wms-plugin-mediacache.jar /usr/local/WowzaMediaServer/lib/ sudo cp conf/MediaCache.xml /usr/local/WowzaMediaServer/conf/ sudo mkdir /usr/local/WowzaMediaServer/applications/mediacache sudo mkdir /usr/local/WowzaMediaServer/conf/mediacache sudo cp /usr/local/WowzaMediaServer/conf/Application.xml /usr/local/WowzaMediaServer/conf/mediacache/ sudo vim /usr/local/WowzaMediaServer/conf/mediacache/Application.xml
Инструкция по установке и настройки MediaCache идет вместе с архивом в pdf файлике. Все что нужно сделать на серверной стороне — это скопировать jar-ник для плагина в либы видеосервера, добавить конфигурационный файл. Плагин нужно включать для каждого Application. В данном случаи я создал (по инструкции) отдельный тестовый Application с названием mediacache и добавил к нему отдельный файл конфигураций (по умолчанию настроен один файл конфигураций для всех стримов).
Теперь редактируем конфигурацию Application.
sudo vim /usr/local/WowzaMediaServer/conf/mediacache/Application.xml
Ставим RTP/Authentication/PlayMethod: none
Добавляем свойство MediaReader/Properties: <MediaReader> <Properties> <Property> <Name>randomAccessReaderClass</Name> <Value>com.wowza.wms.plugin.mediacache.impl.MediaCacheRandomAccessReader</Value> </Property> <Property> <Name>bufferSeekIO</Name> <Value>true</Value> <Type>Boolean</Type> </Property> </Properties> </MediaReader>
Теперь настраеваем конфиг для медисервера, чтобы он поключила наш плагин.
sudo vim /usr/local/WowzaMediaServer/conf/Server.xml Добавляем в класс MediaCacheServerListener в секцию <ServerListeners>: <ServerListener> <BaseClass>com.wowza.wms.plugin.mediacache.impl.MediaCacheServerListener</BaseClass> </ServerListener>
Те же действия нужно сделать на клиенте (втором сервере с wowza, с которого будем тестировать IP=192.168.2.233).
Теперь настроим на главном серваке (192.168.2.250) стрим с кэшированием.
vim conf/MediaCache.xml ... <Path>${com.wowza.wms.context.ServerConfigHome}/mediacache</Path> - папка, в которой будел храниться кэш <MaxSize>50G</MaxSize> - макс. размер кэша ... ... <Name>content1</Name> - лейбл для стрима <BasePath>/usr/local/WowzaMediaServer/content/</BasePath> - путь к медиафайлам <Prefix>path1/</Prefix> - префикс для смены BasePath (алиас) <!-- <BaseClass>com.wowza.wms.plugin.mediacache.impl.MediaCacheItemHTTPImpl</BaseClass> --> <BaseClass>com.wowza.wms.plugin.mediacache.impl.MediaCacheItemFileImpl</BaseClass> ...
Теперь можно перезагрузить медиасервер и в логах посмотреть подхватился ли плагин.
root@ubuntu:~# tail -7 /usr/local/WowzaMediaServer/logs/wowzamediaserver_access.log 2013-04-12 03:27:41 PDT comment server INFO 200 - MediaCacheImpl.start[MediaCache] Wowza MediaCache AddOn 2.0.0 build1789 - - - 6.955 - - - - - - - - - - - - - - - - - - - - - - - - - 2013-04-12 03:27:41 PDT comment server INFO 200 - MediaCacheImpl.start[MediaCache]: Add store: path:/usr/local/WowzaMediaServer/mediacache maxSize:53687091200 - - - 7.093 - - - - - - - - - - - - - - - - - - - - - - - - - 2013-04-12 03:27:41 PDT comment server INFO 200 - MediaCacheImpl.start[MediaCache]: Add source[content1]: prefix:path1/ basePath:/mnt/hdd/ - - - 7.177 - - - - - - - - - - - - - - - - - - - - - - - - - 2013-04-12 03:27:41 PDT comment server INFO 200 - MediaCacheImpl.start[MediaCache]: Flushing cache: start - - - 7.185 - - - - - - - - - - - - - - - - - - - - - - - - - 2013-04-12 03:27:42 PDT comment server INFO 200 - MediaCacheImpl.start[MediaCache]: Flushing cache: done - - - 7.377 - - - - - - - - - - - - - - - - - - - - - - - - - 2013-04-12 03:27:42 PDT comment server INFO 200 - MediaCacheImpl.start[MediaCache]: Start MediaCache GC - - - 7.377 - - - - - - - - - - - - - - - - - - - - - - - - - 2013-04-12 03:27:42 PDT comment server INFO 200 - Wowza Media Server is started! - - - 7.38 - - - - - - - - - - - - - - - - - - - - - - - - -
Теперь нужно настроить клиент (192.168.2.233), с которого будем проводить тестирование vod-ов.
vim conf/Tests.xml <Property> <Name>workerCount</Name> <Value>3</Value> - количество рабочих подключений <Type>Integer</Type> </Property> <Property> <Name>fileCount</Name> <Value>3</Value> - индексы для медиафейлов (simple1.mp4,simple2.mp4,...) <Type>Integer</Type> </Property> <Property> <Name>streamName</Name> <Value>mp4:path1/sample</Value> - НАЗВАНИЕ СТРИМА (path1 - из MediaCache.xml на серваке) </Property> <Property> <Name>streamExt</Name> <Value>.mp4</Value> - расширение медиафайлов. </Property> <Property> <Name>vhostName</Name> <Value>_defaultVHost_</Value> </Property> <Property> <Name>connectionString</Name> <!-- <Value>vod/_definst_</Value> --> <Value>mediacache</Value> - application (rtmp://192.168.2.250:1935/mediacache) </Property>
Теперь, чтобы протестировать поток:
cd /usr/local/WowzaMediaServer/bin root@ubuntu:/usr/local/WowzaMediaServer/bin# ./performance.sh vod Configure logging: file:///usr/local/WowzaMediaServer/conf/log4j.properties INFO server comment - test: **** PerformanceRemoteClientTest ***** INFO server comment - workerCount: 3 INFO server comment - fileCount: 0 INFO server comment - streamName: mp4:path1/sample INFO server comment - streamExt: .mp4 INFO server comment - vhostName: _defaultVHost_ INFO server comment - connectionStr: mediacache INFO server comment - doRandom: true INFO server comment - doRepeat: true INFO server comment - ipAddress: 192.168.2.250 INFO server comment - ports: 1935 INFO server comment - bufferTime: 3000 INFO application app-start _definst_ mediacache/_definst_ INFO server comment - start [0]: 0 INFO server comment - callConnect [0]: mediacache INFO server comment - connected [0]: 1043095830 INFO server comment - call play(first) [0]: mp4:path1/sample.mp4 INFO server comment - start [1]: 2 INFO server comment - callConnect [1]: mediacache INFO server comment - connected [1]: 1808223782 INFO server comment - call play(first) [1]: mp4:path1/sample.mp4 INFO server comment - StreamOnStatus [1]: NetStream.Play.Reset INFO server comment - StreamOnStatus [1]: NetStream.Play.Start INFO server comment - StreamOnStatus [0]: NetStream.Play.Reset INFO server comment - StreamOnStatus [0]: NetStream.Play.Start INFO server comment - start [2]: 3 INFO server comment - callConnect [2]: mediacache INFO server comment - connected [2]: 1022842220 INFO server comment - call play(first) [2]: mp4:path1/sample.mp4 INFO server comment - StreamOnStatus [2]: NetStream.Play.Reset INFO server comment - StreamOnStatus [2]: NetStream.Play.Start INFO server comment - totalBytes: 0 INFO server comment - Status running:3 currBehind:0 INFO server comment - Status running:3 currBehind:0
На сервере можно проверить размер кэша. Если все работает как нужно, размер папки будет расти.
root@ubuntu:/usr/local/WowzaMediaServer# du -sh mediacache/ 3.2M mediacache/
Можно также тестировать через Adobe Flash player (RTMP):
Server: rtmp://[wowza-address]/mediacache - rtmp://192.168.2.250:1935/mediacache Stream: mp4:path1/media/sample.mp4 - rtmp://192.168.2.250:1935/mediacache/path1/sample3.mp4
Здесь:
192.168.2.250 — IP главного медиасервера.
192.168.2.233 — IP сервера из которого тестируем.
Архив с плагином:
MediaCache_2.0