之前再做rtc视频通话的时候,参考的demo代码流程阅读
GitHub - ddssingsong/webrtc_server_java: P2P Webrtc VideoConference 视频通话 视频会议

SocketManager.getInstance().connect(Urls.WS, username, 0);
- 连接 websocket ws://42.192.40.58:5000/ws/lunlian/0
根据用户名,设备,拼接的地址
- 收到服务器发送的登录成功消息
{"eventName":"__login_success","data":{"avatar":"p1.jpeg","userID":"lunlian"}}
启动页收到 登录 成功消息,进入 主界面
- 主界面的 UserListFragment 初始化
获取用户列表 http://42.192.40.58:5000/userList,param = null
- 视频页面
CallSingleActivity.openActivity(getContext(), userBean.getUserId(), true, userBean.getNickName(), false, false);
gEngineKit = SkyEngineKit.Instance();
SkyEngineKit.init(new VoipEvent());
targetId = intent.getStringExtra(EXTRA_TARGET);
isFromFloatingView = intent.getBooleanExtra(EXTRA_FROM_FLOATING_VIEW, false);
isOutgoing = intent.getBooleanExtra(EXTRA_MO, false);
isAudioOnly = intent.getBooleanExtra(EXTRA_AUDIO_ONLY, false);
如果是打出去
- 视频页面 创建会话
room = UUID.randomUUID().toString() + System.currentTimeMillis();
boolean b = gEngineKit.startOutCall(getApplicationContext(), room, targetId, audioOnly);
if (!b) {
finish();
return;
}
App.getInstance().setRoomId(room);
App.getInstance().setOtherUserId(targetId);
CallSession session = gEngineKit.getCurrentSession();
if (session == null) {
finish();
} else {
session.setSessionCallback(this);
}
其中 startOutCall
// 初始化会话
mCurrentCallSession = new CallSession(context, room, audioOnly, mEvent);
mCurrentCallSession.setTargetId(targetId);
mCurrentCallSession.setIsComing(false);
mCurrentCallSession.setCallState(EnumType.CallState.Outgoing);
// 创建房间
mCurrentCallSession.createHome(room, 2);
//CallSession
public CallSession(Context context, String roomId, boolean audioOnly, ISkyEvent event) {
executor = Executors.newSingleThreadExecutor();
this.mIsAudioOnly = audioOnly;
this.mRoomId = roomId;
this.mEvent = event;
iEngine = AVEngine.createEngine(new WebRTCEngine(audioOnly, context));
iEngine.init(this);
}
在 WebRTCEngine中
createConnectionFactory
createLocalStream
mCurrentCallSession.createHome(room, 2);
CallSession
public void createHome(String room, int roomSize) {
executor.execute(() -> {
if (mEvent != null) {
mEvent.createRoom(room, roomSize);
}
});
}
VoipEvent
@Override
public void createRoom(String room, int roomSize) {
SocketManager.getInstance().createRoom(room, roomSize);
}
SocketManager
public void createRoom(String room, int roomSize) {
if (webSocket != null) {
webSocket.createRoom(room, roomSize, myId);
}
}
MyWebSocket
发送,拨打视频电话,发出
public void createRoom(String room, int roomSize, String myId) {
Map map = new HashMap<>();
map.put("eventName", "__create");
Map childMap = new HashMap<>();
childMap.put("room", room);
childMap.put("roomSize", roomSize);
childMap.put("userID", myId);
map.put("data", childMap);
JSONObject object = new JSONObject(map);
final String jsonString = object.toString();
Log.d(TAG, "send-->" + jsonString);
send(jsonString);
}
send-->{"data":{"roomSize":2,"userID":"party","room":"9c2feb88-8f79-400d-aa12-6786a78f13191693378457275"},"eventName":"__create"}
- 收到服务器 __peers事件
{"eventName":"__peers","data":{"roomSize":2,"connections":"","you":"party"}}
MyWebSocket
private void handlePeers(Map map) {
Map data = (Map) map.get("data");
if (data != null) {
String you = (String) data.get("you"); //自已的名字
String connections = (String) data.get("connections");
int roomSize = (int) data.get("roomSize");
this.iEvent.onPeers(you, connections, roomSize);
}
}
SocketManager
@Override // 加入房间
public void onPeers(String myId, String connections, int roomSize) {
handler.post(() -> {
//自己进入了房间,然后开始发送offer
CallSession currentSession = SkyEngineKit.Instance().getCurrentSession();
if (currentSession != null) {
currentSession.onJoinHome(myId, connections, roomSize);
}
});
}
CallSession
public void onJoinHome(String myId, String users, int roomSize) {
if (!mIsComing) { // 发送邀请
if (roomSize == 2) {
List inviteList = new ArrayList<>();
inviteList.add(mTargetId);
mEvent.sendInvite(mRoomId, inviteList, mIsAudioOnly);
}
}
}
- 发送邀请sendInvite
VoipEvent
public void sendInvite(String room, List userIds, boolean audioOnly) {
SocketManager.getInstance().sendInvite(room, userIds, audioOnly);
}
SocketManager
public void sendInvite(String room, List users, boolean audioOnly) {
if (webSocket != null) {
webSocket.sendInvite(room, myId, users, audioOnly);
}
}
MyWebSocket
public void sendInvite(String room, String myId, List users, boolean audioOnly) {
Map map = new HashMap<>();
map.put("eventName", "__invite");
Map childMap = new HashMap<>();
childMap.put("room", room);
childMap.put("audioOnly", audioOnly);
childMap.put("inviteID", myId);
String join = StringUtil.listToString(users);
childMap.put("userList", join);
map.put("data", childMap);
JSONObject object = new JSONObject(map);
final String jsonString = object.toString();
Log.d(TAG, "send-->" + jsonString);
send(jsonString);
}
send-->{"data":{"userList":"likeuuuuuu","inviteID":"party","audioOnly":false,"room":"9c2feb88-8f79-400d-aa12-6786a78f13191693378457275"},"eventName":"__invite"}
- 收到服务器发送的对方已响铃
{"data":{"toID":"party","fromID":"likeuuuuuu","room":"9c2feb88-8f79-400d-aa12-6786a78f13191693378457275"},"eventName":"__ring"}
MyWebSocket
private void handleRing(Map map) {
Map data = (Map) map.get("data");
if (data != null) {
String fromId = (String) data.get("fromID");
this.iEvent.onRing(fromId);
}
}
SocketManager
public void onRing(String fromId) {
handler.post(() -> {
CallSession currentSession = SkyEngineKit.Instance().getCurrentSession();
if (currentSession != null) {
currentSession.onRingBack(fromId);
}
});
}
CallSession
public void onRingBack(String userId) {
if (mEvent != null) {
mEvent.onRemoteRing();
//mEvent.shouldStartRing(false);
}
}
- 对方拒绝
{"data":{"toID":"party","refuseType":"1","fromID":"likeuuuuuu","room":"9c2feb88-8f79-400d-aa12-6786a78f13191693378457275"},"eventName":"__reject"}
MyWebSocket
private void handleReject(Map map) {
Map data = (Map) map.get("data");
if (data != null) {
String fromID = (String

最低0.47元/天 解锁文章
1437

被折叠的 条评论
为什么被折叠?



