나는 비디오 카드에서 MediaMetaDataReteriver를 사용하여 이미지를 가져 와서 도움이되는 arraylist Bitmap으로 SDCard에 저장하려고하는데, FFMPEG를 사용하는 것에 관심이 없다.안드로이드에서 프레임을 얻는 방법?
사실 내가 필요한 것은 다른 프레임의 이미지를 얻는 것이지만 루프가 실행될 때마다 동일한 첫 번째 프레임을 반복합니다.
이 문제를 해결하기 위해 인터넷에서 많은 부분을 검색하고 수정했지만 아무 것도 도움이되지 않았습니다.
이 문제를 해결하기위한 다른 방법이나 다른 방법에 대한 아이디어가 있으시면 저에게 도움을주십시오. 나는 시간이 microsceconds에 생각
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;
import android.graphics.Bitmap;
import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.view.Menu;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
File videoFile=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Movies/MEMO.mp4");
Uri videoFileUri=Uri.parse(videoFile.toString());
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(videoFile.getAbsolutePath());
ArrayList<Bitmap> rev=new ArrayList<Bitmap>();
//Create a new Media Player
MediaPlayer mp = MediaPlayer.create(getBaseContext(), videoFileUri);
int millis = mp.getDuration();
for(int i=0;i<millis;i+=100){
Bitmap bitmap=retriever.getFrameAtTime(i,MediaMetadataRetriever.OPTION_CLOSEST);
rev.add(bitmap);
try {
saveFrames(rev);
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void saveFrames(ArrayList<Bitmap> saveBitmapList) throws IOException{
String folder = Environment.getExternalStorageDirectory().toString();
File saveFolder = new File(folder + "/Movies/new /");
if(!saveFolder.exists()){
saveFolder.mkdirs();
}
int i=1;
for (Bitmap b : saveBitmapList){
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
File f = new File(saveFolder,("frame"+i+".jpg"));
f.createNewFile();
FileOutputStream fo = new FileOutputStream(f);
fo.write(bytes.toByteArray());
fo.flush();
fo.close();
i++;
}
}
또 다른 방법 : http://bigflake.com/mediacodec/#ExtractMpegFramesTest – fadden
나는 시도했으나 당신은 저를 도울 수 있습니다. – user3627866
선생님,이 프로세스에 대한 전체 샘플 코드로 제발 나를 도울 수 있습니다 – user3627866