OMCS 开发手册(10) -- 语音消息

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

(1)采集语音消息。

(2)发送语音消息。

(3)接收方触发收到消息的事件。

(4)播放语音消息。

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

一. OMCS.Passive.ShortMessages 命名空间

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

1. IAudioMessageController

  语音消息控制器(IAudioMessageController) 是客户端使用语音留言功能的入口

    /// <summary>
    /// 语音消息控制器。
    /// (1)可以采集当前用户麦克风的数据,以构造一个语音消息,并将其发送给目标用户。。   
    /// (2)当收到来自其它用户的语音消息时,将触发AudioMessageReceived事件。 
    /// 注意:当IAudioMessageController完成初始化后,将会持续占用麦克风,直到将IAudioMessageController释放。
    /// </summary>
    public interface IAudioMessageController : IDisposable
    {
        /// <summary>
        /// 当接收到目标用户的语音消息时,触发该事件。
        /// </summary>
        event CbGeneric<AudioMessage> AudioMessageReceived;     

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

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

        /// <summary>
        /// 语音消息播放器。(在IAudioMessageController初始化后,才可使用。)
        /// </summary>
        IAudioMessagePlayer AudioMessagePlayer{ get; }     

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

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

        /// <summary>
        /// 结束采集。
        /// </summary>        
        AudioMessage StopCapture();

        /// <summary>
        /// 发送语音消息。发送完毕,该调用才会返回,如果不想阻塞当前线程,可考虑异步调用本方法。
        /// </summary>
        /// <param name="audioMessage">语音消息</param>
        /// <param name="destUserID">接收者ID</param>
        void Send(AudioMessage audioMessage, string destUserID);       
    }

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

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

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

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

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

(6)如果目标用户也连接上了OMCS服务器,则对方会触发AudioMessageReceived事件,通过事件参数,就可以拿到语音短信。

(7)得到语音短信后,可以使用IAudioMessageController的AudioMessagePlayer组件来播放语音消息。 

2. AudioMessage

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

    

(1)ID 是语音消息编号。该ID在每个客户端实例在运行的过程中是唯一的。(不同的客户端,或客户端重启后,可能会重复)。

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

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

(4)CreatorID 即发送者的UserID。

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

3. IAudioMessagePlayer

      IAudioMessagePlayer 用于播放AudioMessage对象,其类图如下所示:

     

(1)通过IAudioMessageController的AudioMessagePlayer属性,即可得到语音消息播放器对象。(前提是:AudioMessageController完成了初始化)。

(2)调用AudioMessagePlayer的Play方法,即可播放指定的AudioMessage。

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

(4)无论是播放完毕,还是取消播放,都会触发PlayFinished事件,事件参数为刚播放的那个AudioMessage。

(5)如果前一个语音消息还未播放完,就调用Play方法播放下一个AudioMessage,则会触发PlayInterrupted事件,事件参数为中断播放的那个AudioMessage。

(6)如果要增大或减小播放的音量,可以设置声音放大系数 MaxAmplifier。

二. 如何实现离线语音消息

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

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

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

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

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

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

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

 

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

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

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

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

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

Q Q:168757008

官网: www.oraycn.com

导航

首页

官方网站

联系我们

立即咨询 

站内搜索

OrayTalk 企业即时通讯系统

傲瑞通官网

详细说明

客户端下载

OrayMeeting 视频会议系统

详细说明

客户端下载

ESFramework 通信框架

详细说明

SDK与Demo下载

ESFramework FAQ

版本变更记录

OMCS 语音视频框架

详细说明

SDK与Demo下载

OMCS FAQ

版本变更记录

OVCS 视频会议Demo

详细说明

源码下载

傲瑞实用组件

SDK下载

H5Media 纯网页音视频交互

NPusher 推流组件

MCapture 语音视频采集组件

MFile 语音视频录制组件

MPlayer 语音视频播放组件

OAUS 自动升级系统

StriveEngine 轻量级的通信引擎

傲瑞组件 FAQ

授权

授权流程

产品选购指南

授权方案说明

授权SDK使用说明

其它

支持信创国产化

SDK使用技巧

联系我们