Basic-Video-Call
Basic-Video-Call copied to clipboard
Screen Shot in Group video call
How can i take screen shot of group video call .
I have tried simple bitmap creation but its seem to not working due to surface view show how can i implement this method its used to take screen shot of single surface view but its show erro mGridVideoViewContainer beacuse its a recycler view can any one help me here to take screen shot when multiple user joined in call.
` final Bitmap bitmap = Bitmap.createBitmap(mGridVideoViewContainer.getWidth(), mGridVideoViewContainer.getHeight(), Bitmap.Config.ARGB_8888);
// Create a handler thread to offload the processing of the image.
final HandlerThread handlerThread = new HandlerThread("PixelCopier");
handlerThread.start();
// Make the request to copy.
PixelCopy.request((SurfaceView) mGridVideoViewContainer.getRootView(), bitmap, (copyResult) -> {
if (copyResult == PixelCopy.SUCCESS){
try {
AppUtils.INSTANCE.saveImage(this, bitmap, new SimpleDateFormat(FILENAME_FORMAT, Locale.US).format(System.currentTimeMillis()) + ".png");
} catch (IOException e) {
e.printStackTrace();
}
}
handlerThread.quitSafely();
}, new Handler(handlerThread.getLooper()));
}`
Maybe, you can try the code below to take screen shot of group video.
Bitmap bitmap = Bitmap.createBitmap(mGridVideoViewContainer.getWidth(), mGridVideoViewContainer.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
HandlerThread takeSnapshopThread = new HandlerThread("TakeSnapshopThread");
takeSnapshopThread.start();
Handler drawHandler = new Handler(takeSnapshopThread.getLooper());
Rect containerRect = new Rect();
mGridVideoViewContainer.getGlobalVisibleRect(containerRect);
for (int i = 0; i < mGridVideoViewContainer.getChildCount(); i++) {
View childAt = ((ViewGroup)mGridVideoViewContainer.getChildAt(i)).getChildAt(0);
if(childAt instanceof SurfaceView){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CountDownLatch latch = new CountDownLatch(1);
Bitmap childBitmap = Bitmap.createBitmap(childAt.getWidth(), childAt.getHeight(), Bitmap.Config.ARGB_8888);
Rect destRect = new Rect();
childAt.getGlobalVisibleRect(destRect);
destRect.left = destRect.left - containerRect.left;
destRect.top = destRect.top - containerRect.top;
destRect.right = destRect.left + childAt.getWidth();
destRect.bottom = destRect.top + childAt.getHeight();
PixelCopy.request((SurfaceView) childAt, childBitmap, copyResult -> {
canvas.drawBitmap(childBitmap, null, destRect, paint);
latch.countDown();
}, drawHandler);
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
childBitmap.recycle();
}
}
}
takeSnapshopThread.quit();