xuggler icontainer 从输入流读取
xuggler icontainer read from inputstream
我正在使用 xuggler 将视频转码为不同的格式。
如果我直接从文件打开我的 IContainer,它可以完美运行,但是,这次我想使用 InputStream 打开 IContainer。奇怪的是我试图通过 FileInputStream 打开一个 mp4 格式的视频,可以使用这个 FileInputStream 打开 IContainer,但是我无法读取这个流中的 Ipacket。有人可以给我一些建议吗?错过了什么吗?我真的需要我的 xuggler 来处理流
public static void main(String[] args) throws IOException {
//the file input stream
FileInputStream fi = new FileInputStream("test.mp4");
//icontainer format
IContainerFormat format = IContainerFormat.make();
format.setInputFormat("mp4");
IContainer container = IContainer.make();
//open container via FileInputStream
int data = container.open(fi, format);
IPacket packet = IPacket.make();
//read packet
int info = container.readNextPacket(packet);
System.out.println(data);
System.out.println(info);
}
结果
data: 0
info: -1094995529
根据 IError,当我尝试读取数据包时出现未知错误。我正在使用 xuggler 5.4
首先,流必须是可搜索的(比如hadoop中的FSDataInputStream),否则Xuggler无法处理它,FileInputStream不是这种流,sad....实际上,seek()函数对于Xuggler来说很重要读取媒体文件
现在,开始处理可搜索流。
我找到了解决方案,Xuggler 实际上可以通过 IURLPROTOCOLHANDLER 处理流,我创建了我的自定义 class,它实现了 iurlprotocolhandler 并且它 "works"。
我从这个 Example 中学到了,它使用流 FSDataInputStream。
我正在使用 xuggler 将视频转码为不同的格式。 如果我直接从文件打开我的 IContainer,它可以完美运行,但是,这次我想使用 InputStream 打开 IContainer。奇怪的是我试图通过 FileInputStream 打开一个 mp4 格式的视频,可以使用这个 FileInputStream 打开 IContainer,但是我无法读取这个流中的 Ipacket。有人可以给我一些建议吗?错过了什么吗?我真的需要我的 xuggler 来处理流
public static void main(String[] args) throws IOException {
//the file input stream
FileInputStream fi = new FileInputStream("test.mp4");
//icontainer format
IContainerFormat format = IContainerFormat.make();
format.setInputFormat("mp4");
IContainer container = IContainer.make();
//open container via FileInputStream
int data = container.open(fi, format);
IPacket packet = IPacket.make();
//read packet
int info = container.readNextPacket(packet);
System.out.println(data);
System.out.println(info);
}
结果
data: 0
info: -1094995529
根据 IError,当我尝试读取数据包时出现未知错误。我正在使用 xuggler 5.4
首先,流必须是可搜索的(比如hadoop中的FSDataInputStream),否则Xuggler无法处理它,FileInputStream不是这种流,sad....实际上,seek()函数对于Xuggler来说很重要读取媒体文件
现在,开始处理可搜索流。
我找到了解决方案,Xuggler 实际上可以通过 IURLPROTOCOLHANDLER 处理流,我创建了我的自定义 class,它实现了 iurlprotocolhandler 并且它 "works"。 我从这个 Example 中学到了,它使用流 FSDataInputStream。