Расшифровка ошибок Xuggle / ffmpeg (новичок)

Недавно я начал работать с Xuggle для преобразования видеофайлов различных форматов в соответствующие FLV (для воспроизведения на нашем сайте через jwplayer). Код, который я использую, тривиально прост; по сути то, что они показывают для основного руководства по конвертации видео:

IMediaReader reader = ToolFactory.makeReader(file.getPath());
reader.addListener(ToolFactory.makeWriter(tempFileName, reader));

while (reader.readPacket() == null)
;

Это хорошо работает примерно с 50% видео, которые я пробовал. Однако для некоторых видео я получаю следующую ошибку (все .MP4, с которыми я сталкивался, а также некоторые .MOV)

Caused by: java.lang.RuntimeException: Error Operation not permitted, failed to write header to container com.xuggle.xuggler.IContainer@-635072136[url:/tmp/1280786368521.flv;type:WRITE;format:com.xuggle.xuggler.IContainerFormat@-631842520[oname:flv;olongname:FLV format;omimetype:video/x-flv;oextensions:flv;];] while establishing stream com.xuggle.xuggler.IStream@-615272544[index:1;id:2;streamcoder:com.xuggle.xuggler.IStreamCoder@-677475184[codec=com.xuggle.xuggler.ICodec@-635131032[type=CODEC_TYPE_AUDIO;id=CODEC_ID_MP3;name=libmp3lame;];time base=1/48000;frame rate=0/0;sample rate=48000;channels=2;];framerate:0/0;timebase:1/90000;direction:OUTBOUND;]
        at com.xuggle.mediatool.MediaWriter.getStream(MediaWriter.java:1065)
        at com.xuggle.mediatool.MediaWriter.encodeAudio(MediaWriter.java:837)
        at com.xuggle.mediatool.MediaWriter.onAudioSamples(MediaWriter.java:1448)
        at com.xuggle.mediatool.AMediaToolMixin.onAudioSamples(AMediaToolMixin.java:89)
        at com.xuggle.mediatool.MediaReader.dispatchAudioSamples(MediaReader.java:628)
        at com.xuggle.mediatool.MediaReader.decodeAudio(MediaReader.java:555)
        at com.xuggle.mediatool.MediaReader.readPacket(MediaReader.java:469)
        ... 10 more

Мне сложно определить, связана ли основная причина ошибки с Xuggle / ffmpeg / lame / etc. установка, или есть ли проблема с моим кодом.

Я полагаю, что первым шагом является расшифровка журнала ошибок и использование этой информации, чтобы попытаться преобразовать видео с использованием собственных вызовов ffmpeg. Если это сработает, можно предположить, что эти компоненты установлены правильно?

Итак, для сообщения журнала, например:

Error Operation not permitted, failed to write header to container com.xuggle.xuggler.IContainer@-635072136
[url:/tmp/1280786368521.flv;type:WRITE;format:com.xuggle.xuggler.IContainerFormat@-631842520[oname:flv;olongname:FLV format;omimetype:video/x-flv;oextensions:flv;];] 

while establishing stream com.xuggle.xuggler.IStream@-615272544
[index:1;id:2;streamcoder:com.xuggle.xuggler.IStreamCoder@-677475184[codec=com.xuggle.xuggler.ICodec@-635131032[type=CODEC_TYPE_AUDIO;id=CODEC_ID_MP3;name=libmp3lame;];time base=1/48000;frame rate=0/0;sample rate=48000;channels=2;];framerate:0/0;timebase:1/90000;direction:OUTBOUND;]

как мне перевести это в команду ffmpeg?

какие-нибудь другие советы по отладке для этого новичка в Xuggle?


person stpiker    schedule 03.08.2010    source источник
comment
Немного поигравшись с командной строкой ffmpeg, кажется, что проблема в том, что скорость звука входных видео несовместима с выходом flv (например, 48000 Гц). Если я использую параметр -ar 44100 для ffmpeg, видео конвертируются успешно. Теперь переведем это в код Xuggle ...   -  person stpiker    schedule 04.08.2010


Ответы (2)


Проблема решена. Это произошло из-за того, что FLV поддерживает только аудиопотоки с частотой дискретизации 44,1, 22,05 и 11,025 кГц. Используется класс Xuggle IAudioResampler из настраиваемого прослушивателя MediaTool, прослушивающего onAudioSamples (), для повторной дискретизации звука до поддерживаемой частоты.

person stpiker    schedule 04.08.2010

Я также недавно столкнулся с этой же проблемой. Потратил пару дней на это, пока не нашел ответ здесь.

person xlnc    schedule 18.05.2011
comment
Ваш ответ был бы более полезным, если бы вы описали решение вопроса, а не просто добавили ссылку. - person this.josh; 18.05.2011
comment
@xlnc Я тоже пробовал это, я пытался преобразовать в 3gp, поэтому была небольшая разница в мелких деталях, но он начал выдавать исключение нулевого указателя, которое я решил, добавив нулевую проверку в метод onAddStream. Теперь ошибки нет, но программа остается занятой и формируется файл размером 65 Кб, который при воспроизведении говорит об отсутствии воспроизводимых потоков. Пожалуйста, вы можете мне чем-нибудь помочь. - person Khizar; 13.09.2011
comment
Ссылка, которую вы дали, не открывается. - person Pramod; 01.08.2019