亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Microsoft實時通信API入門

2019-11-17 04:51:41
字體:
來源:轉載
供稿:網友
Microsoft實時通信API入門(圖一)  本文提供的方法適合于Microsoft Windows xp 操作系統

  摘要:學習如何使用實時通信(RTC)API創建音頻與視頻會議、共享應用程序、共享白板、簡單的點對點聊天對話以及整合音頻與視頻調節向導的接口。實時通信API為任何基于Microsoft Windows XP的應用程序提供了卓越的基于個人計算機的通信性能--即時消息、音頻與視頻會議、應用程序的共享/協作。

  以實時通信應用程序接口來使用內容豐富的通信是一個簡單的過程。

  1. 增強的客戶端應用程序決定了客戶端通信平臺的功能。

  2. 應用程序在通信會話中選擇使用偏愛的音頻與視頻設備。

  3. 應用程序初始化一個通信會話。

  4. 實時通信層協調數據的獲得、壓縮和傳輸,應用程序傳輸數據,所使用的音頻與視頻編解碼器是根據通信的兩者之間的連接質量決定的。

  5. 會話參與者的應用程序接收解壓并重放發送的數據。

Microsoft實時通信API入門(圖二)
圖⒈音頻/視頻會議的樣例用戶界面

  本文描述如何把基于PC到PC的實時通信添加到一個應用程序中;我們假定你熟悉如何使用COM對象開發Windows應用程序。同時我們在以后的文章中將討論PC到電話、表現以及xml配置。

  樣例代碼說明了使用實時通信(RTC)API的優點,非常方便的產生音頻與視頻會議、共享應用程序、共享白板、簡單的點對點聊天對話以及音頻與視頻調節向導的接口。 但是在本文中不會討論其他的通過實時通信RTC生效的性能,比如聲學回波消除(AEC)、向前糾錯(FEC)、帶寬測定、動態抖動緩沖器治理、自動增益控制(AGC)和質量控制(QC)算法等。上面這些特性請參閱 Media Support in the Microsoft Windows Real-Time Communications Client實時通信客戶端接口

  需要的頭文件: 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.7118 64 20G.722.1 16 24 20G.723 8 6.4 30, 60, 或 90GSM 8 1320DVI48 32 20SIREN 16 16 20, 或40
  調整通信設備

  選擇了通信類型和相關的設備后,就可以調整這些通信設備了。實時通信應用程序接口提供了一個向導,以便更好的調節攝像頭和麥克風。 使用RTCClient接口的InvokeTuningWizard()方法來調節它們的設置。

Microsoft實時通信API入門(圖三)
圖2攝像頭調節向導

Microsoft實時通信API入門(圖四)
圖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);
  在一個會話期間,音頻與視頻媒體類型可以被添加也可以被刪除,所以客戶端必須監聽這些事件類型。請參閱本文"處理實時流會話事件"部分獲取關于狀態改變和事件處理的內容。處理實時通信事件

  一旦事件處理器被IRTCEventNotification接收端注冊,那么接收和處理實時通信事件就非常簡單了。 當實時通信事件被樣例應用程序接收的時候,應用程序的事件處理程序發送一個消息到這個應用程序的消息處理程序。 OnRTCEvent()函數處理所有的由應用程序接收的所有的不同類型的事件。

OnRTCEvent(UINT message, WPARAM wParam, LPARAM lParam)
{

// Based on the RTC_EVENT type, query for the
// appropriate event interface and call a helper
// method to handle the event
switch ( wParam )
{
….
….
….
case RTCE_MEDIA:
{
IRTCMediaEvent * pEvent = NULL;

hr = pDisp->QueryInterface( IID_IRTCMediaEvent,
(void **)&pEvent );

if (SUCCEEDED(hr))
{
OnRTCMediaEvent(pEvent);
SAFE_RELEASE(pEvent);
}
}
break;
….
….
….
}
  創建一個通信會話

  在能夠使用實時通信之前,必須創建和初始化一個通信會話。然后你就可以輸入參與者的IP地址來開始通話了。也可以通過輸入一個電子郵件地址或者一個電話號碼來激活一個通信會話。然而,這個函數需要SIP注冊服務器,這在本文討論范圍之外了。我們將在下篇文章中談談這個話題。

  實時通信不支持多個視頻會議會話同時運行,所以這個應用程序在初始化一個新的會話之前,必須首先檢驗目前沒有運行視頻會議會話。在第一個發行版本中,Windows實時通信客戶端只支持多個電話到電話的通信會話,而不支持多個音頻與視頻或者只有音頻的會議。

  為了與另一臺計算機通話,需要識別實時通信會話類型并創建一個使用IRTCSession接口的會話類型。下面的代碼說明如何創建會話。

HRESULT CAVDConfDlg::MakeCall(RTC_SESSION_TYPE enType, BSTR bstrURI)
{
...

// Create the session
IRTCSession * pSession = NULL;

hr = m_pClient->CreateSession(enType, NULL, NULL, 0, &pSession);

// Add the participant to the session
hr = pSession->AddParticipant(bstrURI, NULL, &m_Participant);

...
return S_OK;
}
  處理實時流會話事件

  根據會話類型,可能有RTC媒體事件、音頻強度事件、即時消息事件和會話狀態改變等。

  媒體事件

  處理媒體事件需要取得媒體類型,然后取得事件類型和原因,然后把消息發送到會話窗口。 應用程序可以使用get_MediaType()方法接收用于音頻、視頻、T120和實時轉送協議(RTP)事件的消息。 樣例應用程序說明了如何檢索媒體事件并且把它傳送到媒體對話框。

void CAVDConfDlg::OnRTCMediaEvent(IRTCMediaEvent *pEvent)
{
...

hr = pEvent->get_MediaType(&lMediaType);

hr = pEvent->get_EventType(&enType);

hr = pEvent->get_EventReason(&enReason);

if ((m_AVDlg) && (m_AVDlg.GetState () != RTCSS_IDLE))
{
// Deliver the media state to the session window
m_AVDlg.DeliverMedia(lMediaType, enType, enReason);
}
}
  強度事件

  強度事件是當揚聲器或者麥克風設備的強度等級改變的時候發生的事件。 應用程序可以使用get_Direction ()函數獲得改變的音頻設備。 一旦設備被確定,應用程序可以取得當前的設備屬性和處理改變。 應用程序可以通過一個滑動器控件或者音量表來向用戶顯示音量大小的改變。


void CAVDConfDlg::OnRTCIntensityEvent(IRTCIntensityEvent *pEvent)
{
...

hr = pEvent->get_Direction(&enDevice);

hr = pEvent->get_Level(&lLevel);

hr = pEvent->get_Min(&lMin);

hr = pEvent->get_Max(&lMax);

if (m_AVDlg.GetState () != RTCSS_IDLE)
{
// Deliver the intensity state to the session window
m_AVDlg.DeliverIntensity(enDevice, lLevel);
}
}
  即時消息事件

  即時報文信息通過IRTCMessagingEvent接口在參與者之間傳送。 當一個消息事件發生時,這個應用程序必須獲得會話和事件類型并且取得會話相關的參與者,以便消息可以被發送到相應的參與者。 事件處理程序也可以處理參與者會話狀態的任何改變。

HRESULT CAVDConfDlg::OnRTCMessagingEvent(IRTCMessagingEvent *pEvent)
{
...

hr = pEvent->get_Session(&pSession);

hr = pEvent->get_EventType(&enType);

hr = pEvent->get_Participant(&pParticipant);

if (enType == RTCMSET_MESSAGE)
{
hr = pEvent->get_MessageHeader(&bstrContentType);

hr = pEvent->get_Message(&bstrMessage);

// Deliver the message to the session window
if (m_cMessageDlg)
m_cMessageDlg.DeliverMessage(pParticipant, bstrContentType,
bstrMessage);

}
else if (enType == RTCMSET_STATUS)
{
hr = pEvent->get_UserStatus(&enStatus);

// Deliver the user status to the session window
m_cMessageDlg.DeliverUserStatus(pParticipant, enStatus);
}
return S_OK;
}
  會話狀態改變事件

  會話狀態改變遵循和其他實時通信事件一樣的過程。 會話狀態改變可能包括設置一個新的音頻/視頻會話或者向客戶端通知一條即時消息即將到來。下面的例程說明當一條通信會話請求被接收時發生了什么;一聲鈴聲通知客戶端請求到來,請求被應答,然后通信會話開始。

Void CAVDConfDlg::OnRTCSessionStateChangeEvent(IRTCSessionStateChangeEvent
*pEvent)
{
...

hr = pEvent->get_State(&enState);

hr = pEvent->get_Session(&pSession);

switch ( enState )
{
case RTCSS_INCOMING:
{
...

// This event is called when an incoming call occurs
RTC_SESSION_TYPE enType;

hr = pSession->get_Type(&enType);

// Ring the bell
m_pClient->PlayRing(RTCRT_PHONE, VARIANT_TRUE);

// Accept the session
hr = pSession->Answer();
}
}
...
}
  共享應用程序

  啟動T120應用程序共享就象調用IRTCClient接口相關的StartT120Applet方法一樣簡單。

hr = m_pClient->StartT120Applet ( RTCTA_APPSHARING );
  支持白板

  為了添加白板支持到應用程序中,需要使用RTCTA_WHITEBOARD枚舉調用StartT120Applet方法。
hr = m_pClient->StartT120Applet ( RTCTA_WHITEBOARD );

  結束會話

  為了結束一個通信會話,所有運行的應用程序必須被關閉。然后實時通信客戶端接口調用ShutDown()和完成結束通信會話的過程。

  平臺性能

  使用實時通信的豐富客戶端通信特點需要一個有合適性能的處理器。 在下面例程中,在運行實時通信性能的時候使用一個1 GHz的 Pentium? III處理器和一個2.2 GHz的Pentium 4來測定處理器使用率。 下面的表格給出了使用本文中提到的實時通信性能的處理器使用率的百分率。

任務 2.2-GHz 的Pentium 4處理器 (% CPU使用率)1 1.0-GHz的Pentium III 處理器 (% CPU 使用率)2只使用音頻/視頻會議9% 22%添加應用程序(共享IE) 10%
35%添加白板 12% 37%添加即時消息12% 37%
  注1 Pentium 4處理器平臺配置:Intel Desktop Board D850MV; 256MB PC800 RDRAM,板載的聲卡,nVidia GeForce 2 Ultra顯卡;Windows XP Professional

  注2 Pentium III 處理器平臺配置:Intel Desktop Board VC820;256MB PC133 SDRAM,nVidia GeForce 2 Ultra顯卡,Creative Sound Blaster Live聲卡,Windows XP Professional

  小結

  在Windows XP下使用時實通信客戶端應用程序接口已經大大的簡化了開發通信工具的難度。 開發者可以快速地設計、定型和開發他們的通信應用程序。 現有的音頻與視頻會議應用程序可以通過添加豐富的通信性能而受益于實時通信。 使用實時通信應用程序接口開發應用程序也受益于一個統一通信協議。 這增加了你的應用程序與其它的正文信息和音頻/視頻會議應用程序的相互適應性。結合了Intel處理器和Microsoft Windows XP的強大功能的實時通信應用程序接口給你帶來了一個終端通信經歷的革命。

  本文源代碼下載

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91禁外国网站| 国产专区欧美专区| 国内偷自视频区视频综合| 亚洲最新在线视频| 在线精品视频视频中文字幕| 亚洲国产又黄又爽女人高潮的| 日韩免费在线观看视频| 欧美日本精品在线| 亚洲精品在线不卡| 欧洲亚洲妇女av| 日韩成人在线网站| 欧美在线不卡区| 精品无人区乱码1区2区3区在线| 国模精品视频一区二区三区| 伊人久久免费视频| 欧美日本中文字幕| 日韩av电影免费观看高清| 91精品国产高清久久久久久91| 国产精品午夜国产小视频| 久久av红桃一区二区小说| 久久999免费视频| 日本欧美国产在线| 国产欧美一区二区三区久久| 91美女片黄在线观看游戏| 日韩动漫免费观看电视剧高清| 欧美www视频在线观看| 日韩综合视频在线观看| 欧美日韩999| 久久精品成人一区二区三区| 欲色天天网综合久久| 91九色精品视频| 欧美视频在线观看 亚洲欧| 国模精品系列视频| 日韩电影网在线| 在线视频欧美性高潮| 亚洲天堂开心观看| 韩剧1988在线观看免费完整版| 国产精品无av码在线观看| 91精品中文在线| 欧美精品一区三区| 亚洲国产又黄又爽女人高潮的| 欧美亚洲国产日韩2020| 国产国语刺激对白av不卡| 国产精品视频免费在线观看| 国产精品一香蕉国产线看观看| 97成人超碰免| 日韩av一区二区在线| 精品香蕉一区二区三区| 欧美精品videos另类日本| 国内精品久久久久久| 国产成人啪精品视频免费网| 日韩一区二区欧美| 国产日韩在线免费| 国产日韩欧美中文在线播放| 中文字幕亚洲一区| 91精品啪aⅴ在线观看国产| 国产精品成人aaaaa网站| 激情懂色av一区av二区av| 日韩免费在线观看视频| 精品亚洲一区二区三区在线播放| 久久久黄色av| 欧美高清videos高潮hd| 青青久久av北条麻妃海外网| 欧美一级在线播放| 久久综合伊人77777蜜臀| 国产91精品在线播放| 成人福利视频网| 欧美国产中文字幕| 91精品在线播放| 人人做人人澡人人爽欧美| 91精品视频在线免费观看| 中文字幕久久精品| 欧美精品在线视频观看| 国产精品电影网站| 亚洲肉体裸体xxxx137| 欧美日韩爱爱视频| 裸体女人亚洲精品一区| 福利精品视频在线| 欧美激情二区三区| 欧美激情久久久| 国产精品夫妻激情| 亚洲激情视频网| 久久手机免费视频| 亚洲欧美999| 日本精品一区二区三区在线播放视频| 久久精品99久久香蕉国产色戒| 奇米四色中文综合久久| 欧美肥老太性生活视频| 亚洲美女性生活视频| 超碰91人人草人人干| 日本免费一区二区三区视频观看| 8090理伦午夜在线电影| 亚洲free性xxxx护士白浆| 国产精品男人的天堂| 91夜夜揉人人捏人人添红杏| 久久久欧美精品| 国产成人在线播放| 日本aⅴ大伊香蕉精品视频| 久久精品视频免费播放| 亚洲一级一级97网| 欧洲美女7788成人免费视频| 美日韩在线视频| 成人美女免费网站视频| 国产成人精品999| 成人做爰www免费看视频网站| 亚洲精品视频在线观看视频| 亚洲成人中文字幕| 日韩精品免费综合视频在线播放| 国产成人亚洲综合| 久久久久久久999| 久久久综合免费视频| 久久久久久久影院| 欧美视频精品一区| 最新国产成人av网站网址麻豆| 久久久成人精品| 亚洲色图50p| 中文字幕精品久久久久| 亚洲成年人在线播放| 亚洲韩国青草视频| 欧美激情欧美狂野欧美精品| 57pao国产精品一区| 18性欧美xxxⅹ性满足| 日韩欧美一区二区在线| 欧美成人网在线| 高清欧美性猛交xxxx黑人猛交| 日韩精品视频免费在线观看| 九九热这里只有精品6| 欧美日韩国产黄| 亚洲欧美日韩区| 国产精品亚洲片夜色在线| 国产精品高清网站| 日韩精品在线电影| 日韩av免费看| 欧美一级片免费在线| 亚洲国产精品人久久电影| 亚洲免费福利视频| 精品亚洲一区二区三区| 欧美激情精品久久久久久黑人| 久久久91精品国产一区不卡| 在线日韩欧美视频| 国产丝袜一区视频在线观看| 日韩av电影手机在线| 欧美极品在线播放| 欧美精品videosex牲欧美| 国产精品自拍小视频| 欧美黄网免费在线观看| 亚洲女人被黑人巨大进入| 激情av一区二区| 亚洲综合色av| 久久精品视频免费播放| 日韩激情av在线播放| 欧美日韩午夜激情| 亚洲人成网7777777国产| 日韩视频免费看| 国产精品香蕉av| 亚洲国产精品va在线看黑人动漫| 亚洲最新av在线| 久久综合亚洲社区| 欧美电影免费看| 欧美日韩成人精品| 成人午夜在线观看| 久久av中文字幕| 欧美国产日韩一区二区三区| 色综合久久中文字幕综合网小说|