一把双刃剑 -- 融云即时通讯sdk中的自定义音讯应用心得&指南 (下)

背景:

最近公司新上的app要加上即时通讯的性能, 本人疾速实现一个当然是不可能的了(我的项目deadline也顶不住哇).就从各家成熟的SDK厂商选来选去的, 各有各的好也各有各的有余.最初点兵点将,选了融云家的SDK(老板说了算hhhh).

他家的官网和文档地址:
官网:https://www.rongcloud.cn/
文档:https://docs.rongcloud.cn/v4

这个工作当然还是落在我的头上. 我是应用的他们家的带UI的sdk,(他们家有带UI和不带UI的两种sdk, 不带UI的sdk就是只有即时通讯能力, 所有的UI都须要开发者自定实现, 带UI的sdk封装了一些根本的界面,例如会话列表, 和他人聊天的会话界面).

心得 (下)

自定义小视频音讯

接上篇对自定义音讯的开发心得哈.

因为融云家自带的小视频音讯是须要免费的, 须要在服务端开明小视频服务后, 同时在端上做一下配置, 才能够应用小视频音讯. 我一看这还得了, 千方百计收我钱呢不是. 不过他家只是对小视频类型的音讯在服务端做了限度, 而不是齐全不让在音讯中携带视频链接. 自定义音讯是轻易自定义的, 那么我自定义一个小视频音讯不就好啦.

大略实现思路如下:

自定义小视频音讯继承MediaMessageContent,其中mLocalPath是小视频文件本地的寄存门路,mMediaUrl是小视频文件上传到文件服务器后的http/https地址。

小视频的拍摄,播放咱们RongCloud SDK没有接口,开发者本人实现。

当拍摄实现,发送小视频音讯时应用办法

sendMediaMessage(final Message message, final String pushContent, final String pushData, final IRongCallback.ISendMediaMessageCallback callback)或者sendMediaMessage(final Message message, final String pushContent, final String pushData, final IRongCallback.ISendMediaMessageCallbackWithUploader callback)

这两个办法的不同是后者开发者负责小视频文件的上传到指定的服务器,前者应用咱们RongCloud默认的文件服务器

以上是大抵步骤,小视频开发过程中可能遇到的问题,阐明如下:

1.对于缩略图的解决,咱们SDK没有间接上传一张图片返回一个url地址的接口,开发者能够把缩略图上传到本人的服务器,这样缩略图跟mMediaUrl相似,小视频音讯展现显示缩略图时加载一张网络图片即可。

另一种缩略图解决形式相似咱们SDK发送图片音讯时的缩略图解决,把缩略图做base64编码,放到自定义音讯体中间接传输,这种形式波及到音讯发送时把缩略图转化为base64数据和接管到音讯时还原为缩略图,在咱们SDK外部应用的是MessageHandler。

对于MessageHandler,咱们RongCloud的每个音讯都有一个MessageHandler,此前咱们文档从没有介绍过这个

MessageHandler,对用户通明的,用户的自定义音讯没有指定它是因为有个默认的DefaultMessageHandler。

自定义音讯时能够指定本人的MessageHandler,例如图片音讯的定义如下

ImageMessage.png

MessageHandler在音讯发送和接管时在IPC过程中会被主动调用,它有两个办法,encodeMessage

和decodeMessage,在音讯接管后调用decodeMessage时开发者能够把base64对应的数据转化为缩略图url,这样在展现缩略图时间接应用url即可。

/** * 解码 {@link MessageContent} 到 {@link Message} 中。 * * @param message 用于寄存 MessageContent 的音讯实体。 * @param content 将要被解码的 MessageContent。 */public abstract void decodeMessage(Message message, T content);/** * 对 {@link Message} 编码。 * * @param message 将要被编码的 Message 实体。 */public abstract void encodeMessage(Message message);

此文档蕴含了两个附件别离为自定义小视频音讯和对应的小视频音讯MessageHandler,供开发者参考

2.开发中可能还会遇到小视频文件上传时进度更新的问题,如果开发者自定义的小视频音讯不继承自MediaMessageContent而是MessageContent,须要本人在UI上保护上传进度