日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

互聯網發展至今,實時視頻和語音通話越來越被大眾所依賴。

今天,我們將會繼續介紹如何基于ZEGO SDK實現音視頻通話功能,前兩篇文章分別介紹了Android,Flutter平臺的實現方式,感興趣的小伙伴可點擊了解: Android,Flutter。

接下來,我們將會一起開發一個RTC場景的windows應用。

1 準備環境

在開始集成 ZEGO Express SDK 前,請確保開發環境滿足以下要求:
Visual Studio 2015 或以上版本。
Windows 7 或以上版本。
麥克風、攝像頭等支持音視頻功能的外部設備。

2 項目準備

2.1 創建項目

進入即構官網,在【ZEGO控制臺】創建項目,并申請有效的 AppID,這一步很關鍵,appid為應用的唯一標識,如身份證號,是應用的身份證明,用于明確你的項目及組織身份。zego提供的服務也是基于APP ID;

App ID的獲取方式很簡單,只需3~5分鐘,在即構官網-我的項目-創建即可。創建的項目信息可用于SDK的集成和配置;

2.2 Token 鑒權

登錄房間時必須 使用 Token 鑒權 ,可參考 Token 鑒權教程
為了方便開發階段的調試,開發者可直接在 ZEGO 控制臺獲取臨時 Token(有效期為 24 小時) 來使用,詳情請參考 控制臺(新版) - 項目管理 中的 “項目信息”。

3 集成

3.1 項目設置

1.打開 Microsoft Visual Studio,選擇“文件 > 新建 > 項目”菜單。

如何基于 ZEGO SDK 實現 Windows 一對一視頻聊天應用

 

2.在新建項目窗口,選擇項目類型為“MFC 應用程序”,輸入項目名稱,選擇項目存儲路徑,并單擊“確定”。

如何基于 ZEGO SDK 實現 Windows 一對一視頻聊天應用

 

3.進入 MFC 應用程序窗口,選擇“應用程序類型”為“基于對話框”,并單擊“完成”。

如何基于 ZEGO SDK 實現 Windows 一對一視頻聊天應用

 

3.2 導入 SDK

1.下載 SDK。

請從 下載 SDK 包 下載 SDK。

2.解壓 SDK,并拷貝到項目目錄下。

SDK 包含 “include” 和 “lib” 兩個目錄,每個目錄包含的文件說明如下。

include    --------------- 包含SDK頭文件
lib        --------------- 包含SDK的.lib和.dll文件
| x86   --------------- 32位版本
| x64   --------------- 64位版本

4 設置項目屬性

在解決方案資源管理器窗口中,右擊項目名稱,單擊“屬性”,進入項目屬性頁。在項目屬性頁面內進行以下配置,配置完成后單擊“確定”。
1.將 “include” 目錄加入到文件搜索路徑。
選擇“配置屬性 > C/C++ > 常規”菜單,在“附加包含目錄”中添加 “include” 目錄。

如何基于 ZEGO SDK 實現 Windows 一對一視頻聊天應用

 

2.將 “lib” 目錄加入到搜索路徑。
選擇“配置屬性 > 鏈接器 > 常規”菜單,在“附加目錄”中添加 “lib/x86” 或 “lib/x64” 目錄。

如何基于 ZEGO SDK 實現 Windows 一對一視頻聊天應用

 

3.指定鏈接庫 “ZegoExpressEngine.lib”。
選擇“配置屬性 > 鏈接器 > 輸入”菜單,在“附加依賴項”中添加 “ZegoExpressEngine.lib”。

如何基于 ZEGO SDK 實現 Windows 一對一視頻聊天應用

 

5 實現流程

如以下流程圖,用戶A與B通過 ZEGO Express SDK 進行視頻通話,與用戶 A 拉取用戶 B 的流為例:

如何基于 ZEGO SDK 實現 Windows 一對一視頻聊天應用

 

為保證實時音視頻的通話質量,推拉流關鍵流程需按照API的正確調用時序進行,完整時序如下圖:

如何基于 ZEGO SDK 實現 Windows 一對一視頻聊天應用

 

5.1 創建引擎

1. 創建界面

根據場景需要,為您的項目創建視頻通話的用戶界面。我們推薦您在項目中添加如下元素:

  • 本地視頻窗口
  • 遠端視頻窗口
  • 結束通話按鈕
如何基于 ZEGO SDK 實現 Windows 一對一視頻聊天應用

 

2. 引入頭文件

在項目中引入 ZegoExpressEngine 頭文件。

// 引入 ZegoExpressEngine.h 頭文件
#include "ZegoExpressSDK.h"

3. 創建引擎

調用 createEngine 接口,將申請到的 AppID 傳入參數 “appID” 和,創建引擎單例對象。
注冊回調,可將實現了 ZegoEventHandler 的對象(例如 “self”)傳入參數 “eventHandler”。

ZegoEngineProfile profile;
// AppID 由 ZEGO 分配給各 App
profile.appID = appID;
profile.scenario = ZegoScenario::ZEGO_SCENARIO_GENERAL;
// 創建引擎實例
auto engine = ZegoExpressSDK::createEngine(profile, nullptr);

5.2 登錄房間

傳入用戶 ID 參數 “userID” 創建 ZegoUser 用戶對象后,調用 loginRoom 接口,傳入房間 ID 參數 “roomID” 和用戶參數 “user”,登錄房間。
roomID 和 user 的參數由您本地生成,但是需要滿足以下條件:

  • 同一個 AppID 內,需保證 “roomID” 全局唯一。
  • 同一個 AppID 內,需保證 “userID”
    全局唯一,建議開發者將其設置成一個有意義的值,可將 “userID” 與自己業務賬號系統進行關聯。
// 創建用戶對象
ZegoUser user("user1", "user1");
// 只有傳入 “isUserStatusNotify” 參數取值為 “true” 的 ZegoRoomConfig,才能收到 onRoomUserUpdate 回調。
ZegoRoomConfig roomConfig;
//token 由用戶自己的服務端生成,為了更快跑通流程,也可以通過即構控制臺獲取臨時的音視頻 token
roomConfig.token = "xxxx";
roomConfig.isUserStatusNotify = true;
// 登錄房間
engine->loginRoom(roomID, user, roomConfig);

調用登錄房間接口之后,您可通過監聽 onRoomStateUpdate 回調實時監控自己在本房間內的連接狀態。
只有當房間狀態是連接成功時,推流(startPublishingStream)、拉流(startPlayingStream)才能正常收發音視頻。

void VideoTalk::onRoomStateUpdate(const std::string &roomID, ZegoRoomState state, int errorCode, const std::string &extendData) {
    if (errorCode != 0) {
        // 房間狀態出錯
    }

    if (state == ZegoRoomState::ZEGO_ROOM_STATE_CONNECTED) {
        //只有當房間狀態是連接成功時,推流(startPublishingStream)、拉流(startPlayingStream)才能正常收發音視頻
        //將自己的音視頻流推送到 ZEGO 音視頻云
    } else if (state == ZegoRoomState::ZEGO_ROOM_STATE_CONNECTING) {
        // 房間連接中
    } else if (state == ZegoRoomState::ZEGO_ROOM_STATE_DISCONNECTED) {
        // 房間連接斷開
    }
}

5.3 預覽自己的畫面,并推送到 ZEGO 音視頻云

1. 預覽自己的畫面

設置預覽視圖并啟動本地預覽。
如果希望看到本端的畫面,可調用 startPreview 接口設置預覽視圖,并啟動本地預覽。

// 設置本地預覽視圖并啟動預覽,視圖模式采用 SDK 默認的模式,等比縮放填充整個 View
ZegoCanvas canvas((void*)view);
engine->startPreview(&canvas);

2. 將自己的音視頻流推送到 ZEGO 音視頻云

在用戶調用 loginRoom 接口后,可以直接調用 startPublishingStream 接口,傳入 streamID,將自己的音視頻流推送到 ZEGO 音視頻云。您可通過監聽 onPublisherStateUpdate 回調知曉推流是否成功。
streamID 由您本地生成,但是需要保證: 同一個 AppID 下,“streamID” 全局唯一。如果同一個 AppID 下,不同用戶各推了一條 “streamID” 相同的流,會導致后推流的用戶推流失敗。
此處示例在調用 loginRoom 接口后立即進行推流。在實現具體業務時,您可選擇其他時機進行推流,只要保證先調用 loginRoom 即可。

// 用戶調用 loginRoom 之后再調用此接口進行推流
// 在同一個 AppID 下,開發者需要保證“streamID” 全局唯一,如果不同用戶各推了一條 “streamID” 相同的流,后推流的用戶會推流失敗。
engine->startPublishingStream("stream1");

5.4 拉取其他用戶的音視頻

進行視頻通話時,我們需要拉取到其他用戶的音視頻。
onRoomStreamUpdate:在同一房間內的其他用戶將音視頻流推送到 ZEGO 音視頻云時,我們會在此回調中收到音視頻流新增的通知。
我們可以在該回調中,調用 startPlayingStream,傳入 “streamID” 拉取播放該用戶的音視頻。

// 房間內其他用戶推流/停止推流時,我們會在這里收到相應流增減的通知
void VideoTalk::onRoomStreamUpdate(const std::string &roomID, ZegoUpdateType updateType, const std::vector<ZegoStream> &streamList, const std::string &extendData) {
    //當 updateType 為 ZEGO_UPDATE_TYPE_ADD 時,代表有音視頻流新增,此時我們可以調用 startPlayingStream 接口拉取播放該音視頻流
    if (updateType == ZEGO_UPDATE_TYPE_ADD) {
        // 開始拉流,設置遠端拉流渲染視圖,視圖模式采用 SDK 默認的模式,等比縮放填充整個 View
        // 如下 playView 為 UI 窗口句柄
        std::string streamID = streamList[0].streamID;
        ZegoCanvas canvas((void*)playView);
        engine->startPlayingStream(streamID , &canvas);
    }
}

恭喜,你又get一種實現音視頻通話的新技能。

分享到:
標簽:聊天 視頻
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定