Xuggler从输入流(inputstream)读取iContainer。

3

我正在使用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版本。
1个回答

2

首先,流必须是可寻址的(如Hadoop中的FSDataInputStream),否则Xuggler无法处理它,FileInputStream不是这种类型的流,很遗憾...实际上,seek()函数对于Xuggler读取媒体文件非常重要。

现在,需要使用可寻址流来处理。

我找到了解决方法,Xuggler实际上可以通过IURLPROTOCOLHANDLER处理流,我创建了一个实现iurlprotocolhandler的自定义类,它“工作”了。我从这个示例中学习,该示例使用流FSDataInputStream。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接