2012-06-06 33 views
5

Bir IMediaWriter ürününü basit bir kod dönüştürerek kapattığımda bir istisna almayı sürdürüyorum. İstisna "java.lang.RuntimeException: hata İşlemi değil izinli, test.mp3 için römork yazamadı" IMediaWriter.close() aradığımda bunu alıyorum, Herhangi bir fikir neden bunu basit bir şekilde alacağım? kod geçişi? Aynı sorun karşı karşıya çünküXuggler MediaWriter İşlemine İzin Verilmiyor Sorun

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 dosya izinlerini kontrol ettiniz mi? – Gorky

+0

Bir kırılma noktası veya bir sonsuz döngü kullanarak, uygulamayı "writer.close()" ifadesinden hemen önce yapın. Ardından, elle test.mp3'ü kopyalayın ve birkaç yeni yazılım ses çaları kullanarak bu yeni dosyayı oynatmayı deneyin. Orada ses verisi var mı? - Başka bir deyişle, yazarın kapanmasıyla ilgili tek sorun mu? – Luke

cevap

2

Bu kesinlikle çalışacaktır: İşte örnek kod var. Teşekkür ederim. Daha fazla açıklama istiyorsanız lütfen sorunuz ...

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(); 
    } 
İlgili konular