我将假设您要对其进行屏幕截图的对等方的SurfaceViewRenderer称为remotePeerSurfaceViewRenderer ,同时我还将假设您将用于进行屏幕截图的按钮称为btnScreenshot
因此,您需要做的就是在上面的答案中使用“ Webo80”说使用FrameListener,问题是,一旦将Listener附加到SurfaceViewRenderer上,webrtc的FrameListener实现将仅获取可用的第一帧,所以我的方法是那是通过第二次附加FrameListsner的webrtc实现,我需要截取屏幕截图,并在完成后将其删除:
btnScreenshot.setOnClickListener((view)-> {
remotePeerSurfaceViewRenderer.addFrameListsner(new EglRenderer.FrameListener() {
@Override
public void onFrame(Bitmap bitmap) {
runOnUiThread(() -> {
/*
do what ever you want with the bitmap for example
imgView.setImageBitmap(bitmap);
*/
localVideoView.removeFrameListener(this);
});
}
}, 1);
})
重要的提示:
1. Please don't forget to runOnUiThread as Iam doing
2. Please don't forget to remove the listener inside the button onClick() method
我已经尝试过该解决方案,并且效果还不错,如果要制作自定义解决方案,则必须完全实现接口“ EglRenderer.FrameListener”