안녕하세요 ..

Video파일의 Thumbnail을 만들려고 하는데 이런 저런방법을 동원해봐도 어떻게 해야할지 모르겠습니다..

built-in application gallery에서는 ImageManager.java에서

MediaMetadataRetriever 클래스를 사용하여 captureFrame이라는 native 함수를 사용하고 있어서

이와 비슷하게 해보려고

MediaMetadataRetriever.java에서 사용하고있는  libmedia_jni.so를 data/data/패키지명/files/ 경로 아래에 복사하여두고

MediaMetadataRetriever.java를 복사하여 프로젝트에 포함시키고

ImageManager.java 내에 createVideoThumbnail을 그대로 가져왔습니다.
그 후 프로젝트 내의 MediaMetadataRetriever.java에서  System.load("data/data/패키지명/files/libmedia_jni.so"); 를 실행하니
아래와같은 에러메세지가 나오네요 .. 왜 찾질 못할까요 File Explorer에서는 복사되어 존재하는것으로 보이는데 말이죠.

ERROR/AndroidRuntime(784): Caused by: java.lang.UnsatisfiedLinkError: Library /data/data/패키지명/files/libmedia_jni.so not found


=============================================================================
public static Bitmap createVideoThumbnail(String filePath) {
        Bitmap bitmap = null;
        MediaMetadataRetriever retriever = new MediaMetadataRetriever();
        try {
            retriever.setMode(MediaMetadataRetriever.MODE_CAPTURE_FRAME_ONLY);
            retriever.setDataSource(filePath);
            bitmap = retriever.captureFrame();
        } catch(IllegalArgumentException ex) {
            // Assume this is a corrupt video file
        } catch (RuntimeException ex) {
            // Assume this is a corrupt video file.
        } finally {
            try {
                retriever.release();
            } catch (RuntimeException ex) {
                // Ignore failures while cleaning up.
            }
        }
        return bitmap;
    }*/
=================================================================================

아래는 assets폴더에서 파일시스템으로 복사해 넣는 부분입니다.
===============================================================================================
try {
            InputStream is = getAssets().open("libmedia_jni.so");           
            int size = is.available();
            byte[] buffer = new byte[size];
            is.read(buffer);
           
            FileOutputStream fos = openFileOutput("libmedia_jni.so", Activity.MODE_WORLD_WRITEABLE);  
            fos.write(buffer);
            fos.close();
           
            is.close();
        } catch (IOException e) {
            // Should never happen!
            throw new RuntimeException(e);
        }
===============================================================================================

참고로 Android Full source에 Built-in 으로 현재 어플리케이션을 포함시키고
전체 빌드하여 이미지를 에뮬에서 동작시켰을때
video thumbnail을 가져오는것은 성공했습니다.

다른방법으로는 파일을 읽어 헤더바로 뒤부터 바이트를 늘려가며 byte배열에 가져와
Bitmap b = BitmapFactory.decodeByteArray(buffer, 0, frameSize);
를 해보았지만 null값만 리턴됩니다.

혹시 먼저 경험 하신 분이 있으시다면 작은 손길 부탁드립니다.