Open-IM-Server-Call
說明:
由于OpenIMSDK 的視頻通話功能是閉源的,阻擋了想了解視頻通話功能的伙伴浪藻。
通過分析OpenIMSDK后,給出視頻通話功能的原理和服務器代碼赂蠢。
客戶端的實現(xiàn),參考livekit等恐。
本功能只用于學習交流。
在騰訊云部署了livekit,并用Open-IM-Server(官方9月28號之前的版本)實測過可用。
直接用官方demo可以測試,但是官方demo是閉源的,原理已經(jīng)給出了,涉及客戶端開發(fā)侨嘀,可以自行實現(xiàn)
官方 Open-IM-SDK-Core (客戶端sdk的核心部分) 已經(jīng)包含了音視頻通信部分,
但客戶端demo是閉源的捂襟,所以客戶端可以基于livekit-sdk自行實現(xiàn)視音頻部分(參考livekit,livekit都是開源的)
功能:
實現(xiàn) OpenIMSDK 的視頻通話功能咬腕。
特點:
跟OpenIMSDK 官方一樣基于 開源的視頻服務livekit 實現(xiàn)。
兼容 OpenIMSDK 官方的demo葬荷。
原理:
IM只做用戶信息,好友管理,消息的透傳等涨共。視頻通話是通過livekit實現(xiàn)(webrtc)。
步驟
- A發(fā)起視頻:A發(fā)送SignalReq_Invite 信令(包含房間號,被邀請人)
- 服務器接受信令,創(chuàng)建livekit的token,將token返回給發(fā)起方,同時透傳發(fā)起方的消息給接受方宠漩。
- 接收方收到OnReceiveNewInvitation回調(diào)
- 接收方接受視頻,向服務器發(fā)送SignalReq_Accept 信令举反。
- 服務器接受信令,創(chuàng)建livekit的token,將token返回給接收方,同時透傳接收方的消息給接發(fā)送方。
- 發(fā)起方收到OnInviteeAccepted回調(diào)扒吁。
- 接收方和發(fā)起方通過各自的token進入視頻聊天房間(此過程是見livekit/webrtc)
使用說明
修改配置
rtc:
signalTimeout: 35
#livekit的服務地址
liveURL: wss://www.xxxx.xx:7890
#livekit的key(部署livekit時自定義)
key: xxx
#livekit的secret(部署livekit時自定義)
secret: xxx
代碼目錄
和openim service目錄一致
如:cmd\rpc\open_im_real_time_comm
運行
運行 cmd/rpc/open_im_real_time_comm/main.go
運行后會注冊服務名為:RealTimeComm 的rpc服務火鼻。
修改 OpenIM demo的服務器地址,發(fā)起視頻通話。
問題記錄
問題:missing SignalGetRooms method https://github.com/shoyu666/Open-IM-Server-Call/issues/2#issue-1399210934
解決方案:您可以使用 Open_IM-Server 老的版本
原因:Open_IM-Server 源分支在 9月28號提交的代碼,增加了 SignalGetRooms方法
[提交記錄](https://github.com/OpenIMSDK/Open-IM-Server/commit/249d5e27887391253547519cd177d766e77a7f00#diff-33db5c101b755c6d95d5eb12faa1165ea82556dbe0d5d969ad73f87a6c7eceb7)
需要使用新版的,可以解注釋 rtcLiveKit.go SignalGetRooms 方法魁索。
目前Open_IM-Server版本 SignalGetRooms 方法實際沒有用到,可能后續(xù)版本這個方法會被用到融撞。