2013-09-01 208 views
5

我用下面的代码可以用Xuggler成功播放视频。我需要能够从inputStream而不是文件进行流式处理。我尝试使用注释掉的代码来创建一个Icontainer。当我注释掉代码时,我修改了getTestFile方法以使用String而不是输入流。它最初正确地获取输入流。Xuggler流媒体视频

当我在Icontainer上打开时只是无限期地阻止。我不知道我是否正确接近这一点。我如何做基本相同的事情,但不使用文件和使用输入流?

感谢:-)

package com.plumber.testing; 

import com.xuggle.mediatool.IMediaReader; 
import com.xuggle.mediatool.IMediaViewer; 
import com.xuggle.mediatool.ToolFactory; 
import com.xuggle.xuggler.IContainer; 
import java.io.FileNotFoundException; 
import java.io.InputStream; 

public class VideoTest { 

    public static void main(String[] args) throws FileNotFoundException { 


//  IContainer iContainer = IContainer.make(); 
//  iContainer.open(getTestFile("IMG_0983.MOV"), null); 
//  I was originally passing the icontainer to make reader 
     IMediaReader mediaReader = ToolFactory.makeReader(getTestFile("IMG_0983.MOV")); 


     IMediaViewer mediaViewer = ToolFactory.makeViewer(true); 

     mediaReader.addListener(mediaViewer); 

     while (mediaReader.readPacket() == null) ; 

    } 

    private static String getTestFile(String fileName) { 
     return VideoTest.class.getClassLoader().getResource("com/plumber/testing/testfiles/" + fileName).getPath(); 
    } 

} 

回答

3

我认为你需要做这样的事情:

IContainer iContainer = IContainer.make(); 
    if (iContainer.open(inputStream, IContainer.Type.READ, format) >= 0) { 
     IMediaReader mediaReader = ToolFactory.makeReader(iContainer); 
     ... 
    } 

...基础上的javadoc说些什么。它看起来像需要使用IContainerFormat类的静态方法获取格式。如果您提供null格式,则open方法将尝试猜测容器类型......显然。

+0

我该如何动态确定使用的正确格式? – rubixibuc

+0

如果您提供'null'格式,IContainer类显然会尝试猜测。 –

+0

当我尝试此操作时,我只是出现部分文件错误的无限循环。 –