即时通讯

即时通讯

对抗疫情,让我们来一场酷酷的在线考试

WebRTC徐凤年 发表了文章 • 0 个评论 • 47 次浏览 • 2021-04-15 15:15 • 来自相关话题

随着移动互联网的迅速发展,手机已经成为了中青年人身体的一部分,他们从起床到睡觉前的最后一分钟都不会离开手。最近几个月,受疫情影响,在线学习和在线考试再次成为互联网上的热门话题。那问题来了,在线学习和考试如何保证学生的学习和考试的质量呢?慢慢的各大网络机构出了各... ...查看全部

随着移动互联网的迅速发展,手机已经成为了中青年人身体的一部分,他们从起床到睡觉前的最后一分钟都不会离开手。最近几个月,受疫情影响,在线学习和在线考试再次成为互联网上的热门话题。

那问题来了,在线学习和考试如何保证学生的学习和考试的质量呢?慢慢的各大网络机构出了各种线上教学线上考试的功能,国家也推出来听课不停学的政策。作为一个 web 端的开发还是很好奇音视频这块功能的。选择了融云做音视频的三方,开启了我的探测路程。

功能构想

(1)学生端做直播 ,1 个学生三个视图( 摄像头采集,屏幕共享,手机端采集)通过融云后台转码合图后推到 CDN ; (2)老师同时订阅并播放多个学生的直播画面,也可查看学生端采集视频的截图或前几分钟录像 ; (3)当老师发现某个学生需要警告或答疑时,老师可以进入单个学生所在房间 ,与学生连麦进行实时通讯。

学生端实现

(1)学生的角色我使用的是“主播”;在多机位拍摄时,需要两个设备,一般是一个 pc,一个移动端;两个端登录应用用一个账号,但是加入融云音视频房间时用两个 uid(此处有些小坑调试了很久才弄明白,pc 端创建并加入直播间,进行音视频推流;之后移动端加入相应的房间,也发送音视频流;(可以关闭麦克风 ,看业务场景需求);调试完毕后 可以正常进行考试。

此处参考的是主播流程文档:https://docs.rongcloud.cn/v3/views/rtc/livevideo/guide/quick/anchor/web.html

(2)学生端在 pc 上通过浏览器登录考试系统;

(3)登录后电脑摄像头采集学生正面实时图像,学生还可以发出屏幕共享 ,手机端登录应用加入相同的考场,摆放在学生身后来捕捉考生整体视图;

(4)学生端应用可以调用融云提供的截图接口随时截图,以便给图像识别模块进行是否作弊的检测;

(5)学生端上传的面部头像,全身图像,屏幕共享图像;会在融云服务器上合成一个流。

教师端实现

(1) 老师的角色是“观众”;订阅多个学生输出的图像整体;观众观看参考的接口文档 :https://docs.rongcloud.cn/v3/views/rtc/livevideo/guide/quick/audience/web.html

(2)当老师发现问题时可以查看指定学生直播流的前几分钟回放,需要开通实时录制,录制在 cdn 处。

(3)当需要警告或答疑时,老师可以进入单个学生所在房间,与学生做实时通讯。加入时可以只发音频。老师警告答疑参考文档:https://docs.rongcloud.cn/v3/views/rtc/livevideo/guide/joinManage/join/web.html

录制留存

(1)可以用融云云端录制;每个学生上传的所有视频流可以合图录制,以满足审查人员在考试后检查学生考试全过程有无作弊等情况。融云云端录制 ,可以上传多家对象存储,可以按需求选择音视频格式参考文档 https://docs.rongcloud.cn/v3/views/rtc/record/intro/guide.html

上图

24954647-204042d8c97b3599.png24954647-1f71b7908bfc0131.png

融云im小程序集成初体验

IM即时通讯大神庵 发表了文章 • 0 个评论 • 60 次浏览 • 2021-04-15 15:15 • 来自相关话题

最近领导让做一个小程序端的聊天功能,基于多方考虑,最终选择了融云的im来实现,那就先写个demo体验下吧。首先呢,当然是查看官方文档,文档地址如下: https://docs.rongcloud.cn/v4/views/im/noui/guide/p... ...查看全部

最近领导让做一个小程序端的聊天功能,基于多方考虑,最终选择了融云的im来实现,那就先写个demo体验下吧。

微信截图_20210415151418.png

首先呢,当然是查看官方文档,文档地址如下: https://docs.rongcloud.cn/v4/views/im/noui/guide/private/setting/include/mini.html

需要注意要在管理后台的小程序服务下将小程序的开关打开,否则会报错,相关的demo也可从后端下载到。

拿到sdk了,我们就可以上手集成了,嘻嘻……

由于是demo,暂时先把appkey和token配置写死了,放在了config.js中,appkey和token可以从管理后台获取到。

其次呢,我们需要把im引入,可以整一个公用的js文件,在此引入im sdk,初始化一个全局的im对象(在此呢需要注意im对象一定是全局的,不能赋值给小程序里面的data值,之前我就犯了错,赋值给了data,导致页面只要一调用setData方法就一直报Converting string to Json的错误,大家可以在集成过程中避雷呢)。

引入代码如下:

const RongIMLib = require("./RongIMLib-3.0.7-dev.js");
const config = require("../public/config");
const imInstance = RongIMLib.init({ appkey: config.appkey});
export {
  RongIMLib,
  config,
  imInstance
}

接着我们创建一个主页面,在这个页面中我们可以建立融云的连接以及获取会话列表。

connect() { 
    if (this.data.isConnect) {
        this.data.im.disconnect();
    }
    imInstance.connect({ token: config.token }).then(user => {
        this.isConnect = true;
        this.getConversationList();
        console.log('链接成功, 链接用户 id 为: ', user);
    }).catch(error => {
    console.log('链接失败: ', error);
 });
},

注意事项:在此需要注意安全域名问题,要不会报错,导致连接不上融云的服务。

1. 开发环境的话,可以在右上角的详情中的本地设置中将不校验合法域名的地方打上对勾。

2. 生产环境的话,可以参考如下地址设置: https://docs.rongcloud.cn/v4/views/im/noui/guide/private/setting/include/mini.html

这样的话就可以连接成功了,哈哈,第一步总算是跨出去了。

接下来我们可以在连接成功后获取会话列表,代码如下:

imInstance.Conversation.getList().then(list => {
  this.setData({
    conversationList: list
  })
}).catch(error => {
  console.log('获取会话列表失败: ', error);
});

点击详情跳转到聊天页面,在此需要注意如果要获取历史记录的话是要开通im商业版-单群聊云存储的。开通后按照api使用说明获取就可以了,代码如下:

getHistory(conversation) {
    const option = {
        timestrap: +new Date(),
        count: 10
        };
        conversation.getMessages(option).then((result) => { 
            var hasMore = result.hasMore; // 是否还有历史消息可以获取
            this.setData({
              messageList: result.list
            })
        });      
}

接下来发送消息等其他接口,正常调用就可以了,和web端sdk基本是一致的,参考官方文档即可,整个集成过程花了两三天吧,还算顺利。有不足之处还望大家多多指教,多多交流……

融云官网地址:https://www.rongcloud.cn/

融云开发文档地址:https://docs.rongcloud.cn/v4/


H5 如何实现直播

WebRTC徐凤年 发表了文章 • 0 个评论 • 45 次浏览 • 2021-04-15 15:15 • 来自相关话题

目前直播大火,在看直播后突然想自己做个直播软件。想了想想自己做下,开始在网上各种找资源。直播嘛,那必然有主播端和观众端。经过一系列的考察后后来找到了融云,使用了他们的 SDK,一共用了无 UI IM 和低延时直播两个 SDK。IM 用了连接和发送消息,选择的是... ...查看全部

微信截图_20210415150543.png

目前直播大火,在看直播后突然想自己做个直播软件。想了想想自己做下,开始在网上各种找资源。直播嘛,那必然有主播端和观众端。经过一系列的考察后后来找到了融云,使用了他们的 SDK,一共用了无 UI IM 和低延时直播两个 SDK。

IM 用了连接和发送消息,选择的是融云的聊天室场景。

低延时直播分了主播端和观众端。使用 H5 作为观众端进行观看,使用 web 端作为主播端进行了直播。

功能点介绍

主播端

按照文档的思路,主播端用的 web 界面,使用的 chrome 浏览器。 涉及到的功能点:

  1. 主播分享视频

  2. 查看观众发的消息

  3. 回复消息

观众端

观众端用的 H5 实现,涉及到的功能点:

  1. 观看主播分享的视频

  2. 发消息

  3. 点赞

额,就是为了体验功能做的简单了些,没有弄那些礼物什么的有些麻烦。

实现思路

主播端

  1. 需要先初始化连接 IM,RTC 两个融云的 SDK,此处参考的快速集成 https://docs.rongcloud.cn/v4/views/rtc/livevideo/guide/quick/premise/web.html

  2. 加入到房间中 https://docs.rongcloud.cn/v4/views/rtc/livevideo/guide/anchorManage/room/web.html#newroom

  3. 发布视频资源供观众查看 https://docs.rongcloud.cn/v4/views/rtc/livevideo/guide/anchorManage/resource/web.html#publish

  4. 配置直播 CDN 推流地址 https://docs.rongcloud.cn/v4/views/rtc/livevideo/guide/manager/pushcdn/web.html

  5. 完成

此处仅给了我认为关键的几个接口,如果大家感兴趣可以自己细看下文档。有些高级的接口这边没有测试,不过看介绍可以设置直播视频的样式。感兴趣的小伙伴按照文档自行研究下吧。

观众端

观众端就很简单了,H5 的观众端仅需要订阅 CDN 推流的地址就可以看到主播的视频流,很方便。

总结

整体做下来大概零零散散用了两三天,UI 也没怎么最求在网上找了个大致的样式做了下。不过整体还好最起码基本的功能实现了。也算是自己做的第一个直播的小 Demo,还是很欣喜的。喜欢的大家可以体验下。


实现类似微信视频聊天的功能

WebRTC赵炳东 发表了文章 • 0 个评论 • 50 次浏览 • 2021-04-15 15:15 • 来自相关话题

前言今年因为疫情的影响,很多线下的项目或者活动都放在了线上,所以集成音视频等相关的话题一直比较火热。 作为一个小码农对微信音视频通话的功能还是比较好奇的,所以空闲的时候就想着自己能不能也实现一个,给朋友一个链接地址然后就可以愉快的视频通话了(小小的满足一下虚荣... ...查看全部

前言

今年因为疫情的影响,很多线下的项目或者活动都放在了线上,所以集成音视频等相关的话题一直比较火热。 作为一个小码农对微信音视频通话的功能还是比较好奇的,所以空闲的时候就想着自己能不能也实现一个,给朋友一个链接地址然后就可以愉快的视频通话了(小小的满足一下虚荣心)

微信截图_20210415151315.png

对于集成音视频纯小白来说,前期准备工作的确不好整,因为对这块没什么概念,对后面需要做什么列不出一个清晰的步骤出来(蓝廋香菇~~~),幸运的是,在网上找相关知识时意外发现了一家做音视频 SDK 的(融云https://www.rongcloud.cn/

为什么推荐他们家呢,主要是他们的开发文档比较适用于像我这样的小白,跟着他们的快速文档无脑实现音视频通话。点这个地址,开启你的音视频之旅吧:https://docs.rongcloud.cn/v4/views/rtc/call/noui/quick/web.html

特别意外的是融云还提供了 Web 端在线集成体验示例,体验完后还能拿到 demo ,附上跳转连接:https://docs.rongcloud.cn/v4/views/rtc/call/noui/demo/web.html

音视频通话介绍 音视频通话 SDK 含呼叫流程,可以实现一对一呼叫、多人呼叫等音视频通话场景,音视频通话 SDK 区别于音视频会议 SDK,音视频通话(呼叫)SDK 不需要双方约定房间号,呼叫流程自动处理房间号,适用于类似微信音视频通话等必须含有呼叫流程的应用场景,由两部分组成 信令通知 和 音视频传输

信令通知:基于 IMLib SDK,例如 A 给 B 发起通话,A 优先会通过 IM 给 B 发送一个通话请求,B 同意后再进入音视频房间进行音视频通信 音视频传输:基于 RongRTCLib SDK,例如 A 给 B 发起通话,信令传输完成后,会适用融云提供的音视频能力进行通信

但是在集成的时候,有几点是需要吐槽的:

1、我给其他人发起通话的时候,直接就触发挂断了返回 "SummaryMessage" 类型消息,咋又看不懂在文档找了半天都没发现 SummaryMessage 的详细描述,只知道是挂断电话返回的消息,最后提交了工单才了解挂断的原因。

Web 端挂断原因 HungupMessage 消息中 reason 字段及 SummaryMessage 消息中 status 字段都为挂断原因

状态码说明状态码说明
1己方取消已发出的通话请求11对方取消已发出的通话请求
2己方拒绝收到的通话请求12对方拒绝收到的通话请求
3己方挂断13对方挂断
4己方忙碌14对方忙碌
5己方未接听15对方未接听
6己方不支持当前引擎16对方不支持当前引擎
7己方网络错误17对方网络错误
8其他设备已处理18CallLib 不可用

原来是对方忙碌导致的接听失败!!!

2、前段时间还能正常通话,升级完 chrome 后就报错了(一脸懵逼 ),报错信息如下: Failed to execute 'setLocalDescription' on 'RTCPeerConnection': Failed to parse SessionDescription. m=video 9 UDP/TLS/RTP/SAVPF 98 99 96 97 100 101 127 Invalid value:

提供单询问融云的技术人员,才知道是由于 chrome 86 升级了 webRTC 的规范,SDK 在 3.2.6 版本做了相关适配。如果 SDK 使用的不是 3.2.6 版本。需要升级至 3.2.6 版本


集成融云即时通讯碰到的一些问题

IM即时通讯赵炳东 发表了文章 • 0 个评论 • 45 次浏览 • 2021-04-15 15:15 • 来自相关话题

前言公司产品需要新增即时通讯的模块,经过调研后使用融云的即时通讯 SDK 由于以前没有做过相关聊天类的项目,在开发的时候碰到了很多坑,下面会将碰到的问题和解决方案记录下来以做备份和学习交流融云官网:https://www.rongcloud.cn/ ... ...查看全部

前言

公司产品需要新增即时通讯的模块,经过调研后使用融云的即时通讯 SDK 由于以前没有做过相关聊天类的项目,在开发的时候碰到了很多坑,下面会将碰到的问题和解决方案记录下来以做备份和学习交流

融云官网:https://www.rongcloud.cn/ 开发文档:https://docs.rongcloud.cn/v4/

问题列表

1、如何获取历史消息

解决方案: 因为 Web 端没有本地存储,不提供本地获取方法,只能从远端获取 使用获取历史消息方法需要在开发者后台开启 IM 商用版 - 单群聊云存储 服务,服务开通后 30 分钟左右生效 每次最多只能获取 20 条历史消息,通过改变参数 timestrap 来获取其他时间段的历史消息

2、删除会话后还有会话

解决方案: 1、删除会话. 正常来说只要没有收发消息, 会话就不会再生成了 2、如果您有清除 localStorage 的操作, 则 SDK 内部会重新拉取离线消息. 而会话列表是根据收发消息生成的. 则会再次产生会话. 所以建议您检查下是否有清除 localStorage 的操作. 如果有, 建议您只清除自己业务相关的 key 3、如果您换端登录, 则会再次收离线消息, 如果希望此时依然不显示删除的消息. 可以在您删除消息后发一条自定义消息比如: (1). 删除会话 A (2). 发送自定义消息, 标识删除了会话 A (3). 换端登录, 重复收之前已收到过的消息 (4). 收消息时收到了步骤 (2) 中发送的删除标识消息, 根据此自定义消息, 再次调用删除会话方法删除会话

3、怎样才能获取到加入群组之前的聊天记录

解决方案: 加入群组,融云默认是获取不到之前的历史消息,如果想获取到之前的历史消息,需要在开发者后台 -- 免费基础功能 中开通 “新用户获取加入群组前历史消息” 服务,服务开通后 30 分钟左右生效

4、消息中的接收方和发送方 ID 为什么是相同的

解决方案: 如果在接收方来查看消息的话,接收方 id 和 发送方 id 是相同的。 消息体中 targetId 表示会话 id (接收方),senderUserId 表示发送方 id ,messageDirection 表示消息方向,发送: 1,接收: 2 如果 A 给 B 发送一条消息,那么在 B 的角度看的话 targetId 为 A,senderUserId 也是 A,只是 messageDirection 为 2 表示接收 在 A 的角度看的话, targetId 为 B,senderUserId 是 A,只是 messageDirection 为 1 表示发送

5、删除历史消息时,参数与文档描述一致,但是结果却返回 33007 表示:未开通历史消息服务,但是开发者后台早已经开通了

解决方案: 因传入了比融云服务器时间还要大的时间, 所以服务返回了此错误码. 如果要保证删除成功, 建议传入会话最后一条消息的 sentTime (发送时间)

6、接收 emoji 显示不出来

解决方案: 1、Web SDK 接收消息后,消息体内的原生 Emoji 字符会被解码为对应 Unicode 码,需调用转化方法才能正确显示 2、不同浏览器, 不同设备, 展示的原生 Emoji 表情都不同 3、如需多端展示 Emoji 一致, 需使用 emojiToHTML 转化为 HTML 后再展示(此方法为以图片形式展示) 4、emojiToHTML 和 symbolToHTML 仅支持默认的 128 个 emoji. 展示更多, 需自行扩展 详情参考:https://docs.rongcloud.cn/v4/views/im/noui/guide/private/msgmanage/msgsend/web.html#emoji

暂时先记录这些,后续还有的话会继续添加进去,也欢迎大家进行补充,一起学习一下,笔芯 ♥️ ♥️ ♥️ !!!


融云发送文件和图片消息

IM即时通讯赵炳东 发表了文章 • 0 个评论 • 50 次浏览 • 2021-04-15 15:15 • 来自相关话题

前段时间集成了web端融云的聊天功能,但是只能发送普通消息,最近产品经理出了新需求,需要把文件发送和图片发送加上,那就撸起袖子走一遍。官方文档说明地址如下: https://docs.rongcloud.cn/v4/views/im/noui/gui... ...查看全部

前段时间集成了web端融云的聊天功能,但是只能发送普通消息,最近产品经理出了新需求,需要把文件发送和图片发送加上,那就撸起袖子走一遍。

微信截图_20210415151151.png

官方文档说明地址如下: https://docs.rongcloud.cn/v4/views/im/noui/guide/group/msgmanage/msgsend/web.html

看过文档之后,才发现发送文件和图片消息是分两步的,首先要实现文件和图片的上传,然后拿到数据后发送消息。融云默认是存储到七牛服务器的,其实也可以上传到自己的服务器,由于是个demo,我暂时就存储到七牛啦。

文件和图片上传

demo地址:https://github.com/rongcloud/rongcloud-web-im-upload,用到的文件可以从以上demo地址中拿到。

上传暂时还不支持npm的引如方式,需要在html中引入上截图中的三个文件,顺序如下:

<script src = "./send-data.js"></script>
<script src = "../upload.js"></script>
<script src="./init.js"></script>

然后在input的change事件中,触发以下方法:

 fileChange(evt, type) {
        this.currentType = type === 'img' ? RongIMLib.FileType.IMAGE : RongIMLib.FileType.FILE;
        const file = evt.target.files[0];
        console.log('file', file);
        if (type === 'img') {
            UploadClient.initImage(this.config, (uploadFile) => { // 上传文件为: UploadClient.initFile
                uploadFile.upload(file, this.uploadCallbacks);
            });
        } else {
            UploadClient.initFile(this.config, (uploadFile) => { 
                uploadFile.upload(file, this.uploadCallbacks);
            });
        }

    },

config配置如下:

config() {
        return {
            domain: 'http://upload.qiniu.com',
            fileType: this.currentType,
            getToken: (callback) => {
                this.rongIMClient.getFileToken(this.currentType , {
                onSuccess: (data) => {
                    callback(data.token);
                },
                onError: () => {
                    console.error('get file token error', error);
                }
                });
            }
        }
    },

成功回调配置如下:

uploadCallbacks() {
        return {
            onProgress: (loaded, total) => {
                const percent = Math.floor(loaded / total * 100);
                console.log('已上传: ', percent);
              },
              onCompleted: (data) => {
                  this.currentFile = data;
                  this.getFileUrl(data);
              },
              onError: (error) => {
                console.error('上传失败', error);
              }
        }
    },

注:如果是图片的话在onCompleted里面通过data.thumbnail是可以拿到图片的缩略图的。 接下来是获取文件或者图片的url,也需要在onComplete回调中获取,代码如下:

   getFileUrl(data) {
        if (data.thumbnail) {
           this.currentFile.base64 = `data:image/jpg;base64,${data.thumbnail`;
        }    
        this.rongIMClient.getFileUrl(this.currentType, data.filename, data.name, {
        onSuccess: (data) => {
            this.currentFile = Object.assign(this.currentFile, data);
            this.sendFileMessage(this.currentType);
            console.log('文件 url 为: ', data);
        },
        onError: function(error) {
            console.log('get file url error', error);
        }
        })
    },

拿到文件或者图片的url之后就可以发送图片或者文件消息了。

文件和图片消息发送

发消息代码如下:

  sendFileMessage(type) {
        let msg = {};
        if (type ===  RongIMLib.FileType.IMAGE) {
            msg = new RongIMLib.ImageMessage({content:  this.currentFile.base64, imageUri: this.currentFile.downloadUrl});
        } else {
            msg = new RongIMLib.FileMessage({name:  this.currentFile.name, size: this.currentFile.size, type: this.currentFile.type, fileUrl: this.currentFile.downloadUrl});
        }
        var conversationType = this.targetUser.conversationType;
        var targetId = this.targetUser.id;  // 目标 Id
        var callback = {
        onSuccess:  (message) => {
            this.handleMessage(message);
        },
        onError:  (errorCode) => {
        }
        };
        this.rongIMClient.sendMessage(conversationType, targetId, msg, callback);
    },

至此,发送图片和文件消息完成,整体算是顺利……

融云官网地址:https://www.rongcloud.cn/


融云im撤回消息

IM即时通讯赵炳东 发表了文章 • 0 个评论 • 42 次浏览 • 2021-04-15 15:15 • 来自相关话题

由于疫情原因,公司基于融云做了个在线的聊天室,之前增加了一些聊天室的基础功能,最近呢由于需求补充,需要把消息撤回加上。 官方文档说明地址: https://docs.rongcloud.cn/v4/views/im/noui/guide/chatro... ...查看全部

由于疫情原因,公司基于融云做了个在线的聊天室,之前增加了一些聊天室的基础功能,最近呢由于需求补充,需要把消息撤回加上。 官方文档说明地址: https://docs.rongcloud.cn/v4/views/im/noui/guide/chatroom/msgmanage/msgrecall/web.html

撤回消息代码如下:

recall() {
         const conversation = this.im.Conversation.get({
            targetId: this.targetUser.id,
            type: this.targetUser.conversationType
          });
          conversation.recall({
            messageUId: this.currentMsg.messageUId,
            sentTime: this.currentMsg.sentTime
          }).then((message) => {
            this.$message.success('撤回成功');
            const msg =  Object.assign({extra: {nickname: this.currentUser.nickname}}, message);
            this.handleMessage(msg, false);
          });
    },

在此要注意,撤回成功之后是不会触发会话的监听的,需要自己在成功的回调里面处理撤回的消息。撤回消息处理代码如下:

if (message.messageType === 'RC:RcCmd') {
            const msg = Object.assign({tip: `${isSelef ? '您':  nickname}撤回了一条消息`}, message);
            if (messageIds.includes(message.content.messageUId)) {
                const index = messageIds.indexOf(message.content.messageUId);
                this.messageList.splice(index, 1, msg);
            } else {
                this.messageList.push(message);
            }
        } else {
            this.messageList.push(message);
        }

当对方在消息监听中收到上述的消息时,也可以调用上述的方法进行撤回消息处理。

撤回消息现在是没有时间限制的,如果要加上时间限制,可以根据消息的sentTime处理。

至此,消息撤回已成功集成。集成中发现了一个问题,撤回的消息在会话列表中还存在,已经给融云提交工单,看后续能不能处理。

融云官网地址:https://www.rongcloud.cn/

融云开发文档地址:https://docs.rongcloud.cn/v4/


快速了解 Electron:基于 Web 跨平台桌面实现 - 即时通讯

IM即时通讯徐凤年 发表了文章 • 0 个评论 • 46 次浏览 • 2021-04-15 15:15 • 来自相关话题

Electron 知识普及目前市面上的通讯软件多数都是支持多种平台的,Android 端、iOS 端、PC 端、Web 端、小程序端等。由于传统的 PC 端开发成本很高。所以今天给大家推荐使用 Electron 来实现 PC 端。Electron 是通过将 C... ...查看全部

Electron 知识普及

目前市面上的通讯软件多数都是支持多种平台的,Android 端、iOS 端、PC 端、Web 端、小程序端等。由于传统的 PC 端开发成本很高。所以今天给大家推荐使用 Electron 来实现 PC 端。

Electron 是通过将 Chromium 和 Node.js 合并到同一个运行时环境中,可以用 HTML、CSS 和 JavaScript 构建跨平台桌面应用程序。

Electron 可以将开发好的程序打包成 Mac、Windows 和 Linux 系统。

Electron 官网 https://www.electronjs.org/

Electron 开发 PC 端的理由

  1. 使用 Web 技术进行开发,开发成本低,可扩展性强;

  2. 跨平台,一套代码可打包为 Windows、Linux、Mac 三套软件;

  3. 可直接在现有 Web 应用上进行扩展;

  4. 提供浏览器不具备的能力;

实现即时通讯

传统 web 端通信多数都是由 websock 或者是长轮询实现的。目前市面上也有很多做即时通讯的三方,例如:融云,网易云等等。我选择的是融云。

融云提供了一个桌面端解决方案,是使用 Electron 实现。不过个人觉得那个版本有些低,但还是试用了下。

下载 Demo 启动起来,Demo 里面给的很简单不过基本的功能还是有的,把 Demo 中的地址换成了我自己的地址还是比较方便的。

此处省略了些实现过程,Electron 使用的是融云提供的 Demo, web 站点是之前集成的融云的 web 端 SDK。 如果大家想要了解可以先看下文档,由于项目中有很多其他模块内容就不再次展示了。

文档地址 https://docs.rongcloud.cn/v4/views/im/noui/guide/quick/include/web.html

由于我们场景就是单群聊,所以用到的核心接口如下。

  1. 初始化连接https://docs.rongcloud.cn/v4/views/im/noui/guide/quick/include/web.html#init

  2. 设置监听https://docs.rongcloud.cn/v4/views/im/noui/guide/quick/include/web.html#listener

  3. 连接融云https://docs.rongcloud.cn/v4/views/im/noui/guide/quick/include/web.html#connect

  4. 发消息https://docs.rongcloud.cn/v4/views/im/noui/guide/quick/include/web.html#send

当时测试时直接用的快速集成中的代码段进行了下修改。还是很方便的。如果需要大家可以自行查看。

结果上图

24954647-5f7d3bbb34d7d453.png

融云集成错误码汇总

IM即时通讯大神庵 发表了文章 • 0 个评论 • 139 次浏览 • 2021-03-18 11:45 • 来自相关话题

最近集成了融云 IM SDK,过程中遇到了错误码,这时需要去 SDK 头文件找到对应的错误码查看原因。下列给大家整理了一下,希望可以帮到大家,如果还有疑问,可以联系融云的技术:30007 : 导航 HTTP 请求失败。建议:更换网络环境,如无法解决,联系服务端... ...查看全部
最近集成了融云 IM SDK,过程中遇到了错误码,这时需要去 SDK 头文件找到对应的错误码查看原因。下列给大家整理了一下,希望可以帮到大家,如果还有疑问,可以联系融云的技术:
微信截图_20210318112905.png

30007 : 导航 HTTP 请求失败。建议:更换网络环境,如无法解决,联系服务端排查(尤其是私有云)' :

31002 : AppKey 错误。请检查您使用的 AppKey 是否正确

30010 : 创建 Socket 连接失败。建议:一般是网络不好,需更换网络试一下。

31004 : Token 无效。建议:一是 token 错误,请您检查客户端初始化使用的 AppKey 和您服务器获取 token 使用的 AppKey 是否一致;二是 token 过期,是因为您在开发者后台设置了 token 过期时间,您需要请求您的服务器重新获取 token 并再次用新的 token 建立连接

31005 : AppKey 与 Token 不匹配。建议:请检查您使用的 AppKey 与 Token 是否正确,是否匹配。一般有以下三种原因。一是 token 错误,请您检查客户端初始化使用的 AppKey 和您服务器获取 token 使用的 AppKey 是否一致;二是 token 过期,是因为您在开发者后台设置了 token 过期时间,您需要请求您的服务器重新获取 token 并再次用新的 token。三是 App 校验未通过,是因为您在开发者后台设置了 App 校验建立连接。

31007 : BundleID 不正确。建议:请检查您 App 的 BundleID 是否正确

31008 : AppKey 被封禁或已删除。建议:请检查您使用的 AppKey 是否被封禁或已删除。

31009 : 用户被封禁。建议:检查您使用的 Token 是否正确,以及对应的 UserId 是否被封禁

31010 : 用户被踢下线。建议:当前用户在其他设备上登录,此设备被踢下线'

31023 : 用户在其它设备上登录。建议:重连过程中当前用户在其它设备上登录

33001 : SDK 没有初始化。建议:在使用 SDK 任何功能之前,必须先 init

33003 : 开发者接口调用时传入的参数错误。建议:请检查接口调用时传入的参数类型和值

34001 : Connection 已经存在。建议:调用过connect之后,只有在 token 错误或者被踢下线或者用户 logout 的情况下才需要再次调用 connect。其它情况下 SDK会自动重连,不需要应用多次调用 connect 来保持连接

34005 : 连接环境不正确。建议:融云公有云 SDK 无法连接到私有云环境。请确认需要连接的环境,使用正确 SDK 版本

34006 : 连接超时。建议:当调用 connectWithToken:timeLimit:dbOpened:success:error: 接口,timeLimit 为有效值时,SDK 在 timeLimit 时间内还没连接成功返回此错误

30011 : Socket 断开。建议:Socket 连接被断开,主要有两种情况,一是用户主动调用 disconnect 之后,Socket 被服务器断开;二是中间路由原因等导致 Socket 断开

30008 : 导航 HTTP 返回数据格式错误。建议:建立连接的临时错误码,SDK 会做好自动重连,开发者无须处理。

30004 : 导航 HTTP 发送失败,是否设置 ATS。建议:如果是偶尔出现此错误,SDK 会做好自动重连,开发者无须处理。如果一直是这个错误,应该是您没有设置好ATS。ATS 默认只使用 HTTPS 协议,当HTTP 协议被禁止时 SDK 会一直 30004 错误。您可以参考 iOS 开发文档中的 ATS 设置说明。链接如下:https://support.rongcloud.cn/ks/OTQ1

30012 : PING 失败。建议:建立连接的临时错误码,SDK 会做好自动重连,开发者无须处理。

30013 : PING 超时。建议:建立连接的临时错误码,SDK 会做好自动重连,开发者无须处理。

30014 : 信令发送失败。建议:建立连接的临时错误码,SDK 会做好自动重连,开发者无须处理。

31000 : 连接 ACK 超时。建议:建立连接的临时错误码,SDK 会做好自动重连,开发者无须处理。

31001 : 信令版本错误。建议:问融云的技术人员吧

31003 : 服务器当前不可用。建议:建立连接的临时错误码,SDK 会做好自动重连,开发者无须处理。

31006 : 连接重定向。建议:建立连接的临时错误码,SDK 会做好自动重连,开发者无须处理。

32061' : 连接被拒绝。建议:建立连接的临时错误码,SDK 会做好自动重连,开发者无须处理。

20604 : 发送消息频率过高,1 秒钟最多只允许发送 5 条消息。建议:多个消息发送的时候中间加个延时

20607 : 请求超出了调用频率限制,请稍后再试。建议:不要多余频繁的调用接口

21406 : 当前用户不在该讨论组中

22406 : 当前用户不在该群组中。建议:到融云开发者后台 API 调用模块对应服务中进行查询

22408 : 当前用户在群组中已被禁言。建议:让开发者服务端人员确认一下是否在群组中

23406 : 当前用户不在该聊天室中。建议:到融云开发者后台 API 调用模块对应服务中进行查询核实

23408 : 当前用户在该聊天室中已被禁言。建议:到融云开发者后台 API 调用模块对应服务中进行查询核实

23409 : 当前用户已被踢出并禁止加入聊天室。被禁止的时间取决于服务端调用踢出接口时传入的时间。

23410 : 聊天室不存在。建议:到融云开发者后台 API 调用模块对应服务中进行查询核实

23411 : 聊天室成员超限,默认聊天室没有人数限制,开发者可以提交工单对某个 Appkey 进行聊天室人数限制,设置后加入聊天室时如果人数超限,会提示这个错误码

23412 : 聊天室接口参数无效。请确认参数是否为空或者有效

23414 : 聊天室云存储业务未开通。建议:到融云开发者后台进行开通

23423 : 超过聊天室的最大状态设置数,1 个聊天室默认最多设置 100 个

23424 : 聊天室中非法覆盖状态值,状态已存在,没有权限覆盖。建议:这个值只有创建者才能修改。如果必须修改,则需要调用 RCIMClient 中forceSetChatRoomEntry:key:value:sendNotification:autoDelete:notificationExtra:success:error:接口。具体请到 RCIMClient 中查看 API

23425 : 超过聊天室中状态设置频率,1 个聊天室 1 秒钟最多设置和删除状态 100 次。建议:降低设置和删除频率

23426 : 聊天室状态存储功能没有开通,请联系商务开通

23427 : 聊天室状态值不存在

26002 : 操作跟服务端同步时出现问题,有可能是操作过于频繁所致。如果出现该错误,请延时 0.5s 再试

34004 : 聊天室状态未同步完成,刚加入聊天室时调用获取 KV 接口,极限情况下会存在本地数据和服务器未同步完成的情况,建议延时一段时间再获取

30001 : 当前连接不可用(连接已经被释放),只能表明当前连接是断开的,具体原因还需要通过其他错误码分析

30002 : 当前连接不可用,只能表明当前连接是断开的,具体原因还需要通过其他错误码分析。建议:可能是网络不可用,请切换网络试一下

30003 : 客户端发送消息请求,融云服务端响应超时。建议:服务器可能有问题

33002 : 数据库错误,造成错误的原因:1. 需要保证连接融云成功并且数据库打开后再调用业务接口,比如发消息。2. userId 中包含特殊字符。

33003 : 开发者接口调用时传入的参数错误。建议:请检查接口调用时传入的参数类型和值

33007 : 历史消息云存储业务未开通。可以在融云开发者后台中开启该服务

30016 : 消息大小超限,消息体(序列化成 json 格式之后的内容)最大 128k bytes。建议:缩小消息体的大小,避免超过 128 k

25101 : 撤回消息参数无效。请确认撤回消息参数是否正确的填写

26001 : push 设置参数无效。请确认是否正确的填写了 push 参数

20605 : 操作被禁止。 此错误码已被弃用

20606 : 操作不支持。仅私有云有效,服务端禁用了该操作。

21501 : 发送的消息中包含敏感词 (发送方发送失败,接收方不会收到消息)

21502 : 消息中敏感词已经被替换 (接收方可以收到被替换之后的消息

34002 : 小视频时间长度超出限制,默认小视频时长上限为 2 分钟。建议:视频不要超过 2 分钟

34003 : GIF 消息文件大小超出限制, 默认 GIF 文件大小上限是 2 MB

34007 : 查询的公共服务信息不存在, 请确认查询的公共服务的类型和公共服务 id 是否匹配

34008 : 消息不能被扩展, 消息在发送时,RCMessage 对象的属性 canIncludeExpansion 置为 YES 才能进行扩展。建议:把RCMessage 对象的属性 canIncludeExpansion 置为 YES

34009 : 消息扩展失败, 一般是网络原因导致的,请确保网络状态良好,并且融云 SDK 连接正常

34010 : 消息扩展大小超出限制, 默认消息扩展字典 key 长度不超过 32 ,value 长度不超过 64 ,单次设置扩展数量最大为 20,消息的扩展总数不能超过 300

34011' : 媒体消息媒体文件 http 上传失败


融云升级到到5.0报错

IM即时通讯大神庵 发表了文章 • 0 个评论 • 103 次浏览 • 2021-03-18 11:45 • 来自相关话题

使用 pod ,从4.x版本升级到 5.x,写法和报错如下写法: [RCIM sharedRCIM].enableBurnMessage = YES; 报错:Property 'enableBurnMessage' not found on o... ...查看全部

使用 pod ,从4.x版本升级到 5.x,写法和报错如下

  1. 写法: [RCIM sharedRCIM].enableBurnMessage = YES; 报错:Property 'enableBurnMessage' not found on object of type 'RCIM *' 解决:把代码改成 RCKitConfigCenter.message.enableDestructMessage = YES; 因为 SDK 把接口从 RCIM 类移到了 RCKitMessageConf 中

  2. 解决完上述属性报错后,出现了以下报错: 报错:Apple Mach-O Linker Error

     ld: library not found for -lopencore-amrnb
     clang: error: linker command failed with exit code 1 (use -v to see invocation)

    解决:TARGETS - Build Settings - Other Linker Flags 里去掉 -l"opencore-amrnb"

  3. 解决完上述报错后,又出现了以下报错: 报错:Apple Mach-O Linker Error

     ld: library not found for -lopencore-amrwb
     clang: error: linker command failed with exit code 1 (use -v to see invocation)

    解决:TARGETS - Build Settings - Other Linker Flags 里去掉 -l"opencore-amrwb"

  4. 解决完上述报错后,又出现了以下报错: 报错:Apple Mach-O Linker Error

     ld: library not found for -lvo-amrwbenc
     clang: error: linker command failed with exit code 1 (use -v to see invocation)

    解决:TARGETS - Build Settings - Other Linker Flags 里去掉 -l"vo-amrwbenc"

希望大家可以活学活用,在报错的时候全局搜一下对应的关键词,看是不是引用的问题导致


融云单聊推送标题如何设置

回复

WebRTC梅川酷子 回复了问题 • 3 人关注 • 1 个回复 • 405 次浏览 • 2020-07-20 16:54 • 来自相关话题

对抗疫情,让我们来一场酷酷的在线考试

WebRTC徐凤年 发表了文章 • 0 个评论 • 47 次浏览 • 2021-04-15 15:15 • 来自相关话题

随着移动互联网的迅速发展,手机已经成为了中青年人身体的一部分,他们从起床到睡觉前的最后一分钟都不会离开手。最近几个月,受疫情影响,在线学习和在线考试再次成为互联网上的热门话题。那问题来了,在线学习和考试如何保证学生的学习和考试的质量呢?慢慢的各大网络机构出了各... ...查看全部

随着移动互联网的迅速发展,手机已经成为了中青年人身体的一部分,他们从起床到睡觉前的最后一分钟都不会离开手。最近几个月,受疫情影响,在线学习和在线考试再次成为互联网上的热门话题。

那问题来了,在线学习和考试如何保证学生的学习和考试的质量呢?慢慢的各大网络机构出了各种线上教学线上考试的功能,国家也推出来听课不停学的政策。作为一个 web 端的开发还是很好奇音视频这块功能的。选择了融云做音视频的三方,开启了我的探测路程。

功能构想

(1)学生端做直播 ,1 个学生三个视图( 摄像头采集,屏幕共享,手机端采集)通过融云后台转码合图后推到 CDN ; (2)老师同时订阅并播放多个学生的直播画面,也可查看学生端采集视频的截图或前几分钟录像 ; (3)当老师发现某个学生需要警告或答疑时,老师可以进入单个学生所在房间 ,与学生连麦进行实时通讯。

学生端实现

(1)学生的角色我使用的是“主播”;在多机位拍摄时,需要两个设备,一般是一个 pc,一个移动端;两个端登录应用用一个账号,但是加入融云音视频房间时用两个 uid(此处有些小坑调试了很久才弄明白,pc 端创建并加入直播间,进行音视频推流;之后移动端加入相应的房间,也发送音视频流;(可以关闭麦克风 ,看业务场景需求);调试完毕后 可以正常进行考试。

此处参考的是主播流程文档:https://docs.rongcloud.cn/v3/views/rtc/livevideo/guide/quick/anchor/web.html

(2)学生端在 pc 上通过浏览器登录考试系统;

(3)登录后电脑摄像头采集学生正面实时图像,学生还可以发出屏幕共享 ,手机端登录应用加入相同的考场,摆放在学生身后来捕捉考生整体视图;

(4)学生端应用可以调用融云提供的截图接口随时截图,以便给图像识别模块进行是否作弊的检测;

(5)学生端上传的面部头像,全身图像,屏幕共享图像;会在融云服务器上合成一个流。

教师端实现

(1) 老师的角色是“观众”;订阅多个学生输出的图像整体;观众观看参考的接口文档 :https://docs.rongcloud.cn/v3/views/rtc/livevideo/guide/quick/audience/web.html

(2)当老师发现问题时可以查看指定学生直播流的前几分钟回放,需要开通实时录制,录制在 cdn 处。

(3)当需要警告或答疑时,老师可以进入单个学生所在房间,与学生做实时通讯。加入时可以只发音频。老师警告答疑参考文档:https://docs.rongcloud.cn/v3/views/rtc/livevideo/guide/joinManage/join/web.html

录制留存

(1)可以用融云云端录制;每个学生上传的所有视频流可以合图录制,以满足审查人员在考试后检查学生考试全过程有无作弊等情况。融云云端录制 ,可以上传多家对象存储,可以按需求选择音视频格式参考文档 https://docs.rongcloud.cn/v3/views/rtc/record/intro/guide.html

上图

24954647-204042d8c97b3599.png24954647-1f71b7908bfc0131.png

融云im小程序集成初体验

IM即时通讯大神庵 发表了文章 • 0 个评论 • 60 次浏览 • 2021-04-15 15:15 • 来自相关话题

最近领导让做一个小程序端的聊天功能,基于多方考虑,最终选择了融云的im来实现,那就先写个demo体验下吧。首先呢,当然是查看官方文档,文档地址如下: https://docs.rongcloud.cn/v4/views/im/noui/guide/p... ...查看全部

最近领导让做一个小程序端的聊天功能,基于多方考虑,最终选择了融云的im来实现,那就先写个demo体验下吧。

微信截图_20210415151418.png

首先呢,当然是查看官方文档,文档地址如下: https://docs.rongcloud.cn/v4/views/im/noui/guide/private/setting/include/mini.html

需要注意要在管理后台的小程序服务下将小程序的开关打开,否则会报错,相关的demo也可从后端下载到。

拿到sdk了,我们就可以上手集成了,嘻嘻……

由于是demo,暂时先把appkey和token配置写死了,放在了config.js中,appkey和token可以从管理后台获取到。

其次呢,我们需要把im引入,可以整一个公用的js文件,在此引入im sdk,初始化一个全局的im对象(在此呢需要注意im对象一定是全局的,不能赋值给小程序里面的data值,之前我就犯了错,赋值给了data,导致页面只要一调用setData方法就一直报Converting string to Json的错误,大家可以在集成过程中避雷呢)。

引入代码如下:

const RongIMLib = require("./RongIMLib-3.0.7-dev.js");
const config = require("../public/config");
const imInstance = RongIMLib.init({ appkey: config.appkey});
export {
  RongIMLib,
  config,
  imInstance
}

接着我们创建一个主页面,在这个页面中我们可以建立融云的连接以及获取会话列表。

connect() { 
    if (this.data.isConnect) {
        this.data.im.disconnect();
    }
    imInstance.connect({ token: config.token }).then(user => {
        this.isConnect = true;
        this.getConversationList();
        console.log('链接成功, 链接用户 id 为: ', user);
    }).catch(error => {
    console.log('链接失败: ', error);
 });
},

注意事项:在此需要注意安全域名问题,要不会报错,导致连接不上融云的服务。

1. 开发环境的话,可以在右上角的详情中的本地设置中将不校验合法域名的地方打上对勾。

2. 生产环境的话,可以参考如下地址设置: https://docs.rongcloud.cn/v4/views/im/noui/guide/private/setting/include/mini.html

这样的话就可以连接成功了,哈哈,第一步总算是跨出去了。

接下来我们可以在连接成功后获取会话列表,代码如下:

imInstance.Conversation.getList().then(list => {
  this.setData({
    conversationList: list
  })
}).catch(error => {
  console.log('获取会话列表失败: ', error);
});

点击详情跳转到聊天页面,在此需要注意如果要获取历史记录的话是要开通im商业版-单群聊云存储的。开通后按照api使用说明获取就可以了,代码如下:

getHistory(conversation) {
    const option = {
        timestrap: +new Date(),
        count: 10
        };
        conversation.getMessages(option).then((result) => { 
            var hasMore = result.hasMore; // 是否还有历史消息可以获取
            this.setData({
              messageList: result.list
            })
        });      
}

接下来发送消息等其他接口,正常调用就可以了,和web端sdk基本是一致的,参考官方文档即可,整个集成过程花了两三天吧,还算顺利。有不足之处还望大家多多指教,多多交流……

融云官网地址:https://www.rongcloud.cn/

融云开发文档地址:https://docs.rongcloud.cn/v4/


H5 如何实现直播

WebRTC徐凤年 发表了文章 • 0 个评论 • 45 次浏览 • 2021-04-15 15:15 • 来自相关话题

目前直播大火,在看直播后突然想自己做个直播软件。想了想想自己做下,开始在网上各种找资源。直播嘛,那必然有主播端和观众端。经过一系列的考察后后来找到了融云,使用了他们的 SDK,一共用了无 UI IM 和低延时直播两个 SDK。IM 用了连接和发送消息,选择的是... ...查看全部

微信截图_20210415150543.png

目前直播大火,在看直播后突然想自己做个直播软件。想了想想自己做下,开始在网上各种找资源。直播嘛,那必然有主播端和观众端。经过一系列的考察后后来找到了融云,使用了他们的 SDK,一共用了无 UI IM 和低延时直播两个 SDK。

IM 用了连接和发送消息,选择的是融云的聊天室场景。

低延时直播分了主播端和观众端。使用 H5 作为观众端进行观看,使用 web 端作为主播端进行了直播。

功能点介绍

主播端

按照文档的思路,主播端用的 web 界面,使用的 chrome 浏览器。 涉及到的功能点:

  1. 主播分享视频

  2. 查看观众发的消息

  3. 回复消息

观众端

观众端用的 H5 实现,涉及到的功能点:

  1. 观看主播分享的视频

  2. 发消息

  3. 点赞

额,就是为了体验功能做的简单了些,没有弄那些礼物什么的有些麻烦。

实现思路

主播端

  1. 需要先初始化连接 IM,RTC 两个融云的 SDK,此处参考的快速集成 https://docs.rongcloud.cn/v4/views/rtc/livevideo/guide/quick/premise/web.html

  2. 加入到房间中 https://docs.rongcloud.cn/v4/views/rtc/livevideo/guide/anchorManage/room/web.html#newroom

  3. 发布视频资源供观众查看 https://docs.rongcloud.cn/v4/views/rtc/livevideo/guide/anchorManage/resource/web.html#publish

  4. 配置直播 CDN 推流地址 https://docs.rongcloud.cn/v4/views/rtc/livevideo/guide/manager/pushcdn/web.html

  5. 完成

此处仅给了我认为关键的几个接口,如果大家感兴趣可以自己细看下文档。有些高级的接口这边没有测试,不过看介绍可以设置直播视频的样式。感兴趣的小伙伴按照文档自行研究下吧。

观众端

观众端就很简单了,H5 的观众端仅需要订阅 CDN 推流的地址就可以看到主播的视频流,很方便。

总结

整体做下来大概零零散散用了两三天,UI 也没怎么最求在网上找了个大致的样式做了下。不过整体还好最起码基本的功能实现了。也算是自己做的第一个直播的小 Demo,还是很欣喜的。喜欢的大家可以体验下。


实现类似微信视频聊天的功能

WebRTC赵炳东 发表了文章 • 0 个评论 • 50 次浏览 • 2021-04-15 15:15 • 来自相关话题

前言今年因为疫情的影响,很多线下的项目或者活动都放在了线上,所以集成音视频等相关的话题一直比较火热。 作为一个小码农对微信音视频通话的功能还是比较好奇的,所以空闲的时候就想着自己能不能也实现一个,给朋友一个链接地址然后就可以愉快的视频通话了(小小的满足一下虚荣... ...查看全部

前言

今年因为疫情的影响,很多线下的项目或者活动都放在了线上,所以集成音视频等相关的话题一直比较火热。 作为一个小码农对微信音视频通话的功能还是比较好奇的,所以空闲的时候就想着自己能不能也实现一个,给朋友一个链接地址然后就可以愉快的视频通话了(小小的满足一下虚荣心)

微信截图_20210415151315.png

对于集成音视频纯小白来说,前期准备工作的确不好整,因为对这块没什么概念,对后面需要做什么列不出一个清晰的步骤出来(蓝廋香菇~~~),幸运的是,在网上找相关知识时意外发现了一家做音视频 SDK 的(融云https://www.rongcloud.cn/

为什么推荐他们家呢,主要是他们的开发文档比较适用于像我这样的小白,跟着他们的快速文档无脑实现音视频通话。点这个地址,开启你的音视频之旅吧:https://docs.rongcloud.cn/v4/views/rtc/call/noui/quick/web.html

特别意外的是融云还提供了 Web 端在线集成体验示例,体验完后还能拿到 demo ,附上跳转连接:https://docs.rongcloud.cn/v4/views/rtc/call/noui/demo/web.html

音视频通话介绍 音视频通话 SDK 含呼叫流程,可以实现一对一呼叫、多人呼叫等音视频通话场景,音视频通话 SDK 区别于音视频会议 SDK,音视频通话(呼叫)SDK 不需要双方约定房间号,呼叫流程自动处理房间号,适用于类似微信音视频通话等必须含有呼叫流程的应用场景,由两部分组成 信令通知 和 音视频传输

信令通知:基于 IMLib SDK,例如 A 给 B 发起通话,A 优先会通过 IM 给 B 发送一个通话请求,B 同意后再进入音视频房间进行音视频通信 音视频传输:基于 RongRTCLib SDK,例如 A 给 B 发起通话,信令传输完成后,会适用融云提供的音视频能力进行通信

但是在集成的时候,有几点是需要吐槽的:

1、我给其他人发起通话的时候,直接就触发挂断了返回 "SummaryMessage" 类型消息,咋又看不懂在文档找了半天都没发现 SummaryMessage 的详细描述,只知道是挂断电话返回的消息,最后提交了工单才了解挂断的原因。

Web 端挂断原因 HungupMessage 消息中 reason 字段及 SummaryMessage 消息中 status 字段都为挂断原因

状态码说明状态码说明
1己方取消已发出的通话请求11对方取消已发出的通话请求
2己方拒绝收到的通话请求12对方拒绝收到的通话请求
3己方挂断13对方挂断
4己方忙碌14对方忙碌
5己方未接听15对方未接听
6己方不支持当前引擎16对方不支持当前引擎
7己方网络错误17对方网络错误
8其他设备已处理18CallLib 不可用

原来是对方忙碌导致的接听失败!!!

2、前段时间还能正常通话,升级完 chrome 后就报错了(一脸懵逼 ),报错信息如下: Failed to execute 'setLocalDescription' on 'RTCPeerConnection': Failed to parse SessionDescription. m=video 9 UDP/TLS/RTP/SAVPF 98 99 96 97 100 101 127 Invalid value:

提供单询问融云的技术人员,才知道是由于 chrome 86 升级了 webRTC 的规范,SDK 在 3.2.6 版本做了相关适配。如果 SDK 使用的不是 3.2.6 版本。需要升级至 3.2.6 版本


集成融云即时通讯碰到的一些问题

IM即时通讯赵炳东 发表了文章 • 0 个评论 • 45 次浏览 • 2021-04-15 15:15 • 来自相关话题

前言公司产品需要新增即时通讯的模块,经过调研后使用融云的即时通讯 SDK 由于以前没有做过相关聊天类的项目,在开发的时候碰到了很多坑,下面会将碰到的问题和解决方案记录下来以做备份和学习交流融云官网:https://www.rongcloud.cn/ ... ...查看全部

前言

公司产品需要新增即时通讯的模块,经过调研后使用融云的即时通讯 SDK 由于以前没有做过相关聊天类的项目,在开发的时候碰到了很多坑,下面会将碰到的问题和解决方案记录下来以做备份和学习交流

融云官网:https://www.rongcloud.cn/ 开发文档:https://docs.rongcloud.cn/v4/

问题列表

1、如何获取历史消息

解决方案: 因为 Web 端没有本地存储,不提供本地获取方法,只能从远端获取 使用获取历史消息方法需要在开发者后台开启 IM 商用版 - 单群聊云存储 服务,服务开通后 30 分钟左右生效 每次最多只能获取 20 条历史消息,通过改变参数 timestrap 来获取其他时间段的历史消息

2、删除会话后还有会话

解决方案: 1、删除会话. 正常来说只要没有收发消息, 会话就不会再生成了 2、如果您有清除 localStorage 的操作, 则 SDK 内部会重新拉取离线消息. 而会话列表是根据收发消息生成的. 则会再次产生会话. 所以建议您检查下是否有清除 localStorage 的操作. 如果有, 建议您只清除自己业务相关的 key 3、如果您换端登录, 则会再次收离线消息, 如果希望此时依然不显示删除的消息. 可以在您删除消息后发一条自定义消息比如: (1). 删除会话 A (2). 发送自定义消息, 标识删除了会话 A (3). 换端登录, 重复收之前已收到过的消息 (4). 收消息时收到了步骤 (2) 中发送的删除标识消息, 根据此自定义消息, 再次调用删除会话方法删除会话

3、怎样才能获取到加入群组之前的聊天记录

解决方案: 加入群组,融云默认是获取不到之前的历史消息,如果想获取到之前的历史消息,需要在开发者后台 -- 免费基础功能 中开通 “新用户获取加入群组前历史消息” 服务,服务开通后 30 分钟左右生效

4、消息中的接收方和发送方 ID 为什么是相同的

解决方案: 如果在接收方来查看消息的话,接收方 id 和 发送方 id 是相同的。 消息体中 targetId 表示会话 id (接收方),senderUserId 表示发送方 id ,messageDirection 表示消息方向,发送: 1,接收: 2 如果 A 给 B 发送一条消息,那么在 B 的角度看的话 targetId 为 A,senderUserId 也是 A,只是 messageDirection 为 2 表示接收 在 A 的角度看的话, targetId 为 B,senderUserId 是 A,只是 messageDirection 为 1 表示发送

5、删除历史消息时,参数与文档描述一致,但是结果却返回 33007 表示:未开通历史消息服务,但是开发者后台早已经开通了

解决方案: 因传入了比融云服务器时间还要大的时间, 所以服务返回了此错误码. 如果要保证删除成功, 建议传入会话最后一条消息的 sentTime (发送时间)

6、接收 emoji 显示不出来

解决方案: 1、Web SDK 接收消息后,消息体内的原生 Emoji 字符会被解码为对应 Unicode 码,需调用转化方法才能正确显示 2、不同浏览器, 不同设备, 展示的原生 Emoji 表情都不同 3、如需多端展示 Emoji 一致, 需使用 emojiToHTML 转化为 HTML 后再展示(此方法为以图片形式展示) 4、emojiToHTML 和 symbolToHTML 仅支持默认的 128 个 emoji. 展示更多, 需自行扩展 详情参考:https://docs.rongcloud.cn/v4/views/im/noui/guide/private/msgmanage/msgsend/web.html#emoji

暂时先记录这些,后续还有的话会继续添加进去,也欢迎大家进行补充,一起学习一下,笔芯 ♥️ ♥️ ♥️ !!!


融云发送文件和图片消息

IM即时通讯赵炳东 发表了文章 • 0 个评论 • 50 次浏览 • 2021-04-15 15:15 • 来自相关话题

前段时间集成了web端融云的聊天功能,但是只能发送普通消息,最近产品经理出了新需求,需要把文件发送和图片发送加上,那就撸起袖子走一遍。官方文档说明地址如下: https://docs.rongcloud.cn/v4/views/im/noui/gui... ...查看全部

前段时间集成了web端融云的聊天功能,但是只能发送普通消息,最近产品经理出了新需求,需要把文件发送和图片发送加上,那就撸起袖子走一遍。

微信截图_20210415151151.png

官方文档说明地址如下: https://docs.rongcloud.cn/v4/views/im/noui/guide/group/msgmanage/msgsend/web.html

看过文档之后,才发现发送文件和图片消息是分两步的,首先要实现文件和图片的上传,然后拿到数据后发送消息。融云默认是存储到七牛服务器的,其实也可以上传到自己的服务器,由于是个demo,我暂时就存储到七牛啦。

文件和图片上传

demo地址:https://github.com/rongcloud/rongcloud-web-im-upload,用到的文件可以从以上demo地址中拿到。

上传暂时还不支持npm的引如方式,需要在html中引入上截图中的三个文件,顺序如下:

<script src = "./send-data.js"></script>
<script src = "../upload.js"></script>
<script src="./init.js"></script>

然后在input的change事件中,触发以下方法:

 fileChange(evt, type) {
        this.currentType = type === 'img' ? RongIMLib.FileType.IMAGE : RongIMLib.FileType.FILE;
        const file = evt.target.files[0];
        console.log('file', file);
        if (type === 'img') {
            UploadClient.initImage(this.config, (uploadFile) => { // 上传文件为: UploadClient.initFile
                uploadFile.upload(file, this.uploadCallbacks);
            });
        } else {
            UploadClient.initFile(this.config, (uploadFile) => { 
                uploadFile.upload(file, this.uploadCallbacks);
            });
        }

    },

config配置如下:

config() {
        return {
            domain: 'http://upload.qiniu.com',
            fileType: this.currentType,
            getToken: (callback) => {
                this.rongIMClient.getFileToken(this.currentType , {
                onSuccess: (data) => {
                    callback(data.token);
                },
                onError: () => {
                    console.error('get file token error', error);
                }
                });
            }
        }
    },

成功回调配置如下:

uploadCallbacks() {
        return {
            onProgress: (loaded, total) => {
                const percent = Math.floor(loaded / total * 100);
                console.log('已上传: ', percent);
              },
              onCompleted: (data) => {
                  this.currentFile = data;
                  this.getFileUrl(data);
              },
              onError: (error) => {
                console.error('上传失败', error);
              }
        }
    },

注:如果是图片的话在onCompleted里面通过data.thumbnail是可以拿到图片的缩略图的。 接下来是获取文件或者图片的url,也需要在onComplete回调中获取,代码如下:

   getFileUrl(data) {
        if (data.thumbnail) {
           this.currentFile.base64 = `data:image/jpg;base64,${data.thumbnail`;
        }    
        this.rongIMClient.getFileUrl(this.currentType, data.filename, data.name, {
        onSuccess: (data) => {
            this.currentFile = Object.assign(this.currentFile, data);
            this.sendFileMessage(this.currentType);
            console.log('文件 url 为: ', data);
        },
        onError: function(error) {
            console.log('get file url error', error);
        }
        })
    },

拿到文件或者图片的url之后就可以发送图片或者文件消息了。

文件和图片消息发送

发消息代码如下:

  sendFileMessage(type) {
        let msg = {};
        if (type ===  RongIMLib.FileType.IMAGE) {
            msg = new RongIMLib.ImageMessage({content:  this.currentFile.base64, imageUri: this.currentFile.downloadUrl});
        } else {
            msg = new RongIMLib.FileMessage({name:  this.currentFile.name, size: this.currentFile.size, type: this.currentFile.type, fileUrl: this.currentFile.downloadUrl});
        }
        var conversationType = this.targetUser.conversationType;
        var targetId = this.targetUser.id;  // 目标 Id
        var callback = {
        onSuccess:  (message) => {
            this.handleMessage(message);
        },
        onError:  (errorCode) => {
        }
        };
        this.rongIMClient.sendMessage(conversationType, targetId, msg, callback);
    },

至此,发送图片和文件消息完成,整体算是顺利……

融云官网地址:https://www.rongcloud.cn/


融云im撤回消息

IM即时通讯赵炳东 发表了文章 • 0 个评论 • 42 次浏览 • 2021-04-15 15:15 • 来自相关话题

由于疫情原因,公司基于融云做了个在线的聊天室,之前增加了一些聊天室的基础功能,最近呢由于需求补充,需要把消息撤回加上。 官方文档说明地址: https://docs.rongcloud.cn/v4/views/im/noui/guide/chatro... ...查看全部

由于疫情原因,公司基于融云做了个在线的聊天室,之前增加了一些聊天室的基础功能,最近呢由于需求补充,需要把消息撤回加上。 官方文档说明地址: https://docs.rongcloud.cn/v4/views/im/noui/guide/chatroom/msgmanage/msgrecall/web.html

撤回消息代码如下:

recall() {
         const conversation = this.im.Conversation.get({
            targetId: this.targetUser.id,
            type: this.targetUser.conversationType
          });
          conversation.recall({
            messageUId: this.currentMsg.messageUId,
            sentTime: this.currentMsg.sentTime
          }).then((message) => {
            this.$message.success('撤回成功');
            const msg =  Object.assign({extra: {nickname: this.currentUser.nickname}}, message);
            this.handleMessage(msg, false);
          });
    },

在此要注意,撤回成功之后是不会触发会话的监听的,需要自己在成功的回调里面处理撤回的消息。撤回消息处理代码如下:

if (message.messageType === 'RC:RcCmd') {
            const msg = Object.assign({tip: `${isSelef ? '您':  nickname}撤回了一条消息`}, message);
            if (messageIds.includes(message.content.messageUId)) {
                const index = messageIds.indexOf(message.content.messageUId);
                this.messageList.splice(index, 1, msg);
            } else {
                this.messageList.push(message);
            }
        } else {
            this.messageList.push(message);
        }

当对方在消息监听中收到上述的消息时,也可以调用上述的方法进行撤回消息处理。

撤回消息现在是没有时间限制的,如果要加上时间限制,可以根据消息的sentTime处理。

至此,消息撤回已成功集成。集成中发现了一个问题,撤回的消息在会话列表中还存在,已经给融云提交工单,看后续能不能处理。

融云官网地址:https://www.rongcloud.cn/

融云开发文档地址:https://docs.rongcloud.cn/v4/


快速了解 Electron:基于 Web 跨平台桌面实现 - 即时通讯

IM即时通讯徐凤年 发表了文章 • 0 个评论 • 46 次浏览 • 2021-04-15 15:15 • 来自相关话题

Electron 知识普及目前市面上的通讯软件多数都是支持多种平台的,Android 端、iOS 端、PC 端、Web 端、小程序端等。由于传统的 PC 端开发成本很高。所以今天给大家推荐使用 Electron 来实现 PC 端。Electron 是通过将 C... ...查看全部

Electron 知识普及

目前市面上的通讯软件多数都是支持多种平台的,Android 端、iOS 端、PC 端、Web 端、小程序端等。由于传统的 PC 端开发成本很高。所以今天给大家推荐使用 Electron 来实现 PC 端。

Electron 是通过将 Chromium 和 Node.js 合并到同一个运行时环境中,可以用 HTML、CSS 和 JavaScript 构建跨平台桌面应用程序。

Electron 可以将开发好的程序打包成 Mac、Windows 和 Linux 系统。

Electron 官网 https://www.electronjs.org/

Electron 开发 PC 端的理由

  1. 使用 Web 技术进行开发,开发成本低,可扩展性强;

  2. 跨平台,一套代码可打包为 Windows、Linux、Mac 三套软件;

  3. 可直接在现有 Web 应用上进行扩展;

  4. 提供浏览器不具备的能力;

实现即时通讯

传统 web 端通信多数都是由 websock 或者是长轮询实现的。目前市面上也有很多做即时通讯的三方,例如:融云,网易云等等。我选择的是融云。

融云提供了一个桌面端解决方案,是使用 Electron 实现。不过个人觉得那个版本有些低,但还是试用了下。

下载 Demo 启动起来,Demo 里面给的很简单不过基本的功能还是有的,把 Demo 中的地址换成了我自己的地址还是比较方便的。

此处省略了些实现过程,Electron 使用的是融云提供的 Demo, web 站点是之前集成的融云的 web 端 SDK。 如果大家想要了解可以先看下文档,由于项目中有很多其他模块内容就不再次展示了。

文档地址 https://docs.rongcloud.cn/v4/views/im/noui/guide/quick/include/web.html

由于我们场景就是单群聊,所以用到的核心接口如下。

  1. 初始化连接https://docs.rongcloud.cn/v4/views/im/noui/guide/quick/include/web.html#init

  2. 设置监听https://docs.rongcloud.cn/v4/views/im/noui/guide/quick/include/web.html#listener

  3. 连接融云https://docs.rongcloud.cn/v4/views/im/noui/guide/quick/include/web.html#connect

  4. 发消息https://docs.rongcloud.cn/v4/views/im/noui/guide/quick/include/web.html#send

当时测试时直接用的快速集成中的代码段进行了下修改。还是很方便的。如果需要大家可以自行查看。

结果上图

24954647-5f7d3bbb34d7d453.png

融云集成错误码汇总

IM即时通讯大神庵 发表了文章 • 0 个评论 • 139 次浏览 • 2021-03-18 11:45 • 来自相关话题

最近集成了融云 IM SDK,过程中遇到了错误码,这时需要去 SDK 头文件找到对应的错误码查看原因。下列给大家整理了一下,希望可以帮到大家,如果还有疑问,可以联系融云的技术:30007 : 导航 HTTP 请求失败。建议:更换网络环境,如无法解决,联系服务端... ...查看全部
最近集成了融云 IM SDK,过程中遇到了错误码,这时需要去 SDK 头文件找到对应的错误码查看原因。下列给大家整理了一下,希望可以帮到大家,如果还有疑问,可以联系融云的技术:
微信截图_20210318112905.png

30007 : 导航 HTTP 请求失败。建议:更换网络环境,如无法解决,联系服务端排查(尤其是私有云)' :

31002 : AppKey 错误。请检查您使用的 AppKey 是否正确

30010 : 创建 Socket 连接失败。建议:一般是网络不好,需更换网络试一下。

31004 : Token 无效。建议:一是 token 错误,请您检查客户端初始化使用的 AppKey 和您服务器获取 token 使用的 AppKey 是否一致;二是 token 过期,是因为您在开发者后台设置了 token 过期时间,您需要请求您的服务器重新获取 token 并再次用新的 token 建立连接

31005 : AppKey 与 Token 不匹配。建议:请检查您使用的 AppKey 与 Token 是否正确,是否匹配。一般有以下三种原因。一是 token 错误,请您检查客户端初始化使用的 AppKey 和您服务器获取 token 使用的 AppKey 是否一致;二是 token 过期,是因为您在开发者后台设置了 token 过期时间,您需要请求您的服务器重新获取 token 并再次用新的 token。三是 App 校验未通过,是因为您在开发者后台设置了 App 校验建立连接。

31007 : BundleID 不正确。建议:请检查您 App 的 BundleID 是否正确

31008 : AppKey 被封禁或已删除。建议:请检查您使用的 AppKey 是否被封禁或已删除。

31009 : 用户被封禁。建议:检查您使用的 Token 是否正确,以及对应的 UserId 是否被封禁

31010 : 用户被踢下线。建议:当前用户在其他设备上登录,此设备被踢下线'

31023 : 用户在其它设备上登录。建议:重连过程中当前用户在其它设备上登录

33001 : SDK 没有初始化。建议:在使用 SDK 任何功能之前,必须先 init

33003 : 开发者接口调用时传入的参数错误。建议:请检查接口调用时传入的参数类型和值

34001 : Connection 已经存在。建议:调用过connect之后,只有在 token 错误或者被踢下线或者用户 logout 的情况下才需要再次调用 connect。其它情况下 SDK会自动重连,不需要应用多次调用 connect 来保持连接

34005 : 连接环境不正确。建议:融云公有云 SDK 无法连接到私有云环境。请确认需要连接的环境,使用正确 SDK 版本

34006 : 连接超时。建议:当调用 connectWithToken:timeLimit:dbOpened:success:error: 接口,timeLimit 为有效值时,SDK 在 timeLimit 时间内还没连接成功返回此错误

30011 : Socket 断开。建议:Socket 连接被断开,主要有两种情况,一是用户主动调用 disconnect 之后,Socket 被服务器断开;二是中间路由原因等导致 Socket 断开

30008 : 导航 HTTP 返回数据格式错误。建议:建立连接的临时错误码,SDK 会做好自动重连,开发者无须处理。

30004 : 导航 HTTP 发送失败,是否设置 ATS。建议:如果是偶尔出现此错误,SDK 会做好自动重连,开发者无须处理。如果一直是这个错误,应该是您没有设置好ATS。ATS 默认只使用 HTTPS 协议,当HTTP 协议被禁止时 SDK 会一直 30004 错误。您可以参考 iOS 开发文档中的 ATS 设置说明。链接如下:https://support.rongcloud.cn/ks/OTQ1

30012 : PING 失败。建议:建立连接的临时错误码,SDK 会做好自动重连,开发者无须处理。

30013 : PING 超时。建议:建立连接的临时错误码,SDK 会做好自动重连,开发者无须处理。

30014 : 信令发送失败。建议:建立连接的临时错误码,SDK 会做好自动重连,开发者无须处理。

31000 : 连接 ACK 超时。建议:建立连接的临时错误码,SDK 会做好自动重连,开发者无须处理。

31001 : 信令版本错误。建议:问融云的技术人员吧

31003 : 服务器当前不可用。建议:建立连接的临时错误码,SDK 会做好自动重连,开发者无须处理。

31006 : 连接重定向。建议:建立连接的临时错误码,SDK 会做好自动重连,开发者无须处理。

32061' : 连接被拒绝。建议:建立连接的临时错误码,SDK 会做好自动重连,开发者无须处理。

20604 : 发送消息频率过高,1 秒钟最多只允许发送 5 条消息。建议:多个消息发送的时候中间加个延时

20607 : 请求超出了调用频率限制,请稍后再试。建议:不要多余频繁的调用接口

21406 : 当前用户不在该讨论组中

22406 : 当前用户不在该群组中。建议:到融云开发者后台 API 调用模块对应服务中进行查询

22408 : 当前用户在群组中已被禁言。建议:让开发者服务端人员确认一下是否在群组中

23406 : 当前用户不在该聊天室中。建议:到融云开发者后台 API 调用模块对应服务中进行查询核实

23408 : 当前用户在该聊天室中已被禁言。建议:到融云开发者后台 API 调用模块对应服务中进行查询核实

23409 : 当前用户已被踢出并禁止加入聊天室。被禁止的时间取决于服务端调用踢出接口时传入的时间。

23410 : 聊天室不存在。建议:到融云开发者后台 API 调用模块对应服务中进行查询核实

23411 : 聊天室成员超限,默认聊天室没有人数限制,开发者可以提交工单对某个 Appkey 进行聊天室人数限制,设置后加入聊天室时如果人数超限,会提示这个错误码

23412 : 聊天室接口参数无效。请确认参数是否为空或者有效

23414 : 聊天室云存储业务未开通。建议:到融云开发者后台进行开通

23423 : 超过聊天室的最大状态设置数,1 个聊天室默认最多设置 100 个

23424 : 聊天室中非法覆盖状态值,状态已存在,没有权限覆盖。建议:这个值只有创建者才能修改。如果必须修改,则需要调用 RCIMClient 中forceSetChatRoomEntry:key:value:sendNotification:autoDelete:notificationExtra:success:error:接口。具体请到 RCIMClient 中查看 API

23425 : 超过聊天室中状态设置频率,1 个聊天室 1 秒钟最多设置和删除状态 100 次。建议:降低设置和删除频率

23426 : 聊天室状态存储功能没有开通,请联系商务开通

23427 : 聊天室状态值不存在

26002 : 操作跟服务端同步时出现问题,有可能是操作过于频繁所致。如果出现该错误,请延时 0.5s 再试

34004 : 聊天室状态未同步完成,刚加入聊天室时调用获取 KV 接口,极限情况下会存在本地数据和服务器未同步完成的情况,建议延时一段时间再获取

30001 : 当前连接不可用(连接已经被释放),只能表明当前连接是断开的,具体原因还需要通过其他错误码分析

30002 : 当前连接不可用,只能表明当前连接是断开的,具体原因还需要通过其他错误码分析。建议:可能是网络不可用,请切换网络试一下

30003 : 客户端发送消息请求,融云服务端响应超时。建议:服务器可能有问题

33002 : 数据库错误,造成错误的原因:1. 需要保证连接融云成功并且数据库打开后再调用业务接口,比如发消息。2. userId 中包含特殊字符。

33003 : 开发者接口调用时传入的参数错误。建议:请检查接口调用时传入的参数类型和值

33007 : 历史消息云存储业务未开通。可以在融云开发者后台中开启该服务

30016 : 消息大小超限,消息体(序列化成 json 格式之后的内容)最大 128k bytes。建议:缩小消息体的大小,避免超过 128 k

25101 : 撤回消息参数无效。请确认撤回消息参数是否正确的填写

26001 : push 设置参数无效。请确认是否正确的填写了 push 参数

20605 : 操作被禁止。 此错误码已被弃用

20606 : 操作不支持。仅私有云有效,服务端禁用了该操作。

21501 : 发送的消息中包含敏感词 (发送方发送失败,接收方不会收到消息)

21502 : 消息中敏感词已经被替换 (接收方可以收到被替换之后的消息

34002 : 小视频时间长度超出限制,默认小视频时长上限为 2 分钟。建议:视频不要超过 2 分钟

34003 : GIF 消息文件大小超出限制, 默认 GIF 文件大小上限是 2 MB

34007 : 查询的公共服务信息不存在, 请确认查询的公共服务的类型和公共服务 id 是否匹配

34008 : 消息不能被扩展, 消息在发送时,RCMessage 对象的属性 canIncludeExpansion 置为 YES 才能进行扩展。建议:把RCMessage 对象的属性 canIncludeExpansion 置为 YES

34009 : 消息扩展失败, 一般是网络原因导致的,请确保网络状态良好,并且融云 SDK 连接正常

34010 : 消息扩展大小超出限制, 默认消息扩展字典 key 长度不超过 32 ,value 长度不超过 64 ,单次设置扩展数量最大为 20,消息的扩展总数不能超过 300

34011' : 媒体消息媒体文件 http 上传失败


融云升级到到5.0报错

IM即时通讯大神庵 发表了文章 • 0 个评论 • 103 次浏览 • 2021-03-18 11:45 • 来自相关话题

使用 pod ,从4.x版本升级到 5.x,写法和报错如下写法: [RCIM sharedRCIM].enableBurnMessage = YES; 报错:Property 'enableBurnMessage' not found on o... ...查看全部

使用 pod ,从4.x版本升级到 5.x,写法和报错如下

  1. 写法: [RCIM sharedRCIM].enableBurnMessage = YES; 报错:Property 'enableBurnMessage' not found on object of type 'RCIM *' 解决:把代码改成 RCKitConfigCenter.message.enableDestructMessage = YES; 因为 SDK 把接口从 RCIM 类移到了 RCKitMessageConf 中

  2. 解决完上述属性报错后,出现了以下报错: 报错:Apple Mach-O Linker Error

     ld: library not found for -lopencore-amrnb
     clang: error: linker command failed with exit code 1 (use -v to see invocation)

    解决:TARGETS - Build Settings - Other Linker Flags 里去掉 -l"opencore-amrnb"

  3. 解决完上述报错后,又出现了以下报错: 报错:Apple Mach-O Linker Error

     ld: library not found for -lopencore-amrwb
     clang: error: linker command failed with exit code 1 (use -v to see invocation)

    解决:TARGETS - Build Settings - Other Linker Flags 里去掉 -l"opencore-amrwb"

  4. 解决完上述报错后,又出现了以下报错: 报错:Apple Mach-O Linker Error

     ld: library not found for -lvo-amrwbenc
     clang: error: linker command failed with exit code 1 (use -v to see invocation)

    解决:TARGETS - Build Settings - Other Linker Flags 里去掉 -l"vo-amrwbenc"

希望大家可以活学活用,在报错的时候全局搜一下对应的关键词,看是不是引用的问题导致