1
    private void sample(){
        int FRAME_BYTES=326;
        int FRAMESMAX=36;
        String subFolder="media";
        String mediafileName="sample.mp4";
        MediaMetadataRetriever mediaMetadata=new MediaMetadataRetriever();

        try{
            AssetFileDescriptor afd=getApplicationContext().getAssets().openFd(subFolder+File.separator+mediaFileName);
            ;


            mediaMetadata.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());

            Bitmap frame=null;
            for(int currentFrame=0;currentFrame<FRAMESMAX; currentFrame++){

                if(currentFrame<=0){ 
                    frame = mediaMetadata.getFrameAtTime();
                }else{
                    frame =   mediaMetadata.getFrameAtTime(FRAME_BYTES*currentFrame*1000, MediaMetadataRetriever.OPTION_CLOSEST_SYNC );
                    //currentFrame++;
                }
                // do some thing with frame
            }
        }catch(Exception e){
            Log.i(TAG, "  unable to get file descriptor of the frame"+e.toString());
        }
    }
}

エミュレーターやその他のデバイスで mp4 メディア ファイルからフレームを読み取ることはできますが、Samsung galaxy S III がスローされ、エラーが発生します。

MediaMetadataRetriever getFrameAttime failed to retrieve video frames.

これについて何か意見はありますか?

4

1 に答える 1

0

データソースを取得するには、次を使用できます。

mediaMetadata.setDataSource(Environment.getExternalStorageDirectory().getPath()+"your_folder/your_file");
于 2013-04-17T20:13:24.137 に答える