2014-01-23 2 views
3

Я попытался найти решение для поиска кадр за кадром (не только для ключевых кадров) в приложении для Android.Как не искать ключевые кадры

  1. подход: Простой VideoView из android sdk:
    Вот у меня onSeekCompleteListener базового класса MediaPlayer от onPreparedListener из VideoView и pause воспроизведение сразу после его запустил и переехал в предпочтительное положение.
    Задача: Только ищет ключевые кадры!

  2. подход: 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 указатель. Когда я не использую этот параметр, он проходит через ключевые кадры.

Может возможные решения:

  1. подход: Запись видео с большим количеством ключевых кадров. Если бы я записал видео с более высоким keyframe rate в моем приложении для Android, это могло бы быть решением? Это возможно?

  2. подход (я не пробовал!): Я слышал что-то о сторонних библиотеках для плееров для Android, которые используют FFMPEG. Есть ли какая-либо библиотека, которая может искать в состоянии паузы и обновлять позицию для видео на экране?

ответ

1

Вы попробовали FFmpegMediaMetadataRetriever?

+1

Вы, api, отлично удовлетворяет мои потребности! Я не тот, кто благодарит всех в stackoverflow, но этот api спас мне жизнь! Еще один вопрос: как использовать контент uris или видео из raw? – user2737037

+0

Я рад это слышать. Я вернусь к содержимому iris и сырым ресурсам и вернусь к вам сегодня. –

+0

Я добавил поддержку setDataSource (Context ctx, Uri uri). Вы можете использовать этот метод для URI контента. http://wseemann.github.io/FFmpegMediaMetadataRetriever/apidocs/wseemann/media/FFmpegMediaMetadataRetriever.html#setDataSource(Context,%20Uri). В настоящее время библиотека не поддерживает исходные ресурсы, извините. –

Смежные вопросы