首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wowza代码转换程序附加抛出ArrayIndexOutOfBoundsException

Wowza代码转换程序附加抛出ArrayIndexOutOfBoundsException
EN

Stack Overflow用户
提问于 2013-12-13 15:44:04
回答 2查看 1.1K关注 0票数 1

我在Windows8.1 (64位)上运行Wowza 3.6.2,并启用了代码转换插件。我正在使用转换程序从实时流中获取JPEG-快照。我构建了一个自定义HTTPProvider,类似于描述的这里。这很好,我可以通过我的HTTPProvider从流中获取JPG快照。

问题是,由于我启用了转码器,所以在服务器登录到任何流的onPublishonUnPublish上都会收到令人讨厌的错误消息。

作为代码转换模板,我使用了Wowza安装附带的默认transrate.xml,没有对其进行任何修改。

当我发布到流asdf时,会得到类似于以下内容的错误:

代码语言:javascript
复制
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)

当我取消发布这条溪流时,我得到了这样的信息:

代码语言:javascript
复制
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文件中启用的每个编码块都有一个)。

有人知道是什么导致了这一切吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-13 16:12:13

在发完我的问题后,我又看了一眼堆叠痕迹,并意识到问题出在哪里--我一直在看错误的方向。由于问题出现时,我启用了转码器,我得出结论,这是问题所在。我没有意识到的是,当您使用转码器时,onPublishonUnPublish会多次触发--一次用于传入流,一次用于每个代码转换流。

在我的模块的onPublishonUnPublish方法中,我做一些事情,比如read参数,它们不存在于代码转换流中。这就是为什么调用转换流的onPublishonUnPublish方法时抛出异常的原因。

为了弥补这一点,我在onPublishonUnPublish方法的开头添加了两行代码。

代码语言:javascript
复制
if (streamName.contains("_"))
    return;

这是一个有点难看的解决方案,但我控制了所有流名称,而且无论如何都不允许下划线,所以在我的例子中,这个方法工作得很好。

更新:

@通量为如何检查流是否是转码操作的结果提供了一个更好的解决方案。有关更多信息,请参见https://stackoverflow.com/a/21099606/678801

票数 0
EN

Stack Overflow用户

发布于 2014-01-13 19:23:05

这里有一种更好的方法来确定流是否是转换的流,而不是源流。

代码语言:javascript
复制
if(stream.isTranscodeResult()) return;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20570407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档