我在我的应用程序中使用了xuggler5.4来添加视频和音频播放功能,我已经深入谷歌并找到了以下片段:
long duration = container.getDuration();
long target = new Double(duration * .50).longValue();
container.seekKeyFrame(0, target, 0, 0, IContainer.SEEK_FLAG_BYTE);
我不知道如果这个片段是不正确的,或者我的xoggle是错误的,或者我生病了(只是开玩笑),但一切看起来都很好。当我播放视频时,它总是从第一个开始(不是我想要的位置)。
如果有人能帮助我,我会很高兴由于好的,我知道了;)
我得到的视频持续时间和帧率如下:
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 ....
}
然后跳转到特定位置,我将持续时间转换为毫秒到秒,然后乘以帧速率和我想要的秒。最后调用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);