如何不寻求关键帧关键

2023-09-05 08:40:31 作者:都是谎言 、

我试图找到一个解决方案,寻求逐帧(不仅关键帧)在我的Andr​​oid应用程序。

办法:一个简单的 VideoView Android SDK中的: 在这里,我有一个 onSeekCompleteListener 的MediaPlayer 在$ P $的基类pparedListener VideoView 暂停播放权后开始,并移动到preferred位置。照片 问题:只有寻求关键帧

办法: MediaMetaRetriever : 我有这样的事情:

 类MediaMetadataRetriever猎犬;
朗姿;
ImageView的视频;
TextView的lbPosition;

@覆盖
保护无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);

    视频=(ImageView的)findViewById(R.id.imVideo);
    lbPosition =(TextView中)findViewById(R.id.lbPosition);
    bnTake =(按钮)findViewById(R.id.bntake);
    retriever.setDataSource(此,Uri.parse(android.resource://+ getPackageName()+/+ R.raw.vid));

    video.setOnClickListener(新ImageView.OnClickListener(){
        @覆盖
        公共无效的onClick(查看为arg0){
           职位+ = 100000;
           位图帧= retriever.getFrameAtTime(位置,MediaMetadataRetriever.OPTION_CLOSEST);
           video.setImageBitmap(架);
           lbPosition.setText(将String.valueOf(位置));
       }
    });

    bnTake.setOnClickListener(新Button.OnClickListener(){
        @覆盖
        公共无效的onClick(查看为arg0){
            意图takeVideoIntent =新的意图(MediaStore.ACTION_VIDEO_CAPTURE);
            startActivityForResult(takeVideoIntent,123123);
        }
    });
}
 

当我使用 OPTION_CLOSESTS retriever.getFrameAtTime 它给了我一个 getFrameAtTime:videoFrame是一个NULL 指针错误。当我不使用这个选项,它通过关键帧。

也许可能的解决方案:

办法:更多的关键帧录制视频。如果我将记录在我的Andr​​oid应用程序具有更高的关键帧速率视频,会是一个解决方案?这可能吗?

办法(我没试过!):视频播放器的第三方库的机器人使用我听说过的东西 FFMPEG 。是否有任何可以争取,而在暂停状态,并更新位置的屏幕?

在视频库 解决方案

您是否尝试过 FFmpegMediaMetadataRetriever premiere CC 找不到添加关键帧的地方

I've tried to find a solution to seek frame by frame (not only to keyframes) in my android app.

approach: A simple VideoView of the android sdk: Here I've got a onSeekCompleteListener of the base class MediaPlayer from the onPreparedListener of VideoView and pause the playback right after started it and moved to a preferred position. Problem: Only seeks to keyframes!

approach: MediaMetaRetriever: I have got something like this:

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);
        }
    }); 
}

When I use OPTION_CLOSESTS in retriever.getFrameAtTime it gives me a getFrameAtTime: videoFrame is a NULL pointer error. When I don't use this option, it goes through keyframes.

Maybe possible solutions:

approach: Record video with more keyframes. If I would record the video with an higher keyframe rate in my android app, could that be a solution? Is this possible?

approach (I haven't tried!): I've heard something of video player 3rd party libraries for android that use FFMPEG. Is there any library that can seek while in pause state and update the position for the video on the screen?

解决方案

Have you tried FFmpegMediaMetadataRetriever?