Операция Xuggler MediaWriter не разрешена

Я продолжаю получать исключение, когда закрываю IMediaWriter, выполняя простое перекодирование. Исключением является «java.lang.RuntimeException: ошибка. Операция не разрешена, не удалось записать трейлер в test.mp3». Я получаю это всякий раз, когда вызываю IMediaWriter.close(). Есть идеи, почему я должен получить это для простого перекодирования? Вот пример кода:

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

person user1249283    schedule 06.06.2012    source источник
comment
Вы проверили права доступа к файлам ОС?   -  person Gorky    schedule 09.07.2013
comment
Заставьте приложение зависнуть прямо перед writer.close(), используя точку останова или вечный цикл. Затем вручную скопируйте test.mp3 и попробуйте воспроизвести этот новый файл с помощью нескольких различных программных аудиоплееров. Есть ли аудиоданные? -- Иными словами, проблема только в закрытии писателя?   -  person Luke    schedule 14.11.2013


Ответы (1)


Это обязательно сработает, потому что я столкнулся с той же проблемой. Спасибо. Если вы хотите получить дополнительные разъяснения, пожалуйста, спросите...

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(); 
    }
person user3301869    schedule 12.02.2014