我最近开始使用Xuggle将各种格式的视频文件转换为相应的FLV(通过jwplayer在我们的网站上播放)。我正在使用的代码非常简单;基本上他们为基本的视频转换教程展示了什么:
IMediaReader reader = ToolFactory.makeReader(file.getPath());
reader.addListener(ToolFactory.makeWriter(tempFileName, reader));
while (reader.readPacket() == null)
;
这适用于我尝试过的约50%的视频。但是,我收到一些视频的以下错误(我遇到的所有.MP4s,以及一些.MOVs)
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新手的任何其他调试技巧?
答案 0 :(得分:5)
问题解决了。这是由于FLV仅支持音频流,采样率为44.1,22.05& 11.025 kHz。在侦听onAudioSamples()的自定义MediaTool侦听器中使用Xuggle的IAudioResampler类,将音频重新采样为支持的速率。
答案 1 :(得分:1)
我最近也碰到过同样的问题。花了几天时间才发现答案here。