自定义小视频消息

利用SDK的现有机制可以自定义实现小视频功能,大概实现思路如下:

  1. 先了解下 SDK 的自定义消息机制

  2. 自定义小视频消息也需要继承 RCMessageContent, 根据需要,添加消息属性,如:localPath 是小视频文件本地的存放路径,mediaUrl 是小视频文件上传到文件服务器后的 http/https 地址。其他属性根据自己需要添加,如视频大小,文件名,视频的缩略图等

  3. 小视频的拍摄及播放,RongCloud SDK 没有接口,开发者自己实现。

  4. 当拍摄完成,需要先把视频上传到开发者自己的 appserver,之后构建自定义的视频消息,并调用下面方法发送小视频消息

    //RCIM.h
    
    /*!
    
     发送消息(除图片消息、文件消息外的所有消息),会自动更新UI
    
     @param conversationType 发送消息的会话类型
     @param targetId 发送消息的目标会话ID
     @param content 消息的内容
     @param pushContent 接收方离线时需要显示的远程推送内容
     @param pushData 接收方离线时需要在远程推送中携带的非显示数据
     @param successBlock 消息发送成功的回调 [messageId:消息的ID]
     @param errorBlock 消息发送失败的回调 [nErrorCode:发送失败的错误码, messageId:消息的ID]
    
     @return 发送的消息实体
    
     @discussion 当接收方离线并允许远程推送时,会收到远程推送。
    
     远程推送中包含两部分内容,一是pushContent,用于显示;二是pushData,用于携带不显示的数据。
     SDK内置的消息类型,如果您将pushContent和pushData置为nil,会使用默认的推送格式进行远程推送。
     自定义类型的消息,需要您自己设置pushContent和pushData来定义推送内容,否则将不会进行远程推送。
    
     @warning 如果您使用IMKit,使用此方法发送消息SDK会自动更新UI;
    
     如果您使用IMLib,请使用RCIMClient中的同名方法发送消息,不会自动更新UI。
    
     */
    - (RCMessage *)sendMessage:(RCConversationType)conversationType
     targetId:(NSString *)targetId
     content:(RCMessageContent *)content
     pushContent:(NSString *)pushContent
     pushData:(NSString *)pushData
     success:(void (^)(long messageId))successBlock
     error:(void (^)(RCErrorCode nErrorCode, long messageId))errorBlock;
    

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

  1. 关于缩略图的处理,SDK 没有直接上传一张图片返回一个 url 地址的接口,开发者可以把缩略图上传到自己的服务器,这样缩略图跟 mediaUrl 类似,小视频消息展示缩略图时加载一张网络图片即可。另一种缩略图处理方式类似我们 SDK 发送图片消息时的缩略图处理,把缩略图做 base64 编码,放到自定义消息体中直接传输,这种方式涉及到消息发送时把缩略图转化为 base64 数据和接收到消息时还原为缩略图。

  2. 开发中可能还会遇到小视频文件上传时进度更新的问题, 视频是上传到开发者自己的服务器,因此进度和 UI 都需要开发者自己去同步维护。