2012-06-06 9 views
5

Continuo a ricevere un'eccezione quando chiudo un IMediaWriter che esegue una transcodifica semplice . L'eccezione è "java.lang.RuntimeException: errore Operazione non consentita, non è stato possibile scrivere il trailer su test.mp3" Ottengo questo ogni volta che chiamo IMediaWriter.close(), Qualsiasi idea del motivo per cui otterrei questo per un semplice transcodifica? Ecco il codice di esempio:Operazione Xuggler MediaWriter non consentita Edizione

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

Hai controllato i permessi del file OS? – Gorky

+0

Appendere l'applicazione prima di 'writer.close()', usando un punto di interruzione o un ciclo eterno. Quindi copia manualmente 'test.mp3' e prova a riprodurre questo nuovo file usando un paio di diversi lettori audio software. C'è qualche dato audio lì? - In altre parole, l'unico problema è chiudere lo scrittore? – Luke

risposta

2

questo funzionerà sicuramente perché stavo affrontando lo stesso problema. Grazie. Se vuoi ulteriori chiarimenti, chiedi ...

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