我在项目中使用了视频查看和搜索栏,这是搜索栏更改时的当前代码
True
False
True
False
问题是:当绘制搜索栏时,视频搜索不顺畅,它跳过帧。
例如:
第1点到第2点:
持续时间:1秒
框架:3
如果通过videoView.start()播放视频,那么可以,但是如果从第1点到第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。