마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Media player seekto로 이동시 질문드립니다.

0 추천
Media player를 이용하여 mp4형태의 동영상을 스트리밍 하고 있습니다.

대부분에 동영상과 단말에서 정상적으로 seekto를 하면 원하는 포지션으로 이동하고 있는데,

특정단말, 영상에 대해서 포지션이동 오류가 있습니다. 그렇다고 seekto 하려는 값자체가 변하는 것은 아닙니다.

이부분 보정할 수 있는 방법이 있을까요...? 경험자분 조언 부탁드립니다.
익명사용자 님이 2016년 8월 27일 질문

2개의 답변

0 추천
먼저 에러로그도 같이 포스팅 하실 필요가 있을 것 같습니다. 에러 메세지가 어떤 상황에서 그런 이슈가 생기는지 단서를 제공할 거라고 믿습니다. 원인을 찾는다면 해결방법을 찾을 가능성도 더 높아질 것 같습니다.
익명사용자 님이 2016년 8월 28일 답변
0 추천
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를 직접 만드셔야 합니다.
익명사용자 님이 2016년 8월 29일 답변
2016년 8월 29일 수정
해당 파일을 다운로드 받아서 확인해볼수 있는 방법이 없을까요?
파일에 문제여부를 확인해야해서요...
...