MediaCodec등을 사용하여 미디어 플레이어를 직접 만드시는 것이 아니면 없습니다.
영상의 경우 모든 이미지 정보가 들어있는 I-Frame, 일부 변경된 정보만 들어있는 P-Frame,
I-Frame와 P-Frame을 참조하는 B-Frame이 있습니다. seek을 할 경우 화면이 깨지지 않게 하기 위해서
I-Frame이 있는 위치부터 디코딩을 하게 됩니다.
문제는 I-Frame의 경우 모든 화면 정보를 가지고 있다보니 용량이 커져서,
stream용 영상이 아닌 mp4 같은 영상은 10~15초에 1개 정도밖에 I-Frame 이 안 들어 있습니다.
예를 들어 15초 간격으로 I-Frame 들어있는 상태에서 20초로 seek을 하면 15초로 seek을 해서 I-Frame부터 디코딩을 시도하기 때문에 15초로 seek이 됩니다.
MediaCodec을 써서 가장 가까운 I-Frame 을 찾아 디코딩 요청하고, 해당 시간까지 영상을 drop하다 정확한 위치 부터 그리는 방식으로 하면 seek이 정확한 위치에서 되게 하는게 가능합니다.
예를 들어들였던것을 기준으론 15초의 I-Frame부터 디코딩을 해서, 화면을 그리지 않고, 계속 버리면서 디코딩을 하다 20초 부터 화면에 그리는 방식입니다.
문젠 이 경우 디코더의 성능에 따라 seek이 오래걸릴 수도 있어서, MediaPlayer에서 이러한 기능을 지원하는 단말도 있긴 하지만 대부분은 지원 안 하기 때문에 말씀하신 문제가 발생하는 것으로,
꼭 필요하신 기능이면 MediaCodec등을 사용하여 MediaPlayer를 직접 만드셔야 합니다.