Как сделать снимок 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
может использоваться для точного извлечения кадра видео.