2016-03-24 2 views
0

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

Я пробовал статью 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> 

ответ

0

Я протестировал этот модуль на 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 вы также можете добавить свойство Boolean 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. Connect playlists.smil вашему живого приложения через поток диспетчера (http://wowzaIP:8086/streammanager). Ваше имя потока воспроизведения, если вы используете приведенный выше пример в приложении «live», будет 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()); 
     } 
    } 
} 
Смежные вопросы