Как сделать снимок videoview во время воспроизведения видео в Android?

У меня черный экран, а не видео, пожалуйста, помогите мне.

Мой код:

 private Bitmap takeScreenshot() {
    relate.setDrawingCacheEnabled(true);
    relate.buildDrawingCache();
    return relate.getDrawingCache();
}

private void saveBitmap(Bitmap bitmap) {
    //  File imagePath = new File(Environment.getExternalStorageDirectory()     + "/screenshot.png");

    FileOutputStream fos;
    // String path ="data/data/com.focusmedica.eyeactivity/files/Images" +    filename;

    try {
        fos =new FileOutputStream(path);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
        fos.flush();
        fos.close();
        sentmail(path);
    } catch (FileNotFoundException e) {
        Log.e("GREC", e.getMessage(), e);
    } catch (IOException e) {
        Log.e("GREC", e.getMessage(), e);
    }
}

я использую canvas для рисования чего-то на videoview.и только у меня черный экран. мой videoview находится внутри relative layout, Заранее спасибо.....

1 ответ

Решение

С андроида здесь можно получить снимок или кадр просмотра видео.

Вы можете попробовать этот код, чтобы получить кадр video view.

    public static Bitmap createVideoThumbnail(Context context, Uri uri, int i)
    {
     MediaMetadataRetriever mediametadataretriever = new MediaMetadataRetriever();

try {
    mediametadataretriever.setDataSource(context, uri);
    Bitmap bitmap = mediametadataretriever.getFrameAtTime(-1L);
    if(null != bitmap)
    {
        int j = getThumbnailSize(context, i);
        return ThumbnailUtils.extractThumbnail(bitmap, j, j, 2);
    }
    return bitmap;
} catch (Throwable t) {
    // TODO log
    return null;
} finally {
    try
    {
        mediametadataretriever.release();
    }
    catch(RuntimeException e) { }
    }
}

Вы можете использовать этот метод в соответствии с вашими потребностями.

У меня есть альтернативное решение для замены getFrameAt метод Android MediaMetadataRetriever. AV_FrameCapture используетMediaCodec для декодирования кадра видео и использования OpenGLдля преобразования видеокадра в растровое изображение RGB. Как AndroidMediaMetadataRetriever не гарантирует возврат результата при звонке getFrameAtTime, этот AV_FrameCaptureможет использоваться для точного извлечения кадра видео.

/questions/15984503/mediametadataretrievergetframeattime-vozvraschaet-tolko-pervyij-kadr/55160612#55160612

Другие вопросы по тегам