Bir Wowza sürüm 2.2.3 örneğinde bu modülü test ve erişim günlükleri gösteren, benim için iyi çalıştı aşağıdaki:
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
Bu modül bir sunucu üzerinde yapılabilir - seviye veya uygulama seviyesi. Aradaki fark, bir sunucu seviyesinde uygulanmanın planlanan oynatma listesini otomatik olarak bağladığı, bir uygulama düzeyinde ise zamanlamayı içeren SMIL dosyasını manuel olarak bağlamanız gereken çıktı akışının başlatılmasıdır.
uygulamaya düzeyde bağlamak için:
- sizin Wowza kurulumda/lib klasörüne modül (kavanoz dosyası) kopyalanan emin olun.
- Canlı uygulama yapılandırma dosyanızın Modüller listesinde (zaten eklediğinize benzeyen) tam nitelikli sınıf adını ekleyin.
- streamPublisherSmilFile özelliğine ek olarak, ek hata ayıklama günlüklerini görüntüleyebilmeniz için Boolean streamPublisherSwitchLog özelliğini de (true olarak ayarlanmış) eklemek isteyebilirsiniz.
İçeriğin/dizininizde playlists.smil öğesinin bulunduğundan ve doğru izinlere sahip olduğundan emin olun. Akış Yöneticisi aracılığıyla canlı uygulamaya
<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>
Bağlan playlists.smil (http://wowzaIP:8086/streammanager): Bir örnek SMIL dosyası. Yukarıdaki örneği 'canlı' uygulamasında kullanıyorsanız, oynatma akışı adınız rtmp: // wowzaIP: 1935/live/Stream1 olacaktır.
Bu modülün temeli Stream sınıfıdır, bu nedenle kendi modülünüzü oluşturmayı da tercih edebilirsiniz. Burada, yukarıdakilere çok benzer olan basit bir tane (Sunucu Dinleyicisi olarak eklendiğinden beri sunucu yeniden başlatıldığında otomatik olarak başlatılmaz). Modülü oluşturduktan sonra, ServerListeners kapsayıcısına conf/Server.xml dosyasına ekleyin. Ayrıca bu modülü 2.2.3 sürümünde test ettim ve benim için çalışıyordu.
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());
}
}
}