Windows C#

最近更新时间:2026-06-12 14:26:58

我的收藏
本文介绍如何快速在 C# 中接入 Windows RTC Engine,以实现基本音视频通话功能。

前提条件

开通服务

1. 登录 实时音视频控制台,单击创建应用。如果您已经完成创建,可以跳过该操作。
2. 在创建应用成功后,您可以在应用管理中获取到您的 SDKAppIDSDK 密钥

SDKAppID:控制台创建的 TRTC 应用的唯一标识。
UserSig(SDK 密钥):用户鉴权凭证,由您的业务服务器生成。

环境准备

操作系统:Windows 7 及以上版本
开发环境:Visual Studio 2019 及以上版本,推荐使用 Visual Studio 2022
开发框架:.NET 6.0 及以上版本,推荐使用 .NET 8.0

接入指引

本文以创建 WPF 应用程序 为例接入 TRTC C# SDK。

步骤 1:创建 WPF 应用程序空工程

1. 打开 Visual Studio 创建项目。
打开 Visual Studio,新建一个 WPF 应用程序 工程。在 Visual Studio 2022 中点击 创建新项目,搜索模板 WPF 应用程序,点击 下一步



2. 配置项目。
2.1 项目命名为 TRTCDemo(可根据自己项目命名),点击下一步



2.2 配置 .NET 版本。现有的 TRTC C# SDK 支持 .NET 6.0 及以上版本,推荐使用 .NET 8.0。

2.3 配置项目后点击创建,WPF 应用程序的空工程即创建完成。

步骤 2:引入 SDK 文件

1. 下载 Windows C# SDK,解压后的 SDK 包含如下文件:

2. 将解压后的 TRTCSDK 文件夹拷贝到项目 .csproj 文件所在目录下。



3. 在 Visual Studio 中添加文件到项目(如果工程已自动引入,可忽略该步骤):
3.1 解决方案资源管理器 中右键项目 > 添加 > 新建文件夹 > 命名为 TRTCSDK
3.2 右键 TRTCSDK 文件夹 > 添加 > 现有项 > 选择 TRTCSDK/Scripts/ 下所有 .cs 文件。
添加完成后如图所示:

4. 原生 DLL 无需加入项目文件,后续通过配置输出目录复制。

步骤 3:配置项目属性

设置目标平台为 x64(推荐)。
如果工程中已有 x64 平台配置,则可忽略该步骤。
1. 点击工程平台选项下拉框中的配置管理器选项:



2. 进入新页面后,点击活动解决方案平台下拉框的 新建 选项,选择 x64,点击确定即可:






3. 选择项目架构为 x64。

步骤 4:配置 DLL 复制到输出目录

原生 DLL 需要在运行时位于应用程序的同级目录下。有两种方式:

方式一:后期生成事件(推荐)

1. 右键项目 > 属性 > 生成事件
2. 生成后事件命令行中添加:
xcopy /E /Y "$(ProjectDir)TRTCSDK\\Plugins\\x86_64\\*.dll" "$(TargetDir)"



说明:
如果目标平台为 x86,将 x86_64 替换为 x86

方式二:手动复制

手动将 DLL 库拷贝到对应的编译产物输出目录下。

步骤 5:确认是否安装 Newtonsoft.Json

1. Newtonsoft.Json 是不可缺少的程序包,如果工程中没有安装,在工程中的 依赖项 右键 > 管理 NuGet 程序包

2. 点击管理 NuGet 程序包进入新的窗口,点击浏览,查找 Newtonsoft.Json 进行下载安装即可。




步骤 6:创建 TRTC 实例

1. 在代码文件中引入 TRTC 命名空间:
using trtc;
2. 获取 TRTC 实例并实现 ITRTCCloudCallback 接口:
注意:
目前 ITRTCCloudCallback 的所有回调都必须实现,否则会出现编译报错。
using System.Windows.Forms;
using trtc;

public partial class Form1 : Form, ITRTCCloudCallback
{
private ITRTCCloud trtcCloud;

public Form1()
{
InitializeComponent();
// 获取 TRTC 实例
trtcCloud = ITRTCCloud.getTRTCShareInstance();
// 注册 TRTC 回调
trtcCloud.addCallback(this);
}

// 实现接口方法
public void onError(TXLiteAVError errCode, string errMsg, IntPtr extraInfo)
{
// 监听 onError 事件并对相应信息进行打印
MessageBox.Show($"Error: {errCode}, {errMsg}");
}

public void onWarning(TXLiteAVWarning warningCode, string warningMsg, IntPtr extraInfo)
{
// 监听 onWarning 事件并对相应信息进行打印
MessageBox.Show($"Warning: {warningCode}, {warningMsg}");
}

public void onEnterRoom(int result)
{
// 监听 onEnterRoom 事件并对相应信息进行打印
if (result > 0)
{
MessageBox.Show("Enter room successfully");
}
else
{
MessageBox.Show("Enter room failed");
}
}

public void onExitRoom(int reason)
{
// 监听 onExitRoom 事件并对相应信息进行打印
if (reason == 0)
{
MessageBox.Show("Exit current room by calling the 'exitRoom' api of sdk");
}
else if (reason == 1)
{
MessageBox.Show("Kicked out of the current room by server through the restful api");
}
else if (reason == 2)
{
MessageBox.Show("The current room is dissolved by server through the restful api");
}
}
}

步骤 7:进入房间

设置进房参数 TRTCParam 并调用 enterRoom 即可进入房间,通过监听 onEnterRoom 回调确定是否进房成功。
TRTCParams 参数说明:
参数
类型
描述
sdkAppId
UInt32
您在 实时音视频控制台 中创建的音视频应用的 SDKAppID。
userId
String
您指定的用户 ID。
userSig
String
用户签名,请参见 UserSig
strRoomId
String
您指定的房间 ID,通常为唯一的房间 ID,限制长度为 64 字节。
role
TRTCRoleType
直播场景下的角色,仅适用于直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom),通话场景下指定该参数无效。推荐取值:默认值为主播(TRTCRoleAnchor)。
// 添加一个按钮,为按钮的 Click 事件添加以下代码:
private void button1_Click(object sender, EventArgs e)
{
// 将以下 trtcParams 参数修改为自己的参数
TRTCParams trtcParams = new TRTCParams();
trtcParams.sdkAppId = 1400xxxxxx;
trtcParams.userId = "denny";
trtcParams.strRoomId = "123abc";
trtcParams.userSig = "xxx";
trtcParams.role = TRTCRoleType.TRTCRoleAnchor;

// 对于多人视频通话场景,推荐使用 TRTC_APP_SCENE_LIVE
trtcCloud.enterRoom(ref trtcParams, TRTCAppScene.TRTC_APP_SCENE_LIVE);
}

步骤 8:打开/关闭摄像头并发布视频流

1. 工具箱 中,拖动一个 PictureBox 控件到窗体上。
2. 为窗体添加一个 Button 控件,双击该按钮,在生成的 Click 事件处理方法中添加以下代码:
private void button2_Click(object sender, EventArgs e)
{
// 设置本地预览渲染参数
TRTCRenderParams renderParams = new TRTCRenderParams();
renderParams.fillMode = TRTCVideoFillMode.TRTCVideoFillMode_Fit;
renderParams.mirrorType = TRTCVideoMirrorType.TRTCVideoMirrorType_Disable;
renderParams.rotation = TRTCVideoRotation.TRTCVideoRotation0;
trtcCloud.setLocalRenderParams(renderParams);

// 对前置摄像头采集内容进行本地预览并发布视频流
trtcCloud.startLocalPreview(true, imgLocalVideo);

// 对后置摄像头采集内容进行本地预览并发布视频流
trtcCloud.startLocalPreview(false, imgLocalVideo);
}
如果需要关闭摄像头采集并停止推送视频流,请调用 stopLocalPreview
void OnStopLocalPreviewClick()
{
trtcCloud.stopLocalPreview();
}

步骤 9:打开/关闭麦克风并发布音频流

调用 startLocalAudio 开启麦克风采集,请根据需求选择声音质量参数 Quality
语音模式(高噪声抑制能力,适合通话场景):
void OnStartLocalAudioClick()
{
trtcCloud.startLocalAudio(TRTCAudioQuality.TRTCAudioQualitySpeech);
}
音乐模式(高保真度,低音质损失,建议配合专业声卡使用):
void OnStartLocalAudioClick()
{
trtcCloud.startLocalAudio(TRTCAudioQuality.TRTCAudioQualityMusic);
}
如果需要关闭麦克风采集并停止推送音频流,请调用 stopLocalAudio
void OnStopLocalAudioClick()
{
trtcCloud.stopLocalAudio();
}

步骤 10:播放/停止远端视频流

1. 在进入房间之前对 onUserVideoAvailable 进行监听,当收到 onUserVideoAvailable(userId, true) 通知时,表示该路画面已有可播放的视频帧到达:
public void onUserVideoAvailable(String userId, bool available)
{
}
2. 调用 startRemoteView 播放远端视频画面:
void OnStartRemoteViewClick()
{
// imgVideo 为 Windows 的 PictureBox 组件
trtcCloud.startRemoteView("denny", TRTCVideoStreamType.TRTCVideoStreamTypeBig, imgVideo);
}
3. 调用 stopRemoteView 停止播放远端画面:
void OnStopRemoteViewClick()
{
trtcCloud.stopRemoteView("denny", TRTCVideoStreamType.TRTCVideoStreamTypeBig); // 仅停止播放 denny 的视频
trtcCloud.stopAllRemoteView(true); // 停止播放所有远端用户
}

步骤 11:播放/停止远端音频流

调用 muteRemoteAudio 选择播放或停止远端声音。
静音:
void OnMuteRemoteAudioClick()
{
trtcCloud.muteRemoteAudio("denny", true); // 仅静音 denny
trtcCloud.muteAllRemoteAudio(true); // 静音所有远端用户
}
取消静音:
void OnMuteRemoteAudioFalseClick()
{
trtcCloud.muteRemoteAudio("denny", false); // 仅取消静音 denny
trtcCloud.muteAllRemoteAudio(false); // 取消静音所有远端用户
}

步骤 12:退出房间

1. 调用 exitRoom 退出当前房间:
void OnExitClick()
{
trtcCloud.exitRoom();
}
2. TRTC SDK 会在退房结束后通过 onExitRoom 回调事件通知您:
public void onExitRoom(int reason) { } // 监听退房结果事件
以上文档介绍了如何在 C# 项目中接入 Windows RTC Engine,实现基本的音视频通话功能。在实际使用时,请根据自己的项目需求进行调整。您可以访问 API 概览 查看所有函数列表及其详细描述。