4

最近、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 初心者のための他のデバッグのヒントはありますか?

4

2 に答える 2

5

問題が解決しました。これは、FLV が 44.1、22.05、および 11.025 kHz のサンプル レートのオーディオ ストリームのみをサポートしているためです。onAudioSamples() をリッスンするカスタム MediaTool リスナー内から Xuggle の IAudioResampler クラスを使用して、オーディオをサポートされているレートにリサンプリングしました。

于 2010-08-04T21:57:30.923 に答える
1

私も最近、この同じ問題に遭遇しました。ここで答えが見つかるまで、これに数日を費やしました。

于 2011-05-18T12:55:01.423 に答える