Eu tentei encontrar uma solução para buscar quadro a quadro (não apenas para keyframes) no meu aplicativo android.
abordagem: Um simples VideoView
do android sdk
:
Aqui eu tenho um onSeekCompleteListener
da class base MediaPlayer
do onPreparedListener
do VideoView
e pause
a reprodução logo após VideoView
lo e movido para uma posição preferida.
Problema : só procura keyframes!
abordagem: MediaMetaRetriever
: Eu tenho algo parecido com isto:
MediaMetadataRetriever retriever; long Position; ImageView video; TextView lbPosition; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); video = (ImageView)findViewById(R.id.imVideo); lbPosition = (TextView)findViewById(R.id.lbPosition); bnTake = (Button)findViewById(R.id.bntake); retriever.setDataSource(this, Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.vid)); video.setOnClickListener(new ImageView.OnClickListener() { @Override public void onClick(View arg0) { Position += 100000; Bitmap frame = retriever.getFrameAtTime(Position, MediaMetadataRetriever.OPTION_CLOSEST); video.setImageBitmap(frame); lbPosition.setText(String.valueOf(Position)); } }); bnTake.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View arg0) { Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); startActivityForResult(takeVideoIntent, 123123); } }); }
Quando eu uso OPTION_CLOSESTS
em retriever.getFrameAtTime
ele me dá um getFrameAtTime: videoFrame is a NULL
erro de ponteiro getFrameAtTime: videoFrame is a NULL
. Quando não uso essa opção, ela passa por frameworks-chave.
Talvez possíveis soluções:
abordagem: grave vídeo com mais frameworks-chave. Se eu gravasse o vídeo com uma keyframe rate
mais keyframe rate
no meu aplicativo Android, isso poderia ser uma solução? Isso é possível?
abordagem (eu não tentei!): Eu já ouvi algo de bibliotecas de terceiros para Android que usam o FFMPEG
. Existe alguma biblioteca que possa procurar em pausa e atualizar a posição do vídeo na canvas?
Você já tentou FFmpegMediaMetadataRetriever ?