3

私は自分のアプリで xuggle-xuggler5.4 を使用してビデオとオーディオの再生機能を追加しました。Google を調べたところ、次のスニペットが見つかりました。

long duration = container.getDuration();
long target = new Double(duration * .50).longValue();
container.seekKeyFrame(0, target, 0, 0, IContainer.SEEK_FLAG_BYTE);

このスニペットが正しくないのか、xuggle が間違っているのか、それとも病気なのか (冗談です) わかりませんが、すべて問題ないようです。ビデオを再生すると、常に最初から始まります (必要な場所ではありません)。

誰かが私を助けてくれたらとても嬉しいですありがとう

4

1 に答える 1

4

OK私はそれを手に入れました;)

私は以下のようにビデオの長さとフレームレートを取得しました:

IStream stream = iContainerObj.getStream(i);
IStreamCoder coder = stream.getStreamCoder();

if (coder.getCodecType() == ICodec.Type.CODEC_TYPE_VIDEO
    && videoStreamId == -1) {
videoDuration = container.getDuration() == Global.NO_PTS ? 0
        : container.getDuration() / 1000;
frameRate = coder.getFrameRate().getDouble();
    // other ....
 }

次に、特定の場所にジャンプするために、ミリ秒単位の期間を秒に変換してから、frameRateと必要な秒に乗算します。そして最後にseekKeyFrameを呼び出して、位置にジャンプします。

注:また、= >> IContainer.SEEK_FLAG_FRAMEを使用しました。これは、メソッドにフレーム番号を指定していることを示しています。

int jumpToThisSecond = 65;
long jumbTo = (long) (((videoDuration / 1000) * frameRate) * jumpToThisSecond);
container.seekKeyFrame(0, 0, jumbTo, container.getDuration(),
            IContainer.SEEK_FLAG_FRAME);
于 2013-03-04T08:09:01.503 に答える