MediaMetadataRetriever를 이용해 원하는 프레임 Bitmap 추출하려고 하는데 에러만 나옵니다.
동영상에서 이미지를 추출하기 위해 적당한 클레스를 찾아보다가
MediaMetadataRetriever라는 클레스가 있다는것을 알게되어 테스트를 해보니
에러만 나고 원하는 결과는 나오지 않습니다.
원인이 무엇인지 알수있을까요?
동영상파일은 MediaPlayer 클래스를 이용해 재생해본결과 문제없이 잘동작하는것은 확인했습니다.
안드로이드 버전은 2.3.3 이고 테스트한 단말은 겔노트입니다.
*테스트용이라 다른처리는 하지 않았습니다.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try
{
MediaMetadataRetriever mt = new MediaMetadataRetriever();
int Duration = 0;
AssetFileDescriptor afd = getResources().openRawResourceFd(R.raw.v0);
mt.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
String Title = mt.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
String strDuration = mt.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
if(strDuration != null) Duration = Integer.parseInt(strDuration);
Log.d(TAG, "<<-------- Duration : " + Duration + ", strDuration : " + strDuration + ", Title : " + Title);
Log.d(TAG, "<<-------- getFrameAtTime : " + mt.getFrameAtTime(0));
afd.close();
mt.release();
}
catch(Exception e)
{
}
}
*해당 부분의 로고기록은 이렇습니다.
04-10 15:04:18.839: V/MediaPlayerService(187): Create new media retriever from pid 9379
04-10 15:04:18.839: D/MediaPlayerService(187): getPlayerType. Ln=986
04-10 15:04:18.839: D/MediaPlayerService(187): using default player. STAGEFRIGHT_PLAYER. Ln=966
04-10 15:04:18.839: E/SavsMetadataRetriever(187): void android::SavsMetadataRetriever::parseMetaData() sthmb_open() fail err=-5
04-10 15:04:18.839: D/MetetestActivity(9379): <<-------- Duration : 0, strDuration : null, Title : null
04-10 15:04:18.839: E/SavsMetadataRetriever(187): android::VideoFrame* android::SavsMetadataRetriever::getThumbnail() sthmb_open() fail
04-10 15:04:18.839: E/MetadataRetrieverClient(187): failed to capture a video frame
04-10 15:04:18.839: E/MediaMetadataRetrieverJNI(9379): getFrameAtTime: videoFrame is a NULL pointer
04-10 15:04:18.839: D/MetetestActivity(9379): <<-------- getFrameAtTime : null
아참 공지는 보고 글올렸습니다.
검색해도 관련된 에러는 못찾겠습니다. ㅠㅠ
API 를 보면
Call this method after setDataSource().
이렇게 되어있더라고요..
인터넷으로 검색해보면 getFrameAtTime(-1) 이런식으로도 사용했던데 다해봐도 같은 결과만 나와서요.
setDataSource()로 영상을 인식시키고 getFrameAtTime()으로 영상의 시간에 이미지를 얻는 것같은데
setDataSource()를 사용해서 나온 로고가
04-10 15:04:18.839: D/MediaPlayerService(187): getPlayerType. Ln=986 04-10 15:04:18.839: D/MediaPlayerService(187): using default player. STAGEFRIGHT_PLAYER. Ln=966 이부분입니다. 파일 인식에는 문제가 없는듯한데 영상의 정보부분부터는 문제가 있네요.. default player. 로 인식되서 그런것인가라는 의문도있고..
프레임 타임이 널이라면........어디에서 찍는지 모르는게 아닐까요..-0-;;
잘 모르는 어느 빌빌대며 지나가는 허접 개발자의 ...허접한 생각..ㅠ.ㅠ