介绍

OpenIM每周五发布新版,包括新特性发布,bug修复,同时合并PR

由于2.0版本重构完毕,架构更清晰,代码更规范,先邀请各位参与OpenIM社区建设,包括技术开发,技术分享等,特性开发,性能优化,bug修复等,有兴趣的同学可以加我私聊。

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

web端体验:https://open-im-online.rentsoft.cn/

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

iOS端体验:https://testflight.apple.com/join/79cQqBYd

项目成果

项目整体超过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/Open-IM-Server

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

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

特性 类别
群聊已读,发送者能看到本条消息哪些人已读,哪些人未读,对于办公场景极为有用 新特性
音视频通话优化,信令通道建设 新特性
消息发送失败,点击可重新发送 新特性
消息免打扰,接收但不提醒 新特性
动态表情包添加 新特性
聊天背景设置 新特性
etcd在keepalive失败时容错 bug修复
聊天记录中昵称和头像实时同步,多端同步 bug修复
发消息 好友权限验证 ,可配置 bug修复

docker镜像v2.0.4 已更新,请拉取最新镜像, 见文档:https://doc.rentsoft.cn/#/demo/server_deploy/docker_singe

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版本的客户端,需要商业授权,对于某些高级功能,也需要商业授权。

即时通讯(IM)开源项目OpenIM每周迭代版本发布-音视频实时通话-v2.0.4的更多相关文章

  1. 用EasyClient开源项目采集Windows摄像头/麦克风的音视频进行RTSP直播

    EasyClient是EasyDarwin开源流媒体团队开发的一款功能丰富的开源PC客户端项目,目前支持Windows.Android版本,后续将支持ios版本,其中Windows版本的EasyCli ...

  2. J20航模遥控器开源项目系列教程(一)制作教程 | 基础版V1.0发布,从0到1

    我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/C ...

  3. Github 开源项目(一)websocketd (实战:实时监控服务器内存信息)

    websocketd 是WebSocket守护进程,它负责处理WebSocket连接,启动您的程序来处理WebSockets,并在程序和Web浏览器之间传递消息. 安装:websocketd wget ...

  4. Java 超新星开源项目 Solon v1.10.10 发布

    一个更现代感的 Java 应用开发框架:更快.更小.更自由.主框架仅 0.1 MB.Helloworld: @Controller public class App { public static v ...

  5. XMPP即时通讯协议使用(八)——基于订阅发布实现消息流转业务泳道图

  6. Python 3.9.0 首个迭代版本发布了

    Python 3.9.0 alpha 1 发布了,这是 3.8 之后的首个 3.9 系列版本. ! 官方没有介绍新特性,也没有添加新模块,但是以下模块有所改进: ast asyncio curses ...

  7. 如何基于IM即时通讯SDK从零开发仿微信聊天交友功能

    IM即时通讯技术的发展 IM即时通讯(Instant Messaging)是一种基于互联网的即时交流消息的业务. 实时聊天交互功能是市面上主流APP的重要功能之一,人们所熟悉的就是微信,QQ的聊天消息 ...

  8. 【转】可在广域网部署运行的即时通讯系统 -- GGTalk总览(附源码下载)

    原文地址:http://www.cnblogs.com/justnow/p/3382160.html (最新版本:V6.0,2017.12.11 .即将推出Xamarin移动端版本,包括 Androi ...

  9. 【转】android的一些开源项目

    自己一直很喜欢Android开发,就如博客副标题一样,我想做个好的App. 在摸索过程中,GitHub上搜集了很多很棒的Android第三方库,推荐给在苦苦寻找的开发者,而且我会不定期的更新这篇文章. ...

  10. 即时通讯(III)

    即时通讯的开源库 目前及时通讯可以使用环信.柔云.腾讯云,这些都是基于TCP连接的,UI也是高度定制的,而且它们的技术也是比较成熟的. XMPP比较早,是开源的,但是坑也比较多.传输的数据是XML,造 ...

随机推荐

  1. 对话 BitSail Contributor | 梁奋杰:保持耐心,享受创造

    2022 年 10 月,字节跳动 BitSail 数据引擎正式开源.同期,社区推出 Contributor 激励计划第一期,目前已有 13 位外部开发者为 BitSail 社区做出贡献,成为了首批 B ...

  2. 飞书接入ChatGPT

    飞书接入ChatGPT 前天我用飞书接入了GPT-3,现在终于可以在国内畅通地聊天了. 上面是群聊截图,下面是私聊截图 其实实现过程极其简单,但是我和好兄弟确实绕了不少弯路. 首先提醒: 1 不适合个 ...

  3. 用Python学线性代数:概率密度函数拟合

    问题 如果有一组数据,如何确定他们来自哪个统计分布? 从数据分析的角度,我们并不想要通过严格的统计方法去找到这个分布,Python中有一个可以自动拟合数据分析的库 -- distfit .这是一个py ...

  4. (error) MOVED 12706 10.176.246.204:9736

    使用redis-cli连接上redis后,执行get命令报错: (error) MOVED 12706 10.176.246.204:9736 百度到原因是未以集群模式连接,在连接时加上-c参数就可以 ...

  5. 解读IDC《中国视频云市场跟踪》最新报告,视频云将趋向何方?

    国际权威咨询公司IDC发布<中国视频云市场跟踪(2021 H2)>报告,阿里云连续四年稳居中国视频云整体市场份额第一,整体市场份额占比达26.9%. 时至2021,中国视频云的数字背后 近 ...

  6. 一次惨痛教训让我写了个Windows定期备份文件脚本

    前言 说实话在写这篇文章的时候,咸鱼不禁又想起了那件男默女泪的往事   我喜欢做笔记,我觉得好记性不如烂笔头,所以在我的学生以及职业生涯阶段,我用过四款笔记应用--Onenote.语雀.印象笔记.Ty ...

  7. 自主创新国产化科技:智能制造之 SMT 产线监控管理可视化

    SMT(Surface Mounted Technology,表面贴片技术)指的是在印刷电路板 (Printed Circuit Board,PCB)基础上进行加工的系列工艺流程的简称,是电子组装行业 ...

  8. <vue 组件 3、父子组件相互访问>

    代码结构 一.     01-组件访问-父访问子 1. 效果 点击后在父组件里展示子组件的参数 2.代码 01-组件访问-父访问子.html <!DOCTYPE html> <htm ...

  9. springboot2.0+dubbo-spring-boot-starter聚合项目打可执行的jar包

    springboot2.0+dubbo聚合项目打可执行的jar包 springboot2.0+dubbo-spring-boot-starter项目服务方打包和以前老版本的dubbo打包方式不一样,不 ...

  10. ES 分词器简单应用

    本文为博主原创,未经允许不得转载: 1. ES 分词器 1.1 elasticsearch 默认分词器: standard standard 分词器会将每个英文单词及每个汉字进行单独拆分进行索引 使用 ...