消息类型与文件格式


            
2018-05-08 12:10 | 产品功能介绍

回答:

为了方便讨论,先约定一下概念:

消息:通过融云服务器发送的数据,不同的消息类型对应不同的数据格式。

文件格式(与文件类型完全对等):是指电脑存储信息处理信息的编码方式,每一类信息,都由一种或多种文件格式保存。文件格式通常通过扩展名识别,通过扩展名可关联到对应的程序。


融云提供了高可用的底层通讯能力,并在各端通过 SDK 封装通讯能力给业务上层使用,为了方便所有可能的业务层,根据发送的数据类型做设定了对应的消息类型(文本、图片、语音、文件、地理位置、富文本),为了确保对其他未知形式的支持,还提供了自定义消息的机制,可以由开发者自行扩展。

消息发送示例:https://rongcloud.github.io/websdk-demo/api-test.html 


从通讯层面看,设计文件的消息类型无所谓具体的格式都可以进行正常收发,关键在于接收后的展示处理逻辑,只要展示时才涉及文件格式,也正式因为融云 SDK 对于内置消息类型进行必要的展示处理,所以对于格式就有了严格的限制,具体的限制如下:


1. 图片消息

{

    "imageUri": "http://rongcloud.cn/images/newVersion/log_wx.png", 

    "content": "/9j/4AAQSkZJRg……………………CIAAiAAIn/9k="

}

要求必须提供缩略图 content 和 原图 imageUri

缩略图为 base64 编码的 jpg(不带 base64 前缀),100K 以内;采用 base64 是为了同步显示,避免加载带来的延迟

原图 imageUri 格式不限,只要是业务对应设备范围都支持的格式即可


支持 png、gif 更多格式:可以参考图片消息自定义一个新的图片消息类型,发送和接收后做对应的处理展示逻辑即可,如果业务里延迟不敏感,content 也可以采用 url 异步加载。


2. 语音消息

{

    "content" : "IyFBTVIKLNEafAAeef/hgmeA…………qGzZ6LwtWRTuivFo63U",

    "duration" : 20      //长度,单位为秒

}

要求必须提供语音数据 content 和 语音长度 imageUri

语音数据为 base64 编码的 amr,100K 以内,采用 amr 是因为体积小,可以发送较长语音

长度是为了 UI 显示时不需要提前处理语音文件,渲染高效


支持 mp3、ogg 等更多格式:可以参考语音消息自定义一个新的语音消息类型,因为 mp3 文件较大,也可以考虑 content 使用 url 异步加载,如果需要展示演唱者、封面等信息,也可以设计 singer、album 等字段承载对应信息;最后端上使用对应的解码方式进行播放处理


3. 文件消息

{

     "name" :  '说明.doc',     // 文件名称

     "size" :  "20k",     // 文件大小,单位自己约定

     "type" :  'doc',      // 文件的后缀名,例如 png、js、doc ...

     "fileUrl" : 'http://rongcloud.cn/images/newVersion/intro.doc'     // 文件地址

}

要求必须提供 文件名 name、文件大小 size、文件类型 type、文件下载地址 fileUrl

因为是因为文件名做的下载链接,文件格式不限


扩展:参考文件消息设计新的文件消息类型,可以加入文件封面、作者等信息。


image.png

总之:

  1. 在融云的消息层面,只有一个继承自 socket 的限制,单条消息体(上图里的整体大小)不能大于 128K;上面描述里的大小限制都是通过 128K 反推的经验值。

  2. 消息本身只是通过网络来传播数据,只要处理好编码、发送、接收和解码,通过自定义消息和扩展处理逻辑可以发送任意文件格式。


参考:

Android自定义消息:http://support.rongcloud.cn/kb/Mzg0 

iOS自定义消息:http://support.rongcloud.cn/kb/NTMw 

Web自定义消息:https://rongcloud.github.io/websdk-demo/api-test.html


您认为此回答对您有帮助?

共有 1 位开发者认为此问题有帮助

我对此仍有疑问!继续追问