利用SDK的现有机制可以自定义实现小视频功能,大概实现思路如下:
-
先了解下 SDK 的自定义消息机制。
-
自定义小视频消息也需要继承
RCMessageContent
, 根据需要,添加消息属性,如:localPath 是小视频文件本地的存放路径,mediaUrl 是小视频文件上传到文件服务器后的 http/https 地址。其他属性根据自己需要添加,如视频大小,文件名,视频的缩略图等 -
小视频的拍摄及播放,RongCloud SDK 没有接口,开发者自己实现。
-
当拍摄完成,需要先把视频上传到开发者自己的 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;
以上是大致步骤,小视频开发过程中可能遇到的问题,说明如下:
-
关于缩略图的处理,SDK 没有直接上传一张图片返回一个 url 地址的接口,开发者可以把缩略图上传到自己的服务器,这样缩略图跟 mediaUrl 类似,小视频消息展示缩略图时加载一张网络图片即可。另一种缩略图处理方式类似我们 SDK 发送图片消息时的缩略图处理,把缩略图做 base64 编码,放到自定义消息体中直接传输,这种方式涉及到消息发送时把缩略图转化为 base64 数据和接收到消息时还原为缩略图。
-
开发中可能还会遇到小视频文件上传时进度更新的问题, 视频是上传到开发者自己的服务器,因此进度和 UI 都需要开发者自己去同步维护。