Android:在onSeekbar上逐帧搜索视频

时间:2017-02-20 05:12:10

标签: android android-videoview seekbar

我在项目中使用了视频查看和搜索栏,这是搜索栏更改时的当前代码

True
False
True
False

问题是:当绘制搜索栏时,视频搜索不顺畅,它跳过帧。

例如:

第1点到第2点:

持续时间:1秒

框架:3

如果通过videoView.start()播放视频,那么可以,但是如果从第1点到第2点绘制搜索条,则它会滑动第2帧。

2 个答案:

答案 0 :(得分:0)

当对视频流进行编码时,通常会有称为I帧(I-Picture)或Key帧的东西,这意味着该帧具有大量信息,可用于整体解码帧。为了减少空间量,所有帧都不被编码为关键帧,而是将它们编码为P(预测)帧或预测帧,这意味着您可以在关键帧的帮助下解码P帧。

因此,在搜索操作期间,在这种情况下,在给定的持续时间内对最近的关键帧进行搜索。例如,如果用户寻求40秒并且最近的关键帧是在第35秒,则搜索到第35秒而不是第40秒。

您仍然可以尝试以下操作来查看它是否有效。 I图片之间的距离通常为0.5秒。因此,不要寻求每毫秒,而是尝试使用秒直接跳转到I图片。

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress,
            boolean fromUser) {

        if (fromUser) {
            // this is when actually seekbar has been seeked to a new
            // position
            videoView.seekTo(progressx1000);
        }
    }
enter code here

尝试在onStopTrackingTouch()中调用它:

public void onStopTrackingTouch(SeekBar seekBar) {
     videoView.seekTo(seekBar.getProgress());
}

这就是我在项目中的表现。

答案 1 :(得分:0)

VideoViewer seekTo()函数有一些限制,并假定您要捕捉回关键帧。但是,MediaPlayer允许您覆盖该选择:

mediaPlayer.seekTo(time, MediaPlayer.SEEK_CLOSEST);

其他值包括:SEEK_PREVIOUS_SYNC,SEEK_NEXT_SYNC,SEEK_CLOSEST_SYNC。

例如,如果您还没有MediaPlayer的实例,则可以在VideoViewer的onPreparedListener中访问它。

有关MediaPlayer的seekTo的详细信息,请参见here