Table of Contents

Class SocketVoiceChannelExperimentalExtensions

Namespace
Kook.Audio.WebRtc
Assembly
Kook.Net.Experimental.dll

提供用于 SocketVoiceChannel 的实验性 WebRTC 语音功能的扩展方法。

public static class SocketVoiceChannelExperimentalExtensions
Inheritance
SocketVoiceChannelExperimentalExtensions
Inherited Members

Methods

ConnectWebRtcAsync(SocketVoiceChannel, Action<IWebRtcAudioClient>?)

通过 WebRTC 语音通道连接到此语音频道。

public static Task<IWebRtcAudioClient> ConnectWebRtcAsync(this SocketVoiceChannel channel, Action<IWebRtcAudioClient>? configure = null)

Parameters

channel SocketVoiceChannel

要连接的语音频道。

configure Action<IWebRtcAudioClient>

在开始连接之前调用的回调,用于订阅音频客户端的事件。 连接过程中,已在频道内发言的用户的音频流会被立即创建,如果在连接完成后才订阅 StreamCreated,将会错过这些音频流的创建事件。

Returns

Task<IWebRtcAudioClient>

一个表示异步连接操作的任务,任务的结果是已连接的音频客户端。

Remarks

此方法使用 KOOK 非官方文档化的语音通道,行为可能随时变化。使用 StopAsync() 与 Dispose() 断开连接并释放资源。

返回的客户端不会赋给 AudioClient,该属性仍然只表示基于 UDP 的官方语音连接, 因此需要调用方自己持有返回的客户端。此方法不会断开该频道上已有的 UDP 连接, 但同一个频道里 UDP 与 WebRTC 不能同时在线,同一个账号同一时间也只能有一个 WebRTC 会话,详见 IWebRtcAudioClient 的说明。

连接失败时,下列情形是实测中见过的:

  • 获取语音网关令牌时被服务端拒绝,会抛出 HttpException。实测中,没有任何服务器角色的 Bot 得到的是 HTTP 403(你没有权限进行此操作)。Bot 无法访问该频道所属的服务器时,服务端返回的是 HTTP 400, 这一种情形只用 REST 探针确认过,没有经过 .NET 代码验证,异常类型是按同一条请求路径推断的。
  • 服务端在加入时拒绝了请求,例如同一个频道里已经有该账号的 UDP 连接(实测为 401 peerId error!), 会抛出异常,其类型目前没有公开,只能通过 Exception 捕获,错误信息中包含服务端给出的原因。
  • 超过 15 秒仍未连接成功,会抛出 TimeoutException。
连接失败时,此方法已经释放了所创建的客户端,调用方不需要再处理。

Exceptions

HttpException

获取语音网关令牌失败,例如 Bot 没有权限。

TimeoutException

音频客户端未能在 15 秒内连接成功。