Мне удалось выяснить, как захватить видеокадр из VideoView, который воспроизводит видео, хранящееся локально на телефоне. Однако, когда видео передается по IP-адресу в VideoView, очень сложно сделать снимок экрана/изображения/видео. Я был бы признателен за решение этой проблемы.Как захватить снимок экрана VideoView при потоковой передаче видео в Android
Вот аналогичный вопрос, который не получил ответа: How to capture a frame from video in android?
Вот решение для захвата видеокадра (ТОЛЬКО если видео хранится на телефоне):
public static Bitmap captureVideoFrame(Activity activity, VideoView vv, String viewSource, int currPosInMs)
{
MediaMetadataRetriever mmRetriever = new MediaMetadataRetriever();
mmRetriever.setDataSource(viewSource);
Bitmap bmFrame = mmRetriever.getFrameAtTime(currPosInMs * 1000); // unit in microsecond
if(bmFrame == null){
Toast.makeText(activity.getApplicationContext(), "Bitmap is null! Curr Position: " + currPosInMs, Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(activity.getApplicationContext(), "Bitmap is not null! Curr Position: " + currPosInMs, Toast.LENGTH_SHORT).show();
// Save file
String mPath = Environment.getExternalStorageDirectory().toString() + "/" + SCREENSHOT_DIRECTORY + "myScreenshot.png";
OutputStream fout = null;
File imageFile = new File(mPath);
try {
fout = new FileOutputStream(imageFile);
bmFrame.compress(Bitmap.CompressFormat.JPEG, 100, fout);
fout.flush();
fout.close();
Toast.makeText(activity.getApplicationContext(), "Saved file successfully!", Toast.LENGTH_SHORT).show();
}
catch(Exception e){
}
}
return bmFrame;
}