10000 Feat/async method for pc states (#1419) · liliBestCoder/flutter-webrtc@bef6187 · GitHub
[go: up one dir, main page]

Skip to content

Commit bef6187

Browse files
authored
Feat/async method for pc states (flutter-webrtc#1419)
* feat: add async method for pc states. * update. * update example. * implementation for cpp.
1 parent b5ea5c9 commit bef6187

File tree

11 files changed

+480
-202
lines changed

11 files changed

+480
-202
lines changed

android/src/main/java/com/cloudwebrtc/webrtc/MethodCallHandlerImpl.java

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.cloudwebrtc.webrtc.utils.EglUtils;
3030
import com.cloudwebrtc.webrtc.utils.ObjectType;
3131
import com.cloudwebrtc.webrtc.utils.PermissionUtils;
32+
import com.cloudwebrtc.webrtc.utils.Utils;
3233

3334
import com.twilio.audioswitch.AudioDevice;
3435

@@ -821,12 +822,61 @@ public void onMethodCall(MethodCall call, @NonNull Result notSafeResult) {
821822
result.success(capabilitiestoMap(capabilities).toMap());
822823
break;
823824
}
824-
case "setCodecPreferences":
825+
case "setCodecPreferences": {
825826
String peerConnectionId = call.argument("peerConnectionId");
826827
List<Map<String, Object>> codecs = call.argument("codecs");
827828
String transceiverId = call.argument("transceiverId");
828829
rtpTransceiverSetCodecPreferences(peerConnectionId, transceiverId, codecs, result);
829830
break;
831+
}
832+
case "getSignalingState": {
833+
String peerConnectionId = call.argument("peerConnectionId");
834+
PeerConnection pc = getPeerConnection(peerConnectionId);
835+
if (pc == null) {
836+
resultError("getSignalingState", "peerConnection is null", result);
837+
} else {
838+
ConstraintsMap params = new ConstraintsMap();
839+
params.putString("state", Utils.signalingStateString(pc.signalingState()));
840+
result.success(params.toMap());
841+
}
842+
break;
843+
}
844+
case "getIceGatheringState": {
845+
String peerConnectionId = call.argument("peerConnectionId");
846+
PeerConnection pc = getPeerConnection(peerConnectionId);
847+
if (pc == null) {
848+
resultError("getIceGatheringState", "peerConnection is null", result);
849+
} else {
850+
ConstraintsMap params = new ConstraintsMap();
851+
params.putString("state", Utils.iceGatheringStateString(pc.iceGatheringState()));
852+
result.success(params.toMap());
853+
}
854+
break;
855+
}
856+
case "getIceConnectionState": {
857+
String peerConnectionId = call.argument("peerConnectionId");
858+
PeerConnection pc = getPeerConnection(peerConnectionId);
859+
if (pc == null) {
860+
resultError("getIceConnectionState", "peerConnection is null", result);
861+
} else {
862+
ConstraintsMap params = new ConstraintsMap();
863+
params.putString("state", Utils.iceConnectionStateString(pc.iceConnectionState()));
864+
result.success(params.toMap());
865+
}
866+
break;
867+
}
868+
case "getConnectionState": {
869+
String peerConnectionId = call.argument("peerConnectionId");
870+
PeerConnection pc = getPeerConnection(peerConnectionId);
871+
if (pc == null) {
872+
resultError("getConnectionState", "peerConnection is null", result);
873+
} A3E2 else {
874+
ConstraintsMap params = new ConstraintsMap();
875+
params.putString("state", Utils.connectionStateString(pc.connectionState()));
876+
result.success(params.toMap());
877+
}
878+
break;
879+
}
830880
default:
831881
if(frameCryptor.handleMethodCall(call, result)) {
832882
break;

android/src/main/java/com/cloudwebrtc/webrtc/PeerConnectionObserver.java

Lines changed: 6 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.cloudwebrtc.webrtc.utils.AnyThreadSink;
99
import com.cloudwebrtc.webrtc.utils.ConstraintsArray;
1010
import com.cloudwebrtc.webrtc.utils.ConstraintsMap;
11+
import com.cloudwebrtc.webrtc.utils.Utils;
1112

1213
import io.flutter.plugin.common.BinaryMessenger;
1314
import io.flutter.plugin.common.EventChannel;
@@ -83,7 +84,7 @@ public void onCancel(Object o) {
8384
eventSink = null;
8485
}
8586

86-
PeerConnection getPeerConnection() {
87+
public PeerConnection getPeerConnection() {
8788
return peerConnection;
8889
}
8990

@@ -333,7 +334,7 @@ public void onIceCandidatesRemoved(final IceCandidate[] candidates) {
333334
public void onIceConnectionChange(PeerConnection.IceConnectionState iceConnectionState) {
334335
ConstraintsMap params = new ConstraintsMap();
335336
params.putString("event", "iceConnectionState");
336-
params.putString("state", iceConnectionStateString(iceConnectionState));
337+
params.putString("state", Utils.iceConnectionStateString(iceConnectionState));
337338
sendEvent(params);
338339
}
339340

@@ -351,7 +352,7 @@ public void onIceGatheringChange(PeerConnection.IceGatheringState iceGatheringSt
351352
Log.d(TAG, "onIceGatheringChange" + iceGatheringState.name());
352353
ConstraintsMap params = new ConstraintsMap();
353354
params.putString("event", "iceGatheringState");
354-
params.putString("state", iceGatheringStateString(iceGatheringState));
355+
params.putString("state", Utils.iceGatheringStateString(iceGatheringState));
355356
sendEvent(params);
356357
}
357358

@@ -572,7 +573,7 @@ public void onRenegotiationNeeded() {
572573
public void onSignalingChange(PeerConnection.SignalingState signalingState) {
573574
ConstraintsMap params = new ConstraintsMap();
574575
params.putString("event", "signalingState");
575-
params.putString("state", signalingStateString(signalingState));
576+
params.putString("state", Utils.signalingStateString(signalingState));
576577
sendEvent(params);
577578
}
578579

@@ -581,82 +582,10 @@ public void onConnectionChange(PeerConnection.PeerConnectionState connectionStat
581582
Log.d(TAG, "onConnectionChange" + connectionState.name());
582583
ConstraintsMap params = new ConstraintsMap();
583584
params.putString("event", "peerConnectionState");
584-
params.putString("state", connectionStateString(connectionState));
585+
params.putString("state", Utils.connectionStateString(connectionState));
585586
sendEvent(params);
586587
}
587588

588-
@Nullable
589-
private String iceConnectionStateString(PeerConnection.IceConnectionState iceConnectionState) {
590-
switch (iceConnectionState) {
591-
case NEW:
592-
return "new";
593-
case CHECKING:
594-
return "checking";
595-
case CONNECTED:
596-
return "connected";
597-
case COMPLETED:
598-
return "completed";
599-
case FAILED:
600-
return "failed";
601-
case DISCONNECTED:
602-
return "disconnected";
603-
case CLOSED:
604-
return "closed";
605-
}
606-
return null;
607-
}
608-
609-
@Nullable
610-
private String iceGatheringStateString(PeerConnection.IceGatheringState iceGatheringState) {
611-
switch (iceGatheringState) {
612-
case NEW:
613-
return "new";
614-
case GATHERING:
615-
return "gathering";
616-
case COMPLETE:
617-
return "complete";
618-
}
619-
return null;
620-
}
621-
622-
@Nullable
623-
private String signalingStateString(PeerConnection.SignalingState signalingState) {
624-
switch (signalingState) {
625-
case STABLE:
626-
return "stable";
627-
case HAVE_LOCAL_OFFER:
628-
return "have-local-offer";
629-
case HAVE_LOCAL_PRANSWER:
630-
return "have-local-pranswer";
631-
case HAVE_REMOTE_OFFER:
632-
return "have-remote-offer";
633-
case HAVE_REMOTE_PRANSWER:
634-
return "have-remote-pranswer";
635-
case CLOSED:
636-
return "closed";
637-
}
638-
return null;
639-
}
640-
641-
@Nullable
642-
private String connectionStateString(PeerConnection.PeerConnectionState connectionState) {
643-
switch (connectionState) {
644-
case NEW:
645-
return "new";
646-
case CONNECTING:
647-
return "connecting";
648-
case CONNECTED:
649-
return "connected";
650-
case DISCONNECTED:
651-
return "disconnected";
652-
case FAILED:
653-
return "failed";
654-
case CLOSED:
655-
return "closed";
656-
}
657-
return null;
658-
}
659-
660589
@Nullable
661590
private String transceiverDirectionString(RtpTransceiver.RtpTransceiverDirection direction) {
662591
switch (direction) {
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package com.cloudwebrtc.webrtc.utils;
2+
3+
import androidx.annotation.Nullable;
4+
5+
import org.webrtc.PeerConnection;
6+
7+
public class Utils {
8+
9+
@Nullable
10+
static public String iceConnectionStateString(PeerConnection.IceConnectionState iceConnectionState) {
11+
switch (iceConnectionState) {
12+
case NEW:
13+
return "new";
14+
case CHECKING:
15+
return "checking";
16+
case CONNECTED:
17+
return "connected";
18+
case COMPLETED:
19+
return "completed";
20+
case FAILED:
21+
return "failed";
22+
case DISCONNECTED:
23+
return "disconnected";
24+
case CLOSED:
25+
return "closed";
26+
}
27+
return null;
28+
}
29+
30+
@Nullable
31+
static public String iceGatheringStateString(PeerConnection.IceGatheringState iceGatheringState) {
32+
switch (iceGatheringState) {
33+
case NEW:
34+
return "new";
35+
case GATHERING:
36+
return "gathering";
37+
case COMPLETE:
38+
return "complete";
39+
}
40+
return null;
41+
}
42+
43+
@Nullable
44+
static public String signalingStateString(PeerConnection.SignalingState signalingState) {
45+
switch (signalingState) {
46+
case STABLE:
47+
return "stable";
48+
case HAVE_LOCAL_OFFER:
49+
return "have-local-offer";
50+
case HAVE_LOCAL_PRANSWER:
51+
return "have-local-pranswer";
52+
case HAVE_REMOTE_OFFER:
53+
return "have-remote-offer";
54+
case HAVE_REMOTE_PRANSWER:
55+
return "have-remote-pranswer";
56+
case CLOSED:
57+
return "closed";
58+
}
59+
return null;
60+
}
61+
62+
@Nullable
63+
static public String connectionStateString(PeerConnection.PeerConnectionState connectionState) {
64+
switch (connectionState) {
65+
case NEW:
66+
return "new";
67+
case CONNECTING:
68+
return "connecting";
69+
case CONNECTED:
70+
return "connected";
71+
case DISCONNECTED:
72+
return "disconnected";
73+
case FAILED:
74+
return "failed";
75+
case CLOSED:
76+
return "closed";
77+
}
78+
return null;
79+
}
80+
}

common/cpp/include/flutter_peerconnection.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,19 @@ class FlutterPeerConnection {
190190
private:
191191
FlutterWebRTCBase* base_;
192192
};
193+
194+
std::string RTCMediaTypeToString(RTCMediaType type);
195+
196+
std::string transceiverDirectionString(RTCRtpTransceiverDirection direction);
197+
198+
const char* iceConnectionStateString(RTCIceConnectionState state);
199+
200+
const char* signalingStateString(RTCSignalingState state);
201+
202+
const char* peerConnectionStateString(RTCPeerConnectionState state);
203+
204+
const char* iceGatheringStateString(RTCIceGatheringState state);
205+
193206
} // namespace flutter_webrtc_plugin
194207

195208
#endif // !FLUTTER_WEBRTC_RTC_PEER_CONNECTION_HXX

0 commit comments

Comments
 (0)
0