no message

webrtc_with_signalr
Zohaib Iqbal Kambrani 4 years ago
parent d54b83358a
commit 7b5a699b69

@ -251,19 +251,20 @@ class Signaling {
Future<void> connect() async { Future<void> connect() async {
if(connectToSignalR){ if(connectToSignalR){
final hub = "https://VCallApi.hmg.com/WebRTCHub?source=web&username=s1"; final hub = "https://VCallApi.hmg.com/WebRTCHub?source=web&username=zik";
signalrUtil = SignalRUtil(hubName: hub); signalrUtil = SignalRUtil(hubName: hub);
signalrUtil.setContributors(caller: "zik", receiver: "s1"); signalrUtil.setContributors(caller: "zik", receiver: "s1");
final connected = await signalrUtil.openConnection(); final connected = await signalrUtil.openConnection();
if(connected){ if(connected){
signalrUtil.callUser("zik", "s1");
signalrUtil.listen( signalrUtil.listen(
onIncomingCall: (user) async{ onIncomingCall: (user) async{
await Future.delayed(Duration(seconds: 1)); await Future.delayed(Duration(seconds: 1));
signalrUtil.acceptCall("s1", "zik"); signalrUtil.acceptCall("zik", "s1");
}, },
onAcceptCall: (user){ onAcceptCall: (user){
print(user.toString()); _initPeerConnection(session, media: "video", screenSharing: false);
}, },
onDeclineCall: (str, user){ onDeclineCall: (str, user){
print(str); print(str);
@ -300,6 +301,17 @@ class Signaling {
await session.pc?.setRemoteDescription(RTCSessionDescription(offerSdp['sdp'], offerSdp['type'])); await session.pc?.setRemoteDescription(RTCSessionDescription(offerSdp['sdp'], offerSdp['type']));
await _createAnswer(session, "video"); await _createAnswer(session, "video");
if (session.remoteCandidates.isNotEmpty) {
session.remoteCandidates.forEach((candidate) async {
await session.pc?.addCandidate(candidate);
});
session.remoteCandidates.clear();
}
onCallStateChange?.call(session, CallState.Calling);
},
onAnswer: (answer_str) async{
final answer = jsonDecode(answer_str);
await session.pc?.setRemoteDescription(RTCSessionDescription(answer['sdp'], answer['type']));
if (session.remoteCandidates.isNotEmpty) { if (session.remoteCandidates.isNotEmpty) {
session.remoteCandidates.forEach((candidate) async { session.remoteCandidates.forEach((candidate) async {
await session.pc?.addCandidate(candidate); await session.pc?.addCandidate(candidate);
@ -390,6 +402,7 @@ class Signaling {
..._iceServers, ..._iceServers,
...{'sdpSemantics': sdpSemantics} ...{'sdpSemantics': sdpSemantics}
}, _config); }, _config);
if (media != 'data') { if (media != 'data') {
switch (sdpSemantics) { switch (sdpSemantics) {
case 'plan-b': case 'plan-b':
@ -456,6 +469,11 @@ class Signaling {
sender.setParameters(parameters); sender.setParameters(parameters);
*/ */
} }
pc.onRenegotiationNeeded = (){
offer("video", false);
};
pc.onIceCandidate = (candidate) async { pc.onIceCandidate = (candidate) async {
if (candidate == null) { if (candidate == null) {
print('onIceCandidate: complete!'); print('onIceCandidate: complete!');
@ -526,9 +544,16 @@ class Signaling {
Future<void> _createOffer(SessionOneToOne session, String media) async { Future<void> _createOffer(SessionOneToOne session, String media) async {
try { try {
RTCSessionDescription s = RTCSessionDescription s =
await session.pc.createOffer(media == 'data' ? _dcConstraints : {}); await session.pc.createOffer(media == 'data' ? _dcConstraints : {});
await session.pc .setLocalDescription(s); await session.pc .setLocalDescription(s);
if(connectToSignalR){
final offer = jsonEncode(s.toMap());
signalrUtil.offer(signalrUtil.sourceUser, signalrUtil.destinationUser, offer);
return;
}
_send('offer', { _send('offer', {
'to': session.remote_user?.id, 'to': session.remote_user?.id,
'from': session.local_user.id, 'from': session.local_user.id,

@ -62,7 +62,7 @@ class SignalRUtil {
await connectionHub.invoke('SendMessage', args: args); //['Bob', 'Says hi!'] await connectionHub.invoke('SendMessage', args: args); //['Bob', 'Says hi!']
} }
listen({Function(CallUser) onAcceptCall, Function(CallUser) onHangupCall, Function(String, CallUser) onDeclineCall, Function(CallUser) onIncomingCall, Function(String, CallUser) onOffer, Function(String) onCandidate}){ listen({Function(CallUser) onAcceptCall, Function(CallUser) onHangupCall, Function(String, CallUser) onDeclineCall, Function(CallUser) onIncomingCall, Function(String, CallUser) onOffer, Function(String) onAnswer, Function(String) onCandidate}){
connectionHub.on('OnIncomingCallAsync', (arguments) { connectionHub.on('OnIncomingCallAsync', (arguments) {
print('OnIncomingCallAsync: ${arguments.toString()}'); print('OnIncomingCallAsync: ${arguments.toString()}');
@ -93,6 +93,11 @@ class SignalRUtil {
onOffer(arguments.first, CallUser.from(arguments.last)); onOffer(arguments.first, CallUser.from(arguments.last));
}); });
connectionHub.on('OnAnswerOffer', (arguments) {
print('OnAnswerOffer: ${arguments.toString()}');
onAnswer(arguments.first);
});
} }
// CallUserAsync(string currentUserId, string targerUserId) // CallUserAsync(string currentUserId, string targerUserId)

Loading…
Cancel
Save