实时互动直播能够拉近人与人之间的距离,为用户提供沉浸式的交流体验,帮助你的 app 提高用户黏性。
本文介绍如何通过少量代码集成声网视频 SDK 并调用 API,在你的应用中实现高质量、低延迟的互动直播功能。
下图展示在 app 中集成声网极速直播的基本工作流程:
如图所示,实现极速直播的步骤如下:
ClientRoleOptions
控制观众用户接收主播发布的音视频流的延时。joinChannel
创建并加入频道。使用同一频道名称的 app 客户端默认加入同一频道。setClientRole
切换用户角色。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();
初始化结束后,调用 SetChannelProfile
方法,将频道场景设为直播。
一个 IAgoraRtcEngine
只能使用一种频道场景。如果想切换为其他模式,需要先调用 Dispose
方法释放当前的 IAgoraRtcEngine
实例,然后调用 Initialize
方法创建一个新实例,再调用 SetChannelProfile
设置新的频道场景。
rtc_engine_.SetChannelProfile(CHANNEL_PROFILE_TYPE.CHANNEL_PROFILE_LIVE_BROADCASTING);
直播频道中可设置用户角色和用户级别:
你可以在 app 中参考如下步骤设置用户角色:
让终端用户选择自己的角色是主播还是观众。
调用 SetClientRole 方法,然后根据终端用户的选择设置 role
和 options
参数。
role
设为 CLIENT_ROLE_BROADCASTER
(主播)时, options
参数留空。此时主播端延时为 < 400 ms。role
设为 CLIENT_ROLE_AUDIENCE
(观众)时,你还需要将 options
中 audienceLatencyLevel
参数设为 AUDIENCE_LATENCY_LEVEL_LOW_LATENCY
。此时观众端延时为 1500 ms - 2000 ms。AUDIENCE_LATENCY_LEVEL_LOW_LATENCY
(低延时)切换为 AUDIENCE_LATENCY_LEVEL_ULTRA_LOW_LATENCY
(超低延时),会从极速直播产品切换为互动直播产品,延时会变为 400 ms - 800 ms。CLIENT_ROLE_AUDIENCE
(观众)切换为 CLIENT_ROLE_BROADCASTER
(主播),会从极速直播产品切换为互动直播产品,延时会低于 400 ms。AUDIENCE_LATENCY_LEVEL_LOW_LATENCY
时,RemoteAudioStats
中的 jitterBufferDelay
字段(接收端到网络抖动缓冲的网络延迟)不生效。观众:
ClientRoleOptions role_options = new ClientRoleOptions();
role_options.audienceLatencyLevel = AUDIENCE_LATENCY_LEVEL_TYPE.AUDIENCE_LATENCY_LEVEL_LOW_LATENCY;
rtc_engine_.SetClientRole(CLIENT_ROLE_TYPE.CLIENT_ROLE_AUDIENCE, role_options);
主播:
rtc_engine_.SetClientRole(CLIENT_ROLE_TYPE.CLIENT_ROLE_BROADCASTER);
成功初始化 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。在实现相关功能前,你可以下载并查看源代码。