乐趣区

关于开源:即时通讯IM开源项目OpenIM每周迭代版本发布音视频实时通话v204

介绍

OpenIM 每周五公布新版,包含新个性公布,bug 修复,同时合并 PR

因为 2.0 版本重构结束,架构更清晰,代码更标准,先邀请各位参加 OpenIM 社区建设,包含技术开发,技术分享等,个性开发,性能优化,bug 修复等,有趣味的同学能够加我私聊。


能够多人音视频聊天,以及多端同步呼叫。

web 端体验:https://open-im-online.rentso…

安卓端体验:https://www.pgyer.com/OpenIM

iOS 端体验:https://testflight.apple.com/…

我的项目成绩

我的项目整体超过 7K star,咱们持续致力争做开源 IM 的领跑者,请大家多多反对。音讯通过通过压测和可靠性测试,请释怀用于生产环境。


性能及容量总结

服务器资源:8 核 16G 内存,6 个机械磁盘,每个磁盘 100G,用于 mongo 分片,10MB 带宽。

容量:用户容量 10 万以上,音讯条数 10 亿条。

性能评估:同时在线用户 10 万,每秒钟发送音讯 900 条,音讯延时 1 秒(从发送者收回音讯到接管到音讯)

可靠性总结

启动 sdk,模仿 50 个用户在线、离线状况,音讯可靠性 100%。

发送 10 万音讯,有 3 条失败,其余音讯都能被对方准确收到,并胜利落地本地 db。对于失败的 3 条音讯,接管方的确没有收到,零碎音讯是统一的。

github 地址:https://github.com/OpenIMSDK/…

开发者核心:https://doc.rentsoft.cn/#/

本周版本 客户端 SDK v2.0.3 && 服务端 v2.0.4

个性 类别
群聊已读,发送者能看到本条音讯哪些人已读,哪些人未读,对于办公场景极为有用 新个性
音视频通话优化,信令通道建设 新个性
音讯发送失败,点击可从新发送 新个性
音讯免打搅,接管但不揭示 新个性
动静表情包增加 新个性
聊天背景设置 新个性
etcd 在 keepalive 失败时容错 bug 修复
聊天记录中昵称和头像实时同步,多端同步 bug 修复
发消息 好友权限验证,可配置 bug 修复
docker 镜像 v2.0.4 已更新,请拉取最新镜像,见文档:https://doc.rentsoft.cn/#/dem…

OpenIM 每周都会迭代公布新版本, 别值得注意的是,版本号的第一位数字代表大版本, 个别是做了协定革新降级,服务器和客户端两者必须放弃大版本统一。

分支阐明:

(1)dev:内部开发者在此分支上提交 pr;

(2)tuoyun:OpenIM 外部专用;

(3)main:最新可用分支;(倡议大家用 tag 版本)

开发中的个性

个性 预计实现工夫
私聊音讯可抉择阅后即焚 3 月 25 日
删除历史记录云端同步 3 月 25 日
群治理:遣散群,禁言,昵称批改等 4 月 1 日
第三方告诉类型:比方 oa 告诉,hr 告诉等 4 月 1 日
音视频通话相干 rtc 信令接口

音视频监听回调阐明

音视频通话监听,在 login 之前调用 SetSignalingListener(callback open_im_sdk_callback.OnSignalingListener)设置

type OnSignalingListener interface {
// 被邀请者收到:音视频通话邀请
OnReceiveNewInvitation(receiveNewInvitationCallback string)
receiveNewInvitationCallback 为
{

"opUserID": "18666662412", 
"invitation": {
    "inviterUserID": "18666662412", 
    "inviteeUserIDList": ["18349115126"], 
    "groupID": "f2e77b9ec33e92298675ad511fdfa6ab", 
    "roomID": "room_id_111", 
    "timeout": 1000, 
    "mediaType": "video", 
    "sessionType": 2
}, 
"offlinePushInfo": {}

}

// 邀请者收到:被邀请者批准音视频通话
OnInviteeAccepted(inviteeAcceptedCallback string)
inviteeAcceptedCallback 为
{
“opUserID”: “18349115126”,
“invitation”: {
“inviterUserID”: “18666662412”,
“inviteeUserIDList”: [“18349115126”],
“groupID”: “f2e77b9ec33e92298675ad511fdfa6ab”,
“roomID”: “room_id_111”,
“timeout”: 1000,
“mediaType”: “video”,
“sessionType”: 2
},
“offlinePushInfo”: {}
}

// 邀请者收到:被邀请者回绝音视频通话
OnInviteeRejected(inviteeRejectedCallback string)
inviteeRejectedCallback 为
{
“opUserID”: “18349115126”,
“invitation”: {
“inviterUserID”: “18666662412”,
“inviteeUserIDList”: [“18349115126”],
“groupID”: “f2e77b9ec33e92298675ad511fdfa6ab”,
“roomID”: “room_id_111”,
“timeout”: 1000,
“mediaType”: “video”,
“sessionType”: 2
},
“offlinePushInfo”: {}
}

// 被邀请者收到:邀请者勾销音视频通话
OnInvitationCancelled(invitationCancelledCallback string)
invitationCancelledCallback 为
{
“opUserID”: “18666662412”,
“invitation”: {

  "inviterUserID": "18666662412", 
  "inviteeUserIDList": ["18349115126"], 
  "roomID": "room_id_111", 
  "timeout": 10, 
  "mediaType": "video", 
  "platformID": 1, 
  "sessionType": 1

},
“offlinePushInfo”: {}
}
// 邀请者收到:被邀请者超时未接通
OnInvitationTimeout(invitationTimeoutCallback string)
invitationTimeoutCallback 为
{
“opUserID”: “18666662412”,
“invitation”: {
“inviterUserID”: “18666662412”,
“inviteeUserIDList”: [“18349115126”],
“roomID”: “room_id_111”,
“timeout”: 10,
“mediaType”: “video”,
“platformID”: 1,
“sessionType”: 1
},
“offlinePushInfo”: {}
}

// 被邀请者(其余端)收到:比方被邀请者在手机拒接,在 pc 上会收到此回调
OnInviteeRejectedByOtherDevice(inviteeRejectedCallback string)
// 被邀请者(其余端)收到:比方被邀请者在手机接听,在 pc 上会收到此回调
OnInviteeAcceptedByOtherDevice(inviteeAcceptedCallback string)

音视频邀请 invitationInfo 构造阐明

音视频邀请相干信息
{
“inviterUserID”: “18666662412”, // 邀请者 UserID
“inviteeUserIDList”: [“18349115126”], // 被邀请者 UserID 列表,如果是单聊只有一个元素
“groupID”: “f2e77b9ec33e92298675ad511fdfa6ab”, // 如果是单聊,为 ””
“roomID”: “room_id_111”, // 房间 ID,必须惟一,能够不设置。
“timeout”: 1000, // 邀请超时工夫(秒)
“mediaType”: “video”, //video 或者 audio
“sessionType”: 2 // 1 为单聊,2 为群聊
“platformID”:1 // 和之前定义统一
}

metadata 是参与者信息具体为
ParticipantMetaData
{
GroupInfo // 为群通话时无效
GroupMemberInfo // 为群通话时无效
PublicUserInfo
}

音视频函数参数及回调阐明

SignalingInvite(callback open_im_sdk_callback.Base, operationID string, signalInviteReq string)
阐明:邀请集体退出音视频
申请参数:
{
“invitation”: {
“inviteeUserIDList”: [“18349115126”], // 只有一个元素
“roomID”: “room_id_111”,
“timeout”: 1000,
“mediaType”: “video”,
“sessionType”: 1,
“platformID”:1
}
“offlinePushInfo”:{}
}

回调:胜利时,OnSuccess 回调
{
“token”: “18666662412”,
“roomID”: “room_id_111”,
“liveURL”: “wss://”
}

SignalingInviteInGroup(callback open_im_sdk_callback.Base, operationID string, signalInviteInGroupReq string)
阐明:邀请群里某些人退出音视频
申请参数
{
“invitation”: {
“inviteeUserIDList”: [“18349115126”],
“groupID”: “f2e77b9ec33e92298675ad511fdfa6ab”,
“roomID”: “room_id_111”,
“timeout”: 1000,
“mediaType”: “video”,
“sessionType”: 2
}
}

回调:胜利时,OnSuccess 回调
{
“token”: “18666662412”,
“roomID”: “room_id_111”,
“liveURL”: “ws://”
}

SignalingAccept(callback open_im_sdk_callback.Base, operationID string, signalAcceptReq string)
阐明:批准某人音视频邀请
申请参数
{

"opUserID": "18349115126", 
"invitation": {
    "inviterUserID": "18666662412", 
    "inviteeUserIDList": ["18349115126"], 
    "groupID": "f2e77b9ec33e92298675ad511fdfa6ab", 
    "roomID": "room_id_111", 
    "timeout": 1000, 
    "mediaType": "video", 
    "sessionType": 2
}

}

回调:胜利时,OnSuccess 回调
OnSuccess
{

"token": "18349115126", 
"roomID": "room_id_111", 
"liveURL": ""

}
SignalingReject(callback open_im_sdk_callback.Base, operationID string, signalRejectReq string)
阐明:回绝某人音视频邀请
申请参数
{

"opUserID": "18349115126", 
"invitation": {
    "inviterUserID": "18666662412", 
    "inviteeUserIDList": ["18349115126"], 
    "groupID": "f2e77b9ec33e92298675ad511fdfa6ab", 
    "roomID": "room_id_111", 
    "timeout": 1000, 
    "mediaType": "video", 
    "sessionType": 2
}

}
回调:胜利时,OnSuccess 回调
OnSuccess{}

SignalingCancel(callback open_im_sdk_callback.Base, operationID string, signalCancelReq string)
阐明:邀请者勾销音视频通话
申请参数
{
“opUserID”: “18666662412”,
“invitation”: {
“inviterUserID”: “18666662412”,
“inviteeUserIDList”: [“18349115126”],
“roomID”: “room_id_111”,
“timeout”: 10,
“mediaType”: “video”,
“platformID”: 1,
“sessionType”: 1
}
}

回调:胜利时,OnSuccess 回调
OnSuccess{}
咱们的团队

开创团队来自前微信技术团队,咱们致力于用开源技术发明服务价值,打造轻量级、高可用的 IM 架构,开发者只需简略调用 SDK,即可在利用内构建多种即时通讯及实时音视频互动场景。无论是电子政务办公,企业协同办公,或者去中心化的 web3 利用,OpenIM 都是最优抉择。对于 IM 最外围的服务端和客户端 SDK,大家能够收费商用,对于带有 UI 版本的客户端,须要商业受权,对于某些高级性能,也须要商业受权。

退出移动版