fix: 被控端长时间不动,控制端无输出
This commit is contained in:
@@ -51,6 +51,11 @@ public class WebRtcClient {
|
||||
private EglBase eglBase;
|
||||
private String currentControllerId;
|
||||
|
||||
private VideoCapturer videoCapturer;
|
||||
private int videoWidth;
|
||||
private int videoHeight;
|
||||
private int videoFps;
|
||||
|
||||
private InputCommandCallback inputCallback;
|
||||
|
||||
public interface InputCommandCallback {
|
||||
@@ -93,6 +98,11 @@ public class WebRtcClient {
|
||||
}
|
||||
|
||||
public void setVideoCapturer(VideoCapturer capturer, int width, int height, int fps) {
|
||||
this.videoCapturer = capturer;
|
||||
this.videoWidth = width;
|
||||
this.videoHeight = height;
|
||||
this.videoFps = fps;
|
||||
|
||||
SurfaceTextureHelper surfaceTextureHelper = SurfaceTextureHelper.create("CaptureThread", eglBase.getEglBaseContext());
|
||||
// 对于屏幕共享,isScreencast 设为 true,这会优化细节保留
|
||||
VideoSource videoSource = peerConnectionFactory.createVideoSource(true);
|
||||
@@ -152,6 +162,9 @@ public class WebRtcClient {
|
||||
@Override
|
||||
public void onIceConnectionChange(PeerConnection.IceConnectionState newState) {
|
||||
Log.d(TAG, "ICE connection state: " + newState);
|
||||
if (newState == PeerConnection.IceConnectionState.CONNECTED) {
|
||||
refreshVideoSource();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -371,4 +384,16 @@ public class WebRtcClient {
|
||||
|
||||
wsClient.sendMessage(msg);
|
||||
}
|
||||
|
||||
private void refreshVideoSource() {
|
||||
if (videoCapturer != null) {
|
||||
try {
|
||||
Log.d(TAG, "Refreshing video capture to force a frame update for new connection");
|
||||
videoCapturer.stopCapture();
|
||||
videoCapturer.startCapture(videoWidth, videoHeight, videoFps);
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Error refreshing video capture: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user