科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Microsoft实时通信API入门

Microsoft实时通信API入门

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

学习如何使用实时通信(RTC)API创建音频与视频会议、共享应用程序......

作者:wayne编译 来源:yesky 2007年11月4日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

实时通信客户端接口

  需要的头文件: rtccore.h

  增强功能的应用程序获得带有使用CLSID_RTCClient(GUID={7a42ea29-a2b7-40c4-b091-f6f024aa89be})的CoCreateInstance()的实时通信客户端接口。 一旦这个接口可用,Initialize()这个COM对象来判断这个平台的通信会话性能。

//初始化RTC COM对象
hr = CoCreateInstance (CLSID_RTCClient, NULL,
CLSCTX_INPROC_SERVER, IID_IRTCClient,
(LPVOID *)&m_pClient);
//初始化客户端接口
hr = m_pClient->Initialize();

  选择通信类型

  下一步是选择偏爱的通信和相关设备(摄像头和麦克风)的类型。 缺省设置情况是能使用所有的通信类型。 如果通信会话的参与者能够共享应用程序、传递即时消息、声音的和视频,这些性能都能够自动的可用。 如果一个参与者不支持某种特定的通信类型,那么对于所有的会话参与者来说,这种通信类型也是不可用的。

m_pClient->SetPreferredMediaTypes ( RTCMT_ALL, VARIANT_TRUE );

  会话参与者的平台性能和可用带宽决定了使用何种音频与视频编解码器。

  · 视频. Windows实时通信客户端在 1/4CIF图象格式(176×144)分辨率下支持H.261和H.263编解码器。这些可变比特率编解码器发送界于6- 125 Kbps的视频数据。 使用IRTCClient接口方法put_MaxBitRate和put_TemporalSpatialTradeOff可能影响目标的视频转换的空间时间分辨率。

  · 音频. Windows实时通信客户端支持许多种音频编解码器。 音频编解码器是基于终端的连接质量而定的。 下面的表格列出了支持的音频编解码器。

编解码器 采样率 (kHz) 比特率 (Kbps) 帧尺寸 (msec)
G.711 8 64 20
G.722.1 16 24 20
G.723 8 6.4 30, 60, 或 90
GSM 8 13 20
DVI4 8 32 20
SIREN 16 16 20, 或40

  调整通信设备

  选择了通信类型和相关的设备后,就可以调整这些通信设备了。实时通信应用程序接口提供了一个向导,以便更好的调节摄像头和麦克风。 使用RTCClient接口的InvokeTuningWizard()方法来调节它们的设置。

PIC
图2摄像头调节向导

PIC
图3麦克风调节向导

  初始化一个会话

  在应用程序能够与其它参与者连接之前,它必须能够处理在会话期间实时通信fire off的事件。 在PC到PC的通信中,应用程序捕获即时消息、音量强度、媒体、客户端消息和会话状态改变等事件。 下面的代码说明了如何只创建一个事件过滤器来捕获特定的RTC事件类型。

  lEventMask设置了应用程序感兴趣的一组事件。 (如果想要得到一个完整的事件列表,请在MSDN网站上搜索RTC_EVENT以便取得每个事件的详细信息。) CRTCEvents类为附属的客户端发送事件。 RTCEvents对象在应用程序和IRTCEventNotification接口之间创建一个接口。 所有的实时通信事件将由RTCEvents类处理。

//设置事件过滤器来监听RTC事件
//使用RTCEF_ALL监听所有的事件
//对于样例应用程序,我们将说明如何为一个有限的事件集设置事件监听者。
long lEventMask = RTCEF_SESSION_STATE_CHANGE |
RTCEF_MESSAGING |
RTCEF_MEDIA |
RTCEF_INTENSITY |
RTCEF_CLIENT;

hr = m_pClient->put_EventFilter( lEventMask );

//创建事件的接收端对象
m_pEvents = new CRTCEvents;

//初始化事件处理器
hr = m_pEvents->Advise( m_pClient, m_hWnd );

// Set the listen mode for RTC client
// RTCLM_BOTH opens the standard SIP port 5060, as well as
// a dynamic port.
hr = m_pClient->put_ListenForIncomingSessions(RTCLM_BOTH);

  在一个会话期间,音频与视频媒体类型可以被添加也可以被删除,所以客户端必须监听这些事件类型。请参阅本文"处理实时流会话事件"部分获取关于状态改变和事件处理的内容。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章