2016-04-09 73 views
2

我使用xuggler将视频转码为不同的格式。 如果我直接从文件打开我的IContainer,它可以很好地工作,但是,这次我想打开IContainer使用InputStream。奇怪的是我试图通过FileInputStream打开一个mp4格式的视频,IContainer可以使用FileInputStream打开,但我无法读取此流中的Ipacket。有人可以给我一些建议吗?错过了什么?我真的需要我的xuggler处理流从输入流中读取的xuggler icontainer

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

回答

2

首先,流必须是可搜索的(如hadoop中的FSDataInputStream),否则Xuggler无法处理它,FileInputStream不是这样的流,悲伤....实际上,seek()函数对于Xuggler来说是非常重要的一个媒体文件的读取

现在,工作寻找流。

我已经找到解决方案,Xuggler实际上可以通过IURLPROTOCOLHANDLER处理流,我创建了我的自定义类,它实现了iurlprotocolhandler并且它“工作”。 我从这个Example了解到,它使用流FSDataInputStream。