自定义小视频消息

自定义小视频消息
发布时间: 2018-05-08 10:41

回答:

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

1.先了解下 SDK 的自定义消息机制,参考 https://docs.rongcloud.cn/v4/5X/views/im/ui/guide/private/conversation/msgsend/ios.html#createcustom

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 都需要开发者自己去同步维护