2012-06-06 57 views
5

當我關閉IMediaWriter進行 簡單轉碼時,我總是收到異常。 例外是「java.lang.RuntimeException:錯誤操作不允許 ,未能寫入預告片到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(); 
    }