2011-07-27 3 views
23

MediaPlayer.seekTo(int msec)가 정확하지 않습니까?MediaPlayer.seekTo (int msecs)의 정확도

가끔 30 초 일찍 (mp3가 가변 및 고정 비트 전송률로 표시됨)! 본질적으로 문제가되는 오디오를 추구하거나이 방법이 잘못 되었습니까? 그것은 완충 작용과 관련이 있습니까?

또한 전체 런타임 getDuration()이 잘못 될 수 있으며 (큰 문제는 아니며) getCurrentPosition()이 충분히 정확하다는 것을 알았습니다 (재생 n 초마다 천 단위로 증가 함).). 나 안드로이드 2.2에있어.

마지막으로, 실제로 어떤 형식이 실제로 일관되게 작동하는지 (누구도 알 수없는 wav가 아닌 것) 어떤 형식인지 알고 있습니까?

편집 :

주로 팟 캐스트를 듣습니다. smodcast 및 Thinking Allowed는 CBR으로 변환/다시 인코딩 된 후에도 여러 번 문제가있었습니다. 파일이 손상되지 않습니다.

QuickMediaConverter (Windows)는 제대로 작동하지만 Sound Converter (Ubuntu)에서 일부 dodgy 파일을 생성했습니다. 내가 이전에 고집하려고 노력하겠습니다 ...

업데이트 : QuickMediaConverter 정말 잘 작동하지만 이유는 모르겠어요. 이후 아무 문제 없어!

답변

0

나는 안드로이드에 대해 아무것도 모릅니다. 하지만 대부분의 미디어 파일 형식에서는 검색 항목 또는 큐 항목을 호출하는 하나의 조항이 있음을 알고 있습니다. 여기에서이 특정 시간 동안 보여주는 비디오 & 오디오는 재생 시작되어야합니다.

당신이 다음이 항상 제 12

에서 재생됩니다 12 초에 찾는 경우 항목 10 초
12 초
14 초는 11 초에 찾는 경우 다음

는 항상 10 초 에서 재생됩니다 더 나은 것을 위해 seek 파일은 높은 큐 입력으로 다중화되어야합니다.

27

멀티미디어 프레임 워크가 멀티미디어 (AV) 파일에서 찾기 작업을 수행하는 두 가지 방법이 있습니다.

  1. 키 프레임 탐색 - 일반적으로 I 프레임 또는 키 프레임으로 불리는 뭔가를해야합니다 인코딩 된 비디오를, 그것은이 프레임은 많은 정보를 가지고 있으며 전체 프레임을 디코딩하는 데 사용할 수 있다는 것을 의미한다 . 공간의 양을 줄이기 위해 모든 프레임이 키 프레임으로 인코딩되지 않고 대신 P (예측 된) 프레임 또는 예측 된 프레임으로 인코딩되므로 키 프레임의 도움말로 P 프레임을 디코딩 할 수 있습니다.

    그래서 탐색 작업 중에이 경우 탐색은 주어진 시간 동안 가장 가까운 키 프레임으로 수행됩니다. 예를 들어, 사용자가 40 초를 찾고 가장 가까운 키 프레임이 35 초인 경우 검색은 40 초가 아니라 35 초까지 수행됩니다.

  2. 시간 찾기 - 이것은 사용자가 요구하는 정확한 시간을 찾고 있습니다.

    가장 가까운 키 프레임에서 검색이 수행됩니다. 그렇지 않으면 매우 바람직하지 않은 녹색 패치 또는 픽셀 화가 나타날 것이기 때문입니다.그래서 대신 탐색이 키 프레임으로 수행 된 다음 필요한 시간까지 프레임이 디코딩되지만 이러한 프레임은 삭제되고 사용자에게 표시되지 않습니다. 위의 예에서는 35 번째에서 40 번째까지의 모든 디코딩 된 프레임이 삭제되고 40 초 이후의 프레임 만 사용자에게 표시됩니다.

    1. CBR을 - 오디오의 경우

    은 (더 파서 또는 다음 타임 스탬프 테이블을 구축 doesnot 파서가 없을 경우) - 이가지 경우가있을 수있다 파일 고정 비트 레이트 - 이후 비트 전송률은 일정합니다 (Bitrate * timeToSeek = 건너 뛸 바이트).

  3. VBR - 가변 비트 전송률 - 비트 전송률이 일정하지 않으므로 다양한 값을 유지합니다. 따라서이 경우 파일의 평균 비트 전송률을 확인한 다음 위의 방법을 사용하십시오.이 경우 검색은 정확하지 않습니다.

이제 질문에 다시 돌아와서, 나는 그것이 잘 작동하고 대부분의 미디어 파일에 대해 정확하다는 것을 확신 할 수 있습니다.

이러한 문제가 발생할 수있는 유일한 이유는 미디어 파일 자체가 손상 되었기 때문입니다. (검색하는 동안 30 초의 차이가있을 수는 없으며 기간이 올바르게 반환되지 않는다고 말하면서 안드로이드 2.2에서는 미디어 플레어 API가 깨진 적이 없다)

안드로이드에서 지원되는 포맷은 이 link

다른 mp3 파일로 시도 할 수 있습니까?

+0

거룩한 쓰레기, 백만 번 감사드립니다. 내 webapp을 Phonegap으로 감싸려고했는데 오디오 스프라이트가 막혔다. 나는 그것이 phonegap의 성능 때문이라고 생각했다 ... 그리고 안드로이드를 배우고 첫 번째 앱을 만든 후에 똑같은 정확성 문제를 발견했다. 개발 이틀 후, 나는이 대답을 읽고 매우 압축 된'ogg' 파일을 사용하고 있다는 것을 깨달았습니다. 나는 고품질의 사운드와 붐을 사용하여 모든 오디오 스프라이트가 완벽하게 작동했다. – ilovett