2012-06-06 9 views
5

Recibo una excepción cuando cierro un IMediaWriter haciendo un transcodificador simple . La excepción es "java.lang.RuntimeException: error Operación no permitida , no se pudo grabar el avance en el archivo test.mp3" Esto aparece cada vez que llamo a IMediaWriter.close(), Cualquier idea de por qué me daría esto por simple transcodificación? Aquí está el código de ejemplo:Xuggler MediaWriter Operación no permitida Problema

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

¿Ha comprobado los permisos del archivo? – Gorky

+0

Haga que la aplicación se cuelgue justo antes de 'writer.close()', ya sea utilizando un punto de interrupción o un bucle eterno. Luego, manualmente copie 'test.mp3' e intente reproducir este nuevo archivo usando un par de diferentes reproductores de audio de software. ¿Hay datos de audio allí? - En otras palabras, ¿el único problema es cerrar al escritor? – Luke

Respuesta

2

Esto funcionará seguramente porque yo estaba frente a un mismo problema. Gracias. Si desea más aclaraciones, consulte ...

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