For the complete documentation index, see llms.txt. This page is also available as Markdown.

高级主题

脚本 API 参考、自定义帧源实现、域事件、WebGL 平台行为以及跨平台兼容性。

高级视觉配置与自定义集成

本页涵盖以下内容的完整脚本 API: ConvaiVisionPublisher、实现自定义帧源的约定、在 Vision 生命周期中发出的领域事件、平台特定行为以及跨平台兼容性矩阵。本文面向需要超出 Inspector 所能提供的程序化控制的开发者。


ConvaiVisionPublisher 脚本 API

成员
签名
说明

IsPublishing

bool IsPublishing { get; }

true 当视频轨道正在发布到房间时。

FrameSource

IVisionFrameSource FrameSource { get; }

当前活动的帧源。 null 在 WebGL 上。

PublishPolicy

VisionPublishPolicy PublishPolicy { get; }

当前发布策略。

VideoTrackName

string VideoTrackName { get; }

正在使用的 WebRTC 视频轨道名称。

SetPublishPolicy

void SetPublishPolicy(VisionPublishPolicy policy)

更改发布策略。如果发布处于活动状态,轨道会立即以新配置文件重启。

EnablePublishing

void EnablePublishing(bool enabled)

在不更改策略的情况下开始或停止发布。当策略为 Manual;适用于所有策略。

条件策略选择示例

using Convai.Modules.Vision;
using Convai.Runtime.Vision.Publishing;

ConvaiVisionPublisher publisher = GetComponent<ConvaiVisionPublisher>();

bool isHighBandwidthNetwork = /* 你的网络质量检查 */;
VisionPublishPolicy chosen = isHighBandwidthNetwork
    ? VisionPublishPolicy.HighResponsiveness
    : VisionPublishPolicy.LowOverhead;

publisher.SetPublishPolicy(chosen);

实现自定义帧源

如果没有任何内置源适合你的用例——例如,你想发布由自定义后处理管线生成的渲染纹理,或者从第三方 SDK 进行流式传输——请实现 IVisionFrameSource.

接口约定

Y 翻转要求

CurrentRenderTexture 必须是 自上而下 (相对于 Unity 默认自下而上的约定进行了 Y 翻转)。未能翻转纹理会在后端产生上下颠倒的视频流。请使用 Graphics.Blit 配合翻转后的缩放向量:

最小自定义实现

可选:IVisionFrameSourceStatusProvider

为了公开详细的状态信息(由 VisionDebugPreview 以及协调器的健康检查使用),还要实现 IVisionFrameSourceStatusProvider:

将你的自定义组件赋给 ConvaiVisionPublisher帧源组件 字段。发布器接受任何 MonoBehaviour ,实现了 IVisionFrameSource.


领域事件

Vision 通过 SDK 的 IEventHub发布所有重要状态变化。可从任何持有 IEventHub 引用的组件订阅这些事件,或通过 ConvaiManager 的事件基础设施订阅。

事件参考

事件类型
命名空间
关键字段

VisionCaptureStarted

Convai.Domain.DomainEvents.Vision

宽度, 高度, FramesPerSecond, SourceId, 时间戳, 宽高比, 总像素数

VisionFrameCaptured

Convai.Domain.DomainEvents.Vision

宽度, 高度, FrameIndex, SizeBytes, SourceId, 时间戳

VisionCaptureStopped

Convai.Domain.DomainEvents.Vision

TotalFramesCaptured, 原因, SourceId, 错误消息, 错误代码, IsError, IsNormalStop

VideoTrackPublished

Convai.Domain.DomainEvents.Vision

TrackSid, TrackName, RoomSessionId, 时间戳, IsVisionTrack

VideoTrackUnpublished

Convai.Domain.DomainEvents.Vision

TrackSid, TrackName, 原因, 时间戳, IsNormalUnpublish

VisionFrameCaptured不是 携带帧像素数据。它是一个轻量级的统计事件,用于遥测和监控。实际帧数据会直接通过视频管线传输。

VisionCaptureStopReason 值

含义

用户请求 (0)

StopCapture() 已被显式调用

会话结束 (1)

Convai 房间会话已结束

相机丢失 (2)

摄像头已断开连接或变得不可用

错误 (3)

发生了内部错误(参见 错误消息 是位于 错误代码)

组件已禁用 (4)

帧源组件已被禁用

VideoTrackUnpublishReason 值

含义

用户请求 (0)

EnablePublishing(false) 或策略更改

会话结束 (1)

房间会话已结束

源丢失 (2)

帧源被移除或意外停止

错误 (3)

由于传输错误,轨道取消发布

组件已禁用 (4)

发布器组件已被禁用

从 MonoBehaviour 访问 Vision 状态

IEventHub 是 SDK 内部模块依赖注入系统的一部分。它不能直接从常规 MonoBehaviour 脚本中访问——它会提供给实现 IConvaiModule 的类,通过模块生命周期注入。

对于用户脚本,推荐的方法是通过发布器和帧源直接监视状态:

领域事件订阅(SDK 模块上下文)

如果你正在构建一个实现 IConvaiModule 并通过模块生命周期接收 IEventHub 的类,领域事件订阅遵循以下模式:


WebGL 平台深度解析

在 WebGL 构建中,Vision 管线会绕过 IVisionFrameSource 约定,完全不使用。相反, ConvaiVisionPublisher 使用浏览器的 canvas.captureStream() API 捕获可见的 Unity WebGL 画布,并发布生成的 MediaStream

与原生路径的主要差异:

方面
原生
WebGL

帧源组件

所需

不使用

捕获分辨率

CapturePreset

与浏览器画布大小一致

最大帧率

最高 30 fps

上限为 15 fps

VisionDebugPreview

显示捕获

显示为空白(无 RenderTexture)

IsPublishing

true 当轨道处于直播状态时

true 当轨道处于直播状态时

发布策略

全部值均受支持

帧率限制为 15 fps


平台兼容性矩阵

功能
PC / Mac
Android / iOS
WebGL
Meta Quest

CameraVisionFrameSource

❌(无需帧源)

WebcamVisionFrameSource

✅(权限流程)

QuestVisionFrameSource

✅(需要 Meta XR SDK)

WebGL 画布捕获

✅(自动)

VisionDebugPreview

✅(仅编辑器)

✅(仅编辑器)

⚠️ 空白

✅(仅编辑器)

最大发布 FPS

30

30

15

30

高响应 策略

✅(FPS 受限)


常见陷阱


结论

本页涵盖了 Vision 可编程接口的全部深度——发布器 API、自定义帧源约定、领域事件、WebGL 管线以及平台矩阵。若要快速回到基于 Inspector 的基础内容,请重新查看 快速入门。如需诊断上述任何区域的问题,请参见 故障排查.

最后更新于

这有帮助吗?