实时视频通话能够拉近人与人之间的距离,为用户提供沉浸式的交流体验,帮助你的 app 提高用户黏性。
本文介绍如何通过少量代码集成声网视频 SDK 并调用 API,在你的应用中实现高质量、低延迟的视频通话功能。
下图展示在 app 中集成声网视频通话的基本工作流程:
如图所示,实现视频通话的步骤如下:
joinChannel
创建并加入频道。使用同一频道名称的 app 客户端默认加入同一频道。App 客户端加入频道需要以下信息:
本节介绍如何创建项目,并将声网视频 SDK 集成至你的项目中。
参考以下步骤创建一个 Windows 项目。若已有 Windows 项目,直接查看集成 SDK。
根据你的 Windows Forms App 类型,选择对应的方式将 agora_rtc_sdk
添加到项目中。
.net core
类型
agora_rtc_sdk nuget
包引用。在 Solution Explorer 中右键 Dependencies,点击 Manage Nuget Packages > Browse,输入 agora_rtc_sdk
,选择最新稳定版的 SDK,然后点击安装将 SDK 添加到项目中。.net framework
类型
agora_rtc_sdk nuget
包引用。在 Solution Explorer 中右键 References,点击 Manage Nuget Packages > Browse,输入 agora_rtc_sdk
,选择最新稳定版的 SDK,然后点击安装将 SDK 添加到项目中。本节介绍如何实现视频通话。视频通话的 API 调用时序见下图:
根据场景需要,为你的项目创建视频通话的用户界面。若已有用户界面,可以直接查看使用域名。
如果你想实现一个视频通话,我们推荐你添加如下 UI 元素:
输入如下行引入声网 SDK:
using agora.rtc;
由于 C# 基于 C++ 封装,因此需要在代码中基于 IAgoraRtcEngineEventHandler
派生一个 AgoraRtcEventHandler
类,用来管理事件回调:
class AgoraRtcEventHandler : IAgoraRtcEngineEventHandler
{
public AgoraRtcEventHandler()
{
}
};
在调用其他声网 API 前,需要创建并初始化 IAgoraRtcEngine
对象。
调用 CreateAgoraRtcEngine
和 Initialize
方法,传入获取到的 App ID,即可初始化 IAgoraRtcEngine
。
你还可以根据场景需要,在初始化时注册想要监听的回调事件,如注册用户加入频道和离开频道的回调。
// 声明变量
IAgoraRtcEngine rtc_engine_ = null;
IAgoraRtcEngineEventHandler event_handler_ = null;
if (null == rtc_engine_)
{
// 创建 rtc engine
rtc_engine_ = AgoraRtcEngine.CreateAgoraRtcEngine();
}
RtcEngineContext context = new RtcEngineContext(appId);
// 初始化 rtc engine
int ret = rtc_engine_.Initialize(context);
event_handler_ = new AgoraRtcEventHandler();
// 初始化事件回调
rtc_engine_.InitEventHandler(event_handler_);
// 开启视频
rtc_engine_.EnableVideo();
成功初始化 IAgoraRtcEngine
对象后,需要在加入频道前设置本地视图,以便在通话中看到本地图像。
VideoCanvas vs = new VideoCanvas((ulong)localWindowId.Handle, RENDER_MODE_TYPE.RENDER_MODE_FIT);
rtc_engine_.SetupLocalVideo(vs);
完成初始化和设置本地视图后,你就可以调用 JoinChannel
方法加入频道。你需要在该方法中传入如下参数:
channelName
: 传入能标识频道的频道 ID。输入频道 ID 相同的用户会进入同一个频道。
token
:传入用于鉴权的 Token,可设为如下一个值:
token
设为 ""。uid
: 本地用户的 ID。数据类型为整型,且频道内每个用户的 uid
必须是唯一的。若将 uid
设为 0,则 SDK 会自动分配一个 uid
,并在 OnJoinChannelSuccess
回调中报告。mute
方法实现。rtc_engine_.JoinChannel("", "testChannelId","", 0, new ChannelMediaOptions(true, true, true, true));
视频通话中,通常你也需要看到其他用户。在加入频道后,可通过调用 SetupRemoteVideo
方法设置远端用户的视图。
远端用户成功加入频道后,SDK 会触发 OnUserJoined
回调,该回调中会包含这个远端用户的 uid
信息。在该回调中调用 SetupRemoteVideo
方法,传入获取到的 uid
,设置远端用户的视图。
// 调用 SetupRemoteVideo 设置远端用户的视图。
VideoCanvas vc = new VideoCanvas((ulong)remoteWindowId,
RENDER_MODE_TYPE.RENDER_MODE_FIT, "testChannelId", remoteUid);
rtc_engine_.SetupRemoteVideo(vc);
根据场景需要,如结束通话、关闭 App 或 App 切换至后台时,调用 LeaveChannel
离开当前通话频道。
rtc_engine_.LeaveChannel();
编译生成应用程序后,将对应文件夹下的依赖库拷贝到运行目录下:
.netcore
64 位的 app,需要拷贝 netCore/x86_64
下所有的依赖库。.netframework
32 位的 app,需要拷贝 netFramework/x86
下所有的依赖库。你可以在 Windows 设备中运行此项目。当你成功开始视频通话时,你可以同时看到本地和远端的视频。
声网在 GitHub 上提供开源的实时视频通话示例项目 JoinChannelVideo。在实现相关功能前,你可以下载并查看源代码。