好的,我明白了;)
我得到的视频时长和帧速率如下:
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);