OMCS 开发手册(10) -- 语音短信(类似微信)

  在腾讯微信的功能中,语音留言是非常好用的一个功能,也有许多客户需要在自己的项目/系统中集成这样的功能。OMCS直接提供了对语音短信的支持,使得在自己的项目中实现类似的功能变得非常简单。 OMCS的语音短信功能支持的特性如下:

(1)采集语音短信。

(2)发送语音短信。

(3)接收方触发收到短信的事件。

(4)播放语音短信。

(5)服务端提供接口支持实现离线语音短信。

一. OMCS.Passive.ShortMessages 命名空间

  在客户端,OMCS.Passive.ShortMessages命名空间提供:IShortMessageController接口、ShortMessage类、ShortMessagePlayer组件,通过这三个元素,我们便可以使用OMCS提供的对语音短信功能了。

1. IShortMessageController

  短信控制器(IShortMessageController) 是客户端使用语音留言功能的入口

    public interface IShortMessageController :IDisposable
    {
        /// <summary>
        /// 当接收到目标用户的短信时,触发该事件。
        /// </summary>
        event CbGeneric<ShortMessage> ShortMessageReceived;    

        /// <summary>
        /// 是否已经初始化?
        /// </summary>
        bool Initialized { get; }

        /// <summary>
        /// 是否正在采集短信。
        /// </summary>
        bool IsCapturing { get; }      

        /// <summary>
        /// 初始化短信组件。
        /// 如果不再使用短信组件,则请调用Dispose方法,以释放对设备的占用。
        /// 调用Dispose方法释放后,可以在需要的时候重新调用Initialize,再次进行初始化。
        /// </summary>
        void Initialize();

        /// <summary>
        /// 开始采集短信。
        /// </summary>
        void StartCapture();       

        /// <summary>
        /// 结束采集短信,返回短信的唯一ID。
        /// </summary>        
        ShortMessage StopCapture();

        /// <summary>
        /// 发送短信。短信发送完毕,调用才会返回,如果不想阻塞,可考虑异步调用本方法。
        /// </summary>
        /// <param name="microMessage">短信</param>
        /// <param name="destUserID">接收者ID</param>
        void Send(ShortMessage microMessage, string destUserID);       
    }

(1)我们可以通过OMCS客户端的核心组件 -- 多媒体管理器IMultimediaManagerShortMessageController属性获取短信控制器的引用。 

(2)在使用短信控制器之前,必须先调用其Initialize方法对其进行初始化。

(3)短信控制器初始化完成后,随时可以调用StartCapture方法以开始采集语音短信。

(4)当完成语音短信采集时,即调用StopCapture方法,该方法将返回采集得到的ShortMessage对象。

(5)语音短信采集完成后,可以调用Send方法,将其发送给目标用户。

(6)如果目标用户也连接上了OMCS服务器并完成了短信控制器的初始化,则对方会触发ShortMessageReceived事件,通过事件参数,就可以拿到短信。

(7)得到语音短信后,可以使用ShortMessagePlayer组件来播放短信。 

2. ShortMessage

  ShortMessage 封装了一个语音短信,其类图如下所示:

    

(1)Content 是语音短信的真正内容,即采集得到的数据,这个数据是使用OMCS内部的格式进行压缩组织的,只能由ShortMessagePlayer进行播放。

(2)CreateTime 是短信采集的时间。

(3)CreatorID 即发送者的UserID。

(4)SpanInMSecs 是短信的时长,单位:毫秒。 

3. ShortMessagePlayer

      ShortMessagePlayer 用于播放ShortMessage对象,其类图如下所示:

     

(1)通过构造函数将要播放的ShortMessage对象传递进去,然后,调用Play方法即可开始播放。

(2)如果播放过程中,需要取消播放,则调用Stop方法。

(3)无论是播放完毕,还是取消播放,都会触发PlayFinished事件。 

二. 如何实现离线语音短信

  如果语音短信的接收方不在线,那么,发送的语音短信,他就收不到。那么,如何才能做到当其上线时,把那些漏掉的短信在发送给他了?

       OMCS服务端提供了接口,来实现类似的离线短信的功能。 在服务端IMultimediaServer接口中有两个API与此相关:

         /// <summary>
        /// 当不在线的用户收到短信时,将触发此事件。参数:短信接收者ID - 短信发送者ID - ShortMessage
        /// </summary>
        event CbGeneric<string, string, ShortMessage> ShortMessagePostFailed;

        /// <summary>
        /// 发送短信给目标用户。
        /// </summary>        
        /// <param name="destUserID">短信的接收者ID</param>
        /// <param name="msg">短信</param>
        void SendShortMessage(string destUserID, ShortMessage msg);

(1)当接收方不在线时,服务端IMultimediaServer会触发ShortMessagePostFailed事件。我们可以预定这个事件,将短信的相关信息全部存储到DB中。

(2)当目标用户上线时,我们就从DB中提取属于他的语音短信,然后通过SendShortMessage方法发送给他。

(3)这样,在目标用户客户端,就会触发IShortMessageController的ShortMessageReceived事件了。 

 

下一篇:OMCS FAQ -- OMCS 常见问题解答

上一篇:OMCS 开发手册(09) -- 深入电子白板

--------------------------------------------------------------------------------------------------------------------  

下载免费版本的OMCS以及 demo源码

阅读 更多OMCS开发手册系列文章

Q Q:168757008

官网: www.oraycn.com

导航

首页

官方网站

立即咨询 

站内搜索

ESFramework 通信框架

详细说明

SDK下载

ESFramework FAQ

版本变更记录

OMCS 语音视频框架

详细说明

SDK下载

OMCS FAQ

版本变更记录

OrayTalk 企业即时通讯系统

详细说明

客户端下载

傲瑞实用组件

SDK下载

NPush 消息推送组件

StriveEngine 轻量级的通信引擎

MFile 语音视频录制组件

MCapture 语音视频采集组件

MPlayer 语音视频播放组件

OAUS 自动升级系统

傲瑞组件 FAQ

授权

授权流程

产品授权说明

产品选购指南

授权SDK使用说明

其它

SDK使用技巧

联系我们

电话:027-87638960

Q Q:168757008

邮件:master@oraycn.com