1

Xuggle を使用してローカルから mov ファイルを読み込もうとしています。これにより、次のエラーが表示されます。

30-mag-2011 15.56.55 com.xuggle.ferry.NativeLogger log
GRAVE: [mov,mp4,m4a,3gp,3g2,mj2 @ 0x102840600] moov atom not found

問題は、2 分前までエラーが発生せず、コードが同じだったことです。

しかし、私はこれを発見しました:

バイト配列を使用して IContainer を開くと、機能せず、次のエラーが表示されます。

ByteArrayInputStream b = new ByteArrayInputStream(file);
DataInputStream data = new DataInputStream(b);
IContainer container = IContainer.make();
if (container.open(data, null) < 0)
    throw new IllegalArgumentException("E001 - Cannot open the container");

一時ファイルを使用して IContainer を開くと、機能します。

File temp = File.createTempFile("temp_", ".mov");

try
{
    FileOutputStream fos = new FileOutputStream(temp);
    fos.write(file);
    fos.close();
}
catch(FileNotFoundException e)
{
    System.out.println(e);
}

IContainer container = IContainer.make();

if (container.open(temp.toString(), IContainer.Type.READ, null) < 0)
    throw new IllegalArgumentException("E001 - Cannot open the container");

助言がありますか?

4

3 に答える 3

0

ちょうどこの問題を理解しました。
コンテナを使用する前に、まずそのバッファサイズを設定してください

container.setInputBufferLength(b.available());
于 2011-09-05T19:12:58.737 に答える
0

これが古いスレッドであることは認識していますが、自分の問題を調査しているときに偶然出くわしました。上記の解決策はどれも役に立ちませんでした.

私の場合、Adobe Media Encoder を通過した H264/mov ファイルで問題が発生しました。AME は、Xuggle がすぐに見つけられない場所に MOOV ATOM を置いていたことが判明しました。私はファイルの最後に推測しています。

私にとっての解決策は2つありました。A) Xuggle に RandomAccessFile を渡して MOOV ATOM を検索できるようにする必要がありました。(FileInputStreams は検索できません) B) コンテナ形式を構成する必要がありました。オンラインのドキュメントやチュートリアルの多くは、Xuggle に依存して自動検出を行い、これを null のままにしています。

RandomAccessFile f = new RandomAccessFile("C:/MyMovie.mov", "r");
IContainer container = IContainer.make();
IContainerFormat format = IContainerFormat.make();
if (format.setInputFormat("mov") < 0) 
    System.out.println("Error setting format");

int result = container.open(f, IContainer.Type.READ, format);

これが誰かに役立つことを願っています。

于 2013-12-05T17:36:27.523 に答える
0

ByteArrayInput を DataInputStream に割り当てると、一部のデータが失われる可能性があります。それらの avaiable() 値が同じかどうかを確認します。

于 2011-09-05T17:34:52.290 に答える