2016-04-09 7 views
2

xugglerを使用して動画をさまざまな形式に変換しています。 ファイルから直接IContainerを開くと、それは完全に動作しますが、今回はIContainerでInputStreamを使用したい場合は開きます。奇妙なことに、私はFileInputStream経由でmp4形式のビデオを開こうとしましたが、このFileInputStreamを使用してIContainerを開くことはできますが、このストリームでIpacketを読み取ることはできません。誰か私にいくつかの提案を与えることができますか?何かお見逃しですか?私は本当にストリームで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); 
} 

結果IERRORによる

data: 0 
info: -1094995529 

を対処するために、私のxugglerを必要とし、ここで不明なエラー私は、パケットを読み込むしようとしたとき。私はxugglerを使用しています。5.4

答えて

2

まずストリームはシーク可能でなければなりません(そうでなければ、Xugglerはそれを処理できません)。FileInputStreamはそういうストリームではありません。 Xugglerがメディアファイルを読み込むために重要です

今、シーク可能なストリームで作業します。

私は解決策を見つけました.Xugglerは実際にはIURLPROTOCOLHANDLERでストリームを処理できます。私は、iurlprotocolhandlerを実装している自分のカスタムクラスを作成しました。 私はこのExampleから、ストリームFSDataInputStreamを使用して学びました。