我在Windows8.1 (64位)上运行Wowza 3.6.2,并启用了代码转换插件。我正在使用转换程序从实时流中获取JPEG-快照。我构建了一个自定义HTTPProvider,类似于描述的这里。这很好,我可以通过我的HTTPProvider从流中获取JPG快照。
问题是,由于我启用了转码器,所以在服务器登录到任何流的onPublish和onUnPublish上都会收到令人讨厌的错误消息。
作为代码转换模板,我使用了Wowza安装附带的默认transrate.xml,没有对其进行任何修改。
当我发布到流asdf时,会得到类似于以下内容的错误:
ERROR server comment - TranscoderSessionDestination.init[livereceiver/_definst_/asdf]: [asdf_160p]:java.lang.ArrayIndexOutOfBoundsException: 1
java.lang.ArrayIndexOutOfBoundsException: 1
at com.foo.wms.module.IncomingStreamEventHandler.getQueryStringMap(IncomingStreamEventHandler.java:191)
at com.foo.wms.module.IncomingStreamEventHandler.onPublish(IncomingStreamEventHandler.java:83)
at com.wowza.wms.stream.MediaStream.notifyActionPublish(Unknown Source)
at com.wowza.wms.stream.publish.Publisher.publish(Unknown Source)
at com.wowza.wms.stream.publish.Publisher.publish(Unknown Source)
at com.wowza.wms.transcoder.model.TranscoderSessionDestination.init(Unknown Source)
at com.wowza.wms.transcoder.model.TranscoderSession.a(Unknown Source)
at com.wowza.wms.transcoder.model.TranscoderSession.handleOnMetadata(Unknown Source)
at com.wowza.wms.transcoder.model.LiveStreamTranscoder.handleOnMetadata(Unknown Source)
at com.wowza.wms.stream.live.LiveStreamTranscoderRunner.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)当我取消发布这条溪流时,我得到了这样的信息:
ERROR server comment - TranscoderSessionDestination.shutdown: [asdf_160p]:java.lang.NullPointerException
java.lang.NullPointerException
at com.foo.wms.module.IncomingStreamEventHandler.onUnPublish(IncomingStreamEventHandler.java:166)
at com.wowza.wms.stream.MediaStream.notifyActionUnPublish(Unknown Source)
at com.wowza.wms.stream.publish.Publisher.publish(Unknown Source)
at com.wowza.wms.stream.publish.Publisher.unpublish(Unknown Source)
at com.wowza.wms.transcoder.model.TranscoderSessionDestination.shutdown(Unknown Source)
at com.wowza.wms.transcoder.model.TranscoderSession.c(Unknown Source)
at com.wowza.wms.transcoder.model.TranscoderSession.shutdown(Unknown Source)
at com.wowza.wms.transcoder.model.LiveStreamTranscoder.shutdown(Unknown Source)
at com.wowza.wms.stream.live.LiveStreamTranscoderRunner.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)当我发布/取消发布时,我会得到每个异常中的三个(在transrate.xml文件中启用的每个编码块都有一个)。
有人知道是什么导致了这一切吗?
发布于 2013-12-13 16:12:13
在发完我的问题后,我又看了一眼堆叠痕迹,并意识到问题出在哪里--我一直在看错误的方向。由于问题出现时,我启用了转码器,我得出结论,这是问题所在。我没有意识到的是,当您使用转码器时,onPublish和onUnPublish会多次触发--一次用于传入流,一次用于每个代码转换流。
在我的模块的onPublish和onUnPublish方法中,我做一些事情,比如read参数,它们不存在于代码转换流中。这就是为什么调用转换流的onPublish和onUnPublish方法时抛出异常的原因。
为了弥补这一点,我在onPublish和onUnPublish方法的开头添加了两行代码。
if (streamName.contains("_"))
return;这是一个有点难看的解决方案,但我控制了所有流名称,而且无论如何都不允许下划线,所以在我的例子中,这个方法工作得很好。
更新:
@通量为如何检查流是否是转码操作的结果提供了一个更好的解决方案。有关更多信息,请参见https://stackoverflow.com/a/21099606/678801。
发布于 2014-01-13 19:23:05
这里有一种更好的方法来确定流是否是转换的流,而不是源流。
if(stream.isTranscodeResult()) return;https://stackoverflow.com/questions/20570407
复制相似问题