私は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ファイルを接続する必要があるだろうが、どこのサーバー・レベルで実装するには、自動的に、スケジュールされたプレイリストを接続しています。アプリケーションレベルで接続するには
:
- は、あなたがあなたの Wowzaのインストール中に、あなたの/ libフォルダにモジュール(jarファイル)をコピーしていることを確認します。
- (すでに追加したように見えます)ライブアプリケーション構成ファイルのモジュールリストに完全修飾クラス名を追加します。
- streamPublisherSmilFileプロパティに加えて、追加のデバッグログを表示できるようにブール値のstreamPublisherSwitchLogプロパティ(trueに設定)を追加することもできます。
はplaylists.smilがあなたのコンテンツ/ディレクトリに存在し、適切なアクセス権を持っていることを確認します。例えば、SMILファイル:ストリームマネージャ(http://wowzaIP:8086/streammanager)を通して、あなたのライブのアプリケーションに
<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>
接続playlists.smil。上記の例のアプリケーション '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());
}
}
}