我正在使用xuggler将视频转码为不同的格式。 如果我直接从文件打开我的IContainer,它可以很好地工作,但是,这次我想打开IContainer使用一个InputStream。奇怪的是我试图通过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
答案 0 :(得分:2)
首先,流必须是可搜索的(如hadoop中的FSDataInputStream),否则Xuggler无法处理它,FileInputStream不是这种流,很难过....实际上,seek()函数对于Xuggler来说很重要媒体文件
现在,开始寻找可流媒体。
我找到了解决方案,Xuggler实际上可以通过IURLPROTOCOLHANDLER处理流,我创建了我的自定义类,它实现了iurlprotocolhandler并且“工作”。 我从这个Example学习,它使用流FSDataInputStream。