我试图找到一个解决方案,以寻求在我的android应用程序中逐帧(而不是关键帧)的帧。如何不寻求关键帧
的方法:
android sdk
的简单VideoView
:
在这里,我从VideoView
的onPreparedListener
和pause
播放后立即开始,并移动到最佳位置得到了基类MediaPlayer
的onSeekCompleteListener
。
问题:只寻求关键帧!方法:
MediaMetaRetriever
: 我有这样的事情: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); } }); }
当我使用OPTION_CLOSESTS
在retriever.getFrameAtTime
它给了我一个getFrameAtTime: videoFrame is a NULL
指针错误。当我不使用这个选项时,它通过关键帧。
也许可能的解决方案:
办法:用更关键帧录制视频。如果我在我的android应用程序中录制更高的
keyframe rate
视频,这可能是一种解决方案吗?这可能吗?方法(我还没有试过!):我听说过一些使用
FFMPEG
的android视频播放器第三方库。是否有任何库可以在暂停状态下查找并更新屏幕上视频的位置?
你api完全满足我的需求!我不是一个感谢所有人在stackoverflow,但这api救了我的生命!还有一个问题:如何从原始使用内容uris或视频? – user2737037
我很高兴听到这个消息。我将重新检查虹膜和原始资源的内容,并在今天回复您。 –
我添加了对setDataSource的支持(Context ctx,Uri uri)您可以将此方法用于内容URI。 http://wseemann.github.io/FFmpegMediaMetadataRetriever/apidocs/wseemann/media/FFmpegMediaMetadataRetriever.html#setDataSource(Context,%20Uri)。图书馆此时不支持原始资源,抱歉。 –