Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在wowza流引擎中动态创建和更改流目标_Java_Api_Module_Wowza_Wowza Transcoder - Fatal编程技术网

Java 如何在wowza流引擎中动态创建和更改流目标

Java 如何在wowza流引擎中动态创建和更改流目标,java,api,module,wowza,wowza-transcoder,Java,Api,Module,Wowza,Wowza Transcoder,我正在开发一个服务器端模块,希望根据传入的流动态更改流目标。我想知道如何在wowza流媒体引擎中使用java API来实现这一点。您可以使用com.wowza.wms.pushpublish.*包(记录在wowza安装附带的serverapi和wowza站点上)来拦截发布事件并创建流目标(以前称为push publish)。下面是一个示例代码,它为同一个Wowza应用程序创建一个前缀为“push-”的RTMP流目标 package com.wowza.wms.plugin.pushpublis

我正在开发一个服务器端模块,希望根据传入的流动态更改流目标。我想知道如何在wowza流媒体引擎中使用java API来实现这一点。

您可以使用com.wowza.wms.pushpublish.*包(记录在wowza安装附带的serverapi和wowza站点上)来拦截发布事件并创建流目标(以前称为push publish)。下面是一个示例代码,它为同一个Wowza应用程序创建一个前缀为“push-”的RTMP流目标

package com.wowza.wms.plugin.pushpublish.module;
导入java.util.*;
导入com.wowza.wms.amf.AMFPacket;
导入com.wowza.wms.application.iaapplicationinstance;
导入com.wowza.wms.logging.wmslogger工厂;
导入com.wowza.wms.module.ModuleBase;
导入com.wowza.wms.pushpublish.protocol.rtmp.*;
导入com.wowza.wms.stream.*;
公共类ModulePushPublishSimpleExample扩展ModuleBase
{
映射发布者=新HashMap();
类StreamNotify实现IMediaStreamActionNotify2
{
public void onPlay(IMediaStream流、字符串streamName、双播放开始、双播放长度、int播放重置)
{
}
公共void onPause(IMediaStream流、布尔值isPause、双位置)
{
}
公共void onSeek(IMediaStream流,双位置)
{
}
顶部公共空白(IMediaStream流)
{
}
元数据上的公共无效(IMediaStream流、AMFPacket metaDataPacket)
{
}
public void onPauseRaw(IMediaStream流、布尔值isPause、双位置)
{
}
public void onPublish(IMediaStream流、字符串streamName、布尔值isRecord、布尔值isAppend)
{
if(!streamName.startsWith(“push-”)//这是为了避免循环推送
{
尝试
{
IAApplicationInstance appInstance=stream.getStreams().getAppInstance();
同步(发布者)
{
PushPublishRTMP publisher=新的PushPublishRTMP();
//源流
publisher.setAppInstance(appInstance);
publisher.setSrcStreamName(streamName);
//目的流
字符串dstHost=“localhost”;
int dstPort=1935;
字符串dstApplication=appInstance.getApplication().getName();
字符串dstStreamName=“push-”+streamName;
字符串flashVersion=PushPublishRTMP.CurrentFmLeverVersion;
//如果推送到Akamai,请取消注释并使用Akamai帐户信息更新
//字符串streamId=“32637”;
//字符串akamaiUsername=“134706”;
//字符串akamaiPassword=“wowza”;
//布尔值isPrimary=true;
//DSTOST=(isPrimary?.p):“b”)+“.ep”+streamId+”.i.akamaientrypoint.net”;
//dstApplication=“EntryPoint”;
//dstStreamName=streamName+“_1_950”+“@”+streamId;
//flashVersion=PushPublishRTMP.CURRENTFLASHVERSION;
//
//publisher.setakamausername(akamausername);
//publisher.setAkamaiPassword(akamaiPassword);
//目的流
publisher.setHost(dstHost);
publisher.setPort(dstPort);
publisher.setDstApplicationName(dstApplication);
publisher.setDStreamName(DStreamName);
publisher.setConnectionFlashVersion(flashVersion);
//如果推送到Adobe Media Server,则取消注释
//publisher.setSendOriginalTimecodes(true);
//publisher.setOriginalTimecodeThreshold(0x100000);
//SecureToken共享秘密
//publisher.setSecureTokenSharedSecret(#ed%h0#w@1");
publisher.setSendFCPublish(true);
publisher.setSendReleaseStream(true);
publisher.setSendOnMetadata(true);
publisher.setDebugLog(true);
publisher.setDebugPackets(false);
//如果目标服务器使用RTMP身份验证进行保护,则取消注释
//PushPublishRTMPauthProviderAdobertMPauthProvider=新的PushPublishRTMPAuthProviderAdobe();
//adobeRTMPAuthProvider.init(发布者);
//adobeRTMPAuthProvider.setUserName(“用户名”);
//adobeRTMPAuthProvider.setPassword(“密码”);
//publisher.setRTMPAuthProvider(adobeRTMPAuthProvider);
publisher.connect();
publisher.put(流,publisher);
}
}
捕获(例外e)
{
WMSLoggerFactory.getLogger(null).error(“ModulePushPublishSimpleExample#StreamNotify.onPublish:+e.toString());
}
}
}
public void onUnPublish(IMediaStream流、字符串streamName、布尔值isRecord、布尔值isAppend)
{
停止发布器(流);
}
}
公共无效停止发布器(IMediaStream流)
{
尝试
{
同步(发布者)
{
PushPublishRTMP publisher=publisher.remove(流);
if(publisher!=null)
publisher.disconnect();
}
}
捕获(例外e)
{
WMSLoggerFactory.getLogger(null).error(“ModulePushPublishSimpleExample#StreamNotify.onPublish:+e.toString());
}
}
public void onStreamCreate(IMediaStream流)
{
addClientListener(新的StreamNotify());
}
public void onStreamDestory(IMediaStream流)
{
停止发布器(流);
}

}
谢谢你,米歇尔。我会试试看结果。