gpt4 book ai didi

java - Xuggle 无法打开内存输入

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:29:48 25 4
gpt4 key购买 nike

我正在开发一个将 Hadoop 的 MapReduce 框架与 Xuggle 集成的程序。为此,我正在实现一个 IURLProtocolHandlerFactory 类,该类可读取和写入内存中的 Hadoop 数据对象。

你可以在这里看到相关代码: https://gist.github.com/4191668

想法是在 IURLProtocolHandlerFactory 类中为每个 BytesWritable 对象注册一个 UUID,这样当我稍后在打开文件时引用该名称时,它会返回一个 IURLProtocolHandler 实例附加到 BytesWritable 对象,我可以从内存读取和写入内存。

问题是我得到了这样的异常:

java.lang.RuntimeException: could not open: byteswritable:d68ce8fa-c56d-4ff5-bade-a4cfb3f666fe
at com.xuggle.mediatool.MediaReader.open(MediaReader.java:637)

(另请参阅已发布的链接)

调试时我看到对象在工厂中被正确找到,而且,它们甚至在协议(protocol)处理程序中被读取。如果我从输出文件中删除监听器/从输出文件中删除监听器,也会发生同样的情况,因此问题已经出在输入上。深入挖掘 Xuggle 的代码,我找到了 JNI 代码(它试图打开文件),但我无法比这更进一步。这显然会返回一个错误代码。

XugglerJNI.IContainer_open__SWIG_0

如果能提示下一步该去哪里,我应该如何继续调试,我将不胜感激。也许我的实现有缺陷,但我看不到。

最佳答案

我认为你遇到的问题是很多类型的输入/输出在 IContainer JNI 代码中被转换为本地文件描述符,但是你传递的东西不能转换。可能无法以这种方式创建您自己的 IURLProtocolHandler,因为它会在通过 XuggleIO.map() 之后再次调用 IContainer 然后进入 IContainer JNI 代码,该代码可能会尝试获取 native 文件描述符并调用 avio_open()

但是,可能有一些您可以IContainer 中打开的东西,它们不是文件/没有文件描述符,并且可以正确处理。您可以打开的东西可以在IContainer中看到代码,即 java.io.DataOutputjava.io.DataOutputStream(以及相应的输入)。我建议使您的 DataInput/DataOutput 实现环绕 BytesReadable/BytesWriteable,并在 IContainer 中打开它。

如果这不起作用,则将您的输入写入临时文件并从临时文件读取输出:)

关于java - Xuggle 无法打开内存输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13783119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com