Расписание Wowza Media Server 2.2.3

Можно ли планировать плейлисты с этой версией Wowza?

Я попробовал статью https://www.wowza.com/forums/content.php?145-How-to-schedule-streaming-with-Wowza-Streaming-Engine-(ServerListenerStreamPublisher) загрузить коллекцию модулей, но безуспешно, в логи не записываются никакие данные о плейлисте.

/conf/live/Application.xml
<Module>
<Name>streamPublisher</Name>
<Description>Playlists</Description>
<Class>com.wowza.wms.plugin.collection.module.ModuleStreamPublisher</Class>
</Module>

<Property>
<Name>streamPublisherSmilFile</Name>
<Value>playlists.smil</Value>
<Type>String</Type>
</Property>

person user1505698    schedule 24.03.2016    source источник


Ответы (1)


Я протестировал этот модуль на экземпляре Wowza версии 2.2.3, и у меня он работал нормально, а журналы доступа показывали следующее:

ServerListenerStreamPublisher Scheduled: Stream1 for: 2015-04-07
ServerListenerStreamPublisher stream is **NOT** set to not repeat, setUnpublishOnEnd: true Stream1
ServerListenerStreamPublisher scheduled playlist: Stream1 on stream: Stream1 for:Tue Apr 07
ServerListenerStreamPublisher Scheduled stream is now live: Stream1
ModuleStreamPublisher.onAppStart: [live/_definst_]: DONE!
Stream.switch[live/_definst_/Stream1]: index: 0 name:mp4:sample.mp4 start:5 length:5

Этот модуль может быть выполнен на уровне сервера или на уровне приложения. Разница заключается в запуске выходного потока, где реализация на уровне сервера автоматически подключает запланированный список воспроизведения, а на уровне приложения вам нужно будет вручную подключить файл SMIL, содержащий расписание.

Для подключения на уровне приложения:

  1. Убедитесь, что вы скопировали модуль (файл jar) в папку /lib вашей установки Wowza.
  2. Добавьте полное имя класса в список модулей вашего файла конфигурации живого приложения (который выглядит так, как будто вы уже добавили его).
  3. В дополнение к свойству streamPublisherSmilFile вы также можете добавить логическое свойство streamPublisherSwitchLog (со значением true), чтобы можно было просматривать дополнительные журналы отладки.
  4. Убедитесь, что playlists.smil существует в вашем каталоге content/ и имеет правильные разрешения. Пример файла SMIL:

    <smil>
        <head></head>
        <body>
            <stream name="Stream1"></stream>
            <playlist name="pl1" playOnStream="Stream1" repeat="true" scheduled="2015-04-07 16:00:00">
               <video src="mp4:sample.mp4" start="5" length="5"/>
               <video src="mp4:elephantsdream_750.mp4" start="50" length="25"/>
               <video src="mp4:sample.mp4" start="0" length="150"/>
            </playlist>
         </body>
    </smil>
    
  5. Подключите playlists.smil к вашему живому приложению через Stream Manager (http://wowzaIP:8086/streammanager). Имя вашего потока воспроизведения, если вы используете приведенный выше пример в «живом» приложении, будет rtmp://wowzaIP:1935/live/Stream1.

Основой этого модуля является класс Stream, поэтому вы также можете создать свой собственный модуль. Вот простой, который очень похож на предыдущий (за исключением того, что он запускается автоматически при перезапуске сервера, так как он добавляется в качестве прослушивателя сервера). После сборки модуля добавьте его в conf/Server.xml контейнера ServerListeners. Я также тестировал этот модуль на версии 2.2.3, и он у меня работал.

package com.wowza.wms.example.serverlistener;

import com.wowza.wms.logging.WMSLoggerFactory;
import com.wowza.wms.server.*;
import com.wowza.wms.vhost.*;
import com.wowza.wms.stream.publish.*;
import com.wowza.wms.application.*;

public class StreamPublisherDemo implements IServerNotify2 {

    public void onServerConfigLoaded(IServer server)
    {
    }

    public void onServerCreate(IServer server)
    {
    }

    public void onServerInit(IServer server)
    {
        IVHost vhost = VHostSingleton.getInstance(VHost.VHOST_DEFAULT);
        IApplication app = vhost.getApplication("live");
        IApplicationInstance appInstance = app.getAppInstance("_definst_");

        Stream stream1 = Stream.createInstance(vhost, "live", "Stream1");

        stream1.play("mp4:sample.mp4", 5, 5, true);
        stream1.play("mp4:sample.mp4", 50, 5, false);
        stream1.play("mp4:sample.mp4", 150, 5, false);
        stream1.addListener(new StreamListener(appInstance));

        Stream stream2 = Stream.createInstance(vhost, "live", "Stream2");

        stream2.play("mp4:sample.mp4", 0, -1, true);
        stream2.addListener(new StreamListener(appInstance));

    }

    public void onServerShutdownStart(IServer server)
    {
    }

    public void onServerShutdownComplete(IServer server)
    {
    }

    class StreamListener implements IStreamActionNotify
    {
        StreamListener(IApplicationInstance appInstance)
        {
        }
        public void onPlaylistItemStop(Stream stream, PlaylistItem item)
        {
            WMSLoggerFactory.getLogger(null).info("Item Stopped: " + item.getName() + "on Stream: " + stream.getName());            
        }
        public void onPlaylistItemStart(Stream stream, PlaylistItem item) 
        {
            WMSLoggerFactory.getLogger(null).info("Item Started: " + item.getName() + "on Stream: " + stream.getName());
        }
    }   
}
person Michelle-B    schedule 05.04.2016