简洁版本:
使用 Xuggler 打开/读取 mp4 文件有时无法正常工作,但会导致程序崩溃。
长版:
在我的程序中,我读取、修改和写入视频文件。它适用于我测试的大多数格式(avi、flv、mpg、mkv)。我使用的Xuggler功能主要是:
//Example 1
IContainer container = IContainer.make();
int result = container.open(filename, IContainer.Type.READ, null);
Run Code Online (Sandbox Code Playgroud)
和
//Example 2
IMediaReader filmReader = ToolFactory.makeReader(filename);
filmReader.readPacket();
filmReader.close();
Run Code Online (Sandbox Code Playgroud)
处理 mp4 文件就像抽奖一样。有些文件大部分工作正常。有些文件适用于示例 1,但不适用于示例 2,反之亦然。对于某些文件,程序在调试模式下运行,而对于某些文件,程序不在调试模式下运行。
我通常得到的效果是一个错误(查看帖子底部)。
我正在寻找的答案是为什么会发生这种情况,更重要的是是否可以修复?
问题对我来说特别难以调查,因为它看起来是半随机的。它在调试模式下的行为可能有所不同,有时甚至我在按“继续”之前在调试模式下等待的时间也可能导致程序正常运行或崩溃。
添加看似不相关的代码可能会导致程序停止处理某些文件。例如:
添加行:
IContainer container1 = IContainer.make();
Run Code Online (Sandbox Code Playgroud)
节目前:
IMediaReader filmReader = ToolFactory.makeReader(filename);
filmReader.readPacket();
filmReader.close();
IContainer container = IContainer.make();
int result = container.open(filename, IContainer.Type.READ, null);
System.out.println(result);
Run Code Online (Sandbox Code Playgroud)
导致之前正常工作的文件崩溃。
错误:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) …Run Code Online (Sandbox Code Playgroud)