Java 如何不寻找关键帧

Java 如何不寻找关键帧,java,android,video-capture,video-player,Java,Android,Video Capture,Video Player,我试图在我的android应用程序中找到一个逐帧(不仅仅是关键帧)搜索的解决方案 方法:一个简单的android sdk的VideoView: 在这里,我从VideoView的onPreparedListener和pause中获得了一个基本类MediaPlayer的onseekcompleteelistener,在开始播放并移动到首选位置后立即暂停播放。 问题:仅搜索关键帧 方法:MediaMetaRetriever: 我有这样的想法: MediaMetadataRetriever retrie

我试图在我的android应用程序中找到一个逐帧(不仅仅是关键帧)搜索的解决方案

  • 方法:一个简单的android sdk的
    VideoView

    在这里,我从
    VideoView
    onPreparedListener
    pause
    中获得了一个基本类
    MediaPlayer
    onseekcompleteelistener
    ,在开始播放并移动到首选位置后立即暂停播放。
    问题:仅搜索关键帧

  • 方法:
    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);
            }
        }); 
    }
    
  • 当我在
    retriever.getFrameAtTime
    中使用
    选项时,它会给我一个
    getFrameAtTime:videoFrame是空的
    指针错误。当我不使用此选项时,它将通过关键帧

    可能的解决方案:

  • 方法:使用更多关键帧录制视频。如果我在android应用程序中以更高的
    关键帧速率录制视频,这会是一个解决方案吗?这可能吗

  • 方法(我还没试过!):我听说android视频播放器第三方库使用
    FFMPEG
    。是否有任何库可以在暂停状态下查找并更新屏幕上视频的位置


  • 你试过了吗?

    你的api完全满足了我的需要!我不是一个在stackoverflow感谢所有人的人,但是这个api救了我的命!!还有一个问题:如何使用来自raw的内容URI或视频?我很高兴听到这一点。我将检查内容IRI和原始资源,并在今天回复您。我添加了对setDataSource(Context ctx,Uri)的支持,您可以将此方法用于内容Uri。很抱歉,库目前不支持原始资源。