2012-06-06 20 views
5

単純なトランスコードを行うIMediaWriterを閉じると、例外が発生し続けます。 例外は「java.lang.RuntimeException:error操作ではありません。 が許可され、trailerをtest.mp3に書き込めませんでした。」 IMediaWriter.close()を呼び出すたびにこれを取得します。トランスコード?私は同じ問題に直面していたので、これは確かに動作しますXuggler MediaWriter操作が許可されていない問題

IMediaReader reader = null; 
    IMediaWriter writer = null; 
    try { 
     reader = ToolFactory.makeReader("test.wav"); 
     writer = ToolFactory.makeWriter("test.mp3", reader); 
     reader.addListener(writer); 
     while (reader.readPacket() == null) ; 
     reader.close(); 
     writer.close(); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
+0

osファイルのアクセス権を確認しましたか? – Gorky

+0

アプリケーションを 'writer.close()'の直前で停止させるには、ブレークポイントまたは永遠のループを使用します。次に、手動で 'test.mp3'をコピーし、いくつかの異なるソフトウェアオーディオプレーヤーを使ってこの新しいファイルを再生してみてください。そこにオーディオデータはありますか? - 言い換えれば、唯一の問題は作家を閉じることですか? – Luke

答えて

2

: はここでのサンプルコードです。ありがとうございました。詳細をご希望の場合は...

IMediaReader reader = null; 
    IMediaWriter writer = null; 
    try { 
     reader = ToolFactory.makeReader("sijo.mp4"); 
     writer = ToolFactory.makeWriter("Thomas.flv", reader); 
     reader.addListener(writer); 
     while (reader.readPacket() == null) ; 
     //Should IMediaReader automatically call close(), only if ERROR_EOF (End of File) is returned from readPacket(). 
     reader.setCloseOnEofOnly(false); 
     //If false the media data will be left in the order in which it is presented to the IMediaWriter. 
     //If true IMediaWriter will buffer media data in time stamp order, and only write out data when it has at least one same time or later packet from all streams. 
     writer.setForceInterleave(false); 
     System.out.println("closed..."); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
関連する問題