一把双刃剑 — 融云即时通讯 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 上保护上传进度