产品百科 |Ali RTC Windows 基本功能介绍

简介: 阿里云 RTC 的基本功能包含初始化 SDK、加入频道、本地发布和订阅远端、离开频道等。当您成功初始化 SDK,您可以进行本地预览视频功能,进行简单的预览和测试。当您操作本地发布和订阅远端时,可以设置手动或者自动模式。

前提条件

在实现基本功能前,请您确保下载最新 SDK,请参见 SDK 下载

获得加入频道必须的频道鉴权令牌(Token):

  • 您可以在控制台生成临时 Token 校验加入频道是否成功,详情请参见控制台生成 Token
  • 在安全要求更高的场景下,建议您在服务端生成 Token,详情请参见服务端生成 Token

说明 本文中的实现方法为主要功能方法,仅供参考,您可以根据业务需求进行实际开发。

操作步骤

  1. 初始化 SDK。
  1. 如果 CRtcSampleDlg 类中有定义 AliRTCEngine 实例,则需要创建 AliRTCEngine 实例,并注册 AliRtcEventListener 监听相关回调,更多信息,请参见回调及监听
m_pEngine = AliRtcEngine::sharedInstance(AliRtcEventListener* pListener, char* pConfig);//pListener是您实现的AliRtcEventListener对象,用于接收SDK的回调。pConfig是SDK初始化配置,当前版本请使用空字符串


说明暂不支持多实例

  1. 创建 canvas 布局进行本地预览视频。
  • 开启本地预览。
// 获取预览窗口
AliVideoCanvas canvas;
canvas.renderMode = AliRtcRenderModeAuto;
canvas.hWnd = /*预览窗口句柄*/;
// 设置预览窗口
m_pEngine->setLocalViewConfig(canvas, AliRtcVideoTrackCamera);
m_pEngine->startPreview();
canvas.flip = true;//true表示镜像画面,false表示正常画面
  • 说明AliRtcRenderMode 提供四种渲染模式。
  • (推荐)AliRtcRenderModeAuto:自动模式。
  • AliRtcRenderModeStretch:拉伸填充视图,不保持视频比例。
  • AliRtcRenderModeFill:在保持视频宽高比的同时缩放,填充黑边。
  • AliRtcRenderModeCrop:在保持视频宽高比的同时缩放,并裁剪以适合视图。
  • 停止本地预览。
m_pEngine->stopPreview();
  1. 设置自动或者手动模式。
/*
设置自动发布和订阅,只能在joinChannel之前设置
autoPub: true表示自动发布,false表示手动发布
autoSub: true表示自动订阅,false表示手动订阅
*/ 
m_pEngine->setAutoPublishSubscribe(bool autoPub, bool autoSub);
  • 自动发布模式: 如果您打开自动发布模式,加入频道之后,SDK 将自动开始发布音视频流;如果关闭自动发布模式,则需要您调用 publish 接口之后才会发布音视频流。
  • 自动订阅模式: 如果您打开自动订阅模式,加入频道之后,SDK 将会自动订阅当前频道内其他人的音视频流;如果关闭自动订阅模式,则需要您调用 subscribe 接口之后才会订阅其他人的音视频流。
  1. 加入频道。
AliRtcAuthInfo authinfo;
authinfo.channel   = /* 频道ID */;
authinfo.appid     = /* 应用ID */;
authinfo.token     = /* 频道鉴权令牌Token */;
authinfo.nonce     = /* 随机码 */;
authinfo.user_id   = /* 用户ID */;
authinfo.timestamp = /* 时间戳 */;
authinfo.gslb      = /* GSLB地址 */;
...
// joinChannel是一个异步接口,设置回调函数
auto onJoinResult = [](void *opaque, int errCode) {
    if (errCode == 0) {
        // 加入频道成功        
    } else {
        //加入频道失败
    }
};
m_pEngine->joinChannel(authinfo, /* 显示名称 */, onJoinResult, /*UserData,传递给onJoinResult回调函数*/);
参数 描述
appid 应用 ID,在控制台应用管理页面创建和查看。
channel 频道 ID。1~64 位,支持大小写字母、数字、下划线(_)、短划线(-)。
user_id 用户 ID。1~64 位,支持大小写字母、数字、下划线(_)、短划线(-)。

说明 同一个用户 ID 在其他端登录,先入会的端会被后入会的端踢出频道。

nonce 随机码。需要加上前缀 AK-,由字母 [a-zA-Z] 和数字 [0-9] 组成,不包含特殊字符,最大 64 字节。例如:AK-2b9be4b25c2d38c409c376ffd2372be1。
timestamp 频道过期时间戳。代表令牌有效时间为当前时间 + 所选择小时数。
token 频道鉴权令牌,计算方法:token = sha256(appId + appKey + channel + userId + nonce + timestamp)
gslb 服务地址,该参数是数组类型,当前请使用:["https://rgslb.rtc.aliyuncs.com"],请您通过业务服务器下发到客户端 SDK,不建议您将该地址固化在客户端代码。
  1. 发布或取消发布本地流。发布本地流。
  • 自动发布模式下:加入频道成功后,即可发布本地流,无需再次调用 publish 接口。
  • 手动发布模式下:加入频道成功后,可通过以下接口发布本地流。

如果发布过程中需要变更配置或者停止发布,需要按如下流程先重新设置配置参数,然后再调用 publish 接口。

//发布本地流设置
//true表示允许发布屏幕共享流,false表示不允许
m_pEngine->configLocalScreenPublish(true);
//true表示允许发布音频流,false表示不允许
m_pEngine->configLocalAudioPublish(true);
//true表示允许发布相机流,false表示不允许
m_pEngine->configLocalCameraPublish(true);
//true表示允许发布次要视频流;false表示不允许
//子码流
m_pEngine->configLocalSimulcast(true, AliRtcVideoTrack::AliRtcVideoTrackCamera); 
//屏幕共享流不支持子码流,因此第二个参数只能为AliRtcVideoTrack::AliRtcVideoTrackCamera。 
// Call back when publish finished
auto onPubResult = [](void *opaque, int errCode) {
    if (errCode == 0) {
       // 发布成功
    } else {
       // 发布失败
    }
};
m_pEngine->publish(onPubResult, /*UserData,传递给onPubResult回调函数*/);

取消发布本地流。

m_pEngine->configLocalScreenPublish(false);
m_pEngine->configLocalAudioPublish(false);
m_pEngine->configLocalCameraPublish(false);
m_pEngine->configLocalSimulcast(false, AliRtcVideoTrack::AliRtcVideoTrackCamera);
// 取消发布完成返回成功或者失败
auto onPubResult = [](void *opaque, int errCode) {
    if (errCode == 0) {
       // 取消发布成功
    } else {
       // 取发布失败
    }
};
m_pEngine->publish(onPubResult, /*UserData,传递给onPubResult回调函数*/);
  1. 订阅或取消订阅远程流。订阅远程流。
  • 自动订阅模式下:加入频道成功后,即可订阅远端流,无需再次调用 subscribe 接口。
  • 手动订阅模式下:加入频道成功后,可通过以下接口订阅远端流。
  1. 如果订阅过程中需要变更配置或者停止订阅,需要按如下流程先重新设置配置参数,然后再调用 subscribe 接口。
//true表示允许订阅音频流,false表示不允许
m_pEngine->configRemoteAudio(/* remoteUserID */, true);
//true表示允许订阅屏幕共享流,false表示不允许
m_pEngine->configRemoteScreenTrack(/* remoteUserID */, true);
//第二个参数preferMaster true表示优先订阅大流,fales表示优先订阅次小流
//第三个参数enable true表示允许订阅相机流,false表示不允许
m_pEngine->configRemoteCameraTrack(/* remoteUserID */, true, true);
//Call back when subscribe finished
auto onSubResult = [](void *opaque, const AliRtc::String &uid, AliRtcVideoTrack vt, AliRtcAudioTrack at) { 
};
m_pEngine->subscribe(/* remoteUserID */, onSubResult, /*UserData*/);

自动模式或非自动模式下,订阅成功后,您可以通过订阅的回调,进行相关 UI 操作或逻辑处理。

auto onSubResult = [](void *opaque, const AliRtc::String &uid, AliRtcVideoTrack vt, AliRtcAudioTrack at) {
    ...
    // 设置视频流的窗口
    if (vt == AliRtcVideoTrack::AliRtcVideoTrackCamera || vt == AliRtcVideoTrack::AliRtcVideoTrackBoth) {
        /*设置远端视频预览*/
    }

另外,您可以通过 onRemoteTrackAvailableNotify 回调获得远端用户的流状态变更。例如:手动模式下,收到此回调后,可以获取到远端用户的发布状态,然后相应做出订阅操作,或者更新 UI 等。

void onRemoteTrackAvailableNotify(const AliRtc::String & uid,   AliRtcAudioTrack audioTrack, AliRtcVideoTrack videoTrack) {   
}

取消订阅远程流。

m_pEngine->configRemoteAudio(/* remoteUserID */, false);
m_pEngine->configRemoteScreenTrack(/* remoteUserID */, false);
m_pEngine->configRemoteCameraTrack(/* remoteUserID */, true, false);
auto onSubResult = [](void *opaque, const AliRtc::String &uid, AliRtcVideoTrack vt, AliRtcAudioTrack at) {
};
m_pEngine->subscribe(/* remoteUserID */, onSubResult, /*UserData*/);
  1. 离开频道。
m_pEngine->leaveChannel();

您可以下载示例代码,快速跑通 Demo,实现频道内和其他人进行实时音视频通话,详情请参见 Windows Demo。接口方法请参见 AliRtcEngine 接口


「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。

image.png

相关文章
|
8月前
|
存储 文字识别 C#
.NET开源免费、功能强大的 Windows 截图录屏神器
今天大姚给大家分享一款.NET开源免费(基于GPL3.0开源协议)、功能强大、简洁灵活的 Windows 截图、录屏、Gif动图制作神器:ShareX。
135 1
|
8月前
|
Windows
Windows 命令提示符(CMD)操作(七):扩展命令和功能
Windows 命令提示符(CMD)操作(七):扩展命令和功能
|
18天前
|
人工智能 数据处理 C#
AI Dev Gallery:微软开源 Windows AI 模型本地运行工具包和示例库,助理开发者快速集成 AI 功能
微软推出的AI Dev Gallery,为Windows开发者提供开源AI工具包和示例库,支持本地运行AI模型,提升开发效率。
65 13
|
2月前
|
安全 BI 数据安全/隐私保护
AD域、Windows AD域管理功能大全
Windows AD域管理功能大全,再也不用东拼西凑了!
137 1
|
6月前
|
存储 算法 C++
【Qt应用开发】复刻经典:基于Qt实现Windows风格计算器(加减乘除、删除、归零功能全解析)
在Qt中,"栈"的概念主要体现在两个层面:一是程序设计中的数据结构——栈(Stack),二是用户界面管理中的QStackedWidget控件。下面我将分别简要介绍这两个方面:
191 4
|
3月前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
|
4月前
|
Linux Android开发 iOS开发
Windows平台RTSP|RTMP播放器如何实现实时录像功能
Windows平台RTSP、RTMP播放器实时录像接口设计,实际上,除了Windows平台,我们Linux、Android、iOS平台也是一样的设计,单纯的录像模块,如果做的全面,也不是一两个接口可以搞定的
115 1
|
5月前
|
存储 开发者 C#
WPF与邮件发送:教你如何在Windows Presentation Foundation应用中无缝集成电子邮件功能——从界面设计到代码实现,全面解析邮件发送的每一个细节密武器!
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中集成电子邮件发送功能,详细介绍了从创建WPF项目到设计用户界面的全过程,并通过具体示例代码展示了如何使用`System.Net.Mail`命名空间中的`SmtpClient`和`MailMessage`类来实现邮件发送逻辑。文章还强调了安全性和错误处理的重要性,提供了实用的异常捕获代码片段,旨在帮助WPF开发者更好地掌握邮件发送技术,提升应用程序的功能性与用户体验。
88 0
|
5月前
|
API C# Shell
WPF与Windows Shell完美融合:深入解析文件系统操作技巧——从基本文件管理到高级Shell功能调用,全面掌握WPF中的文件处理艺术
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的关键组件,用于构建 Windows 桌面应用程序。WPF 提供了丰富的功能来创建美观且功能强大的用户界面。本文通过问题解答的形式,探讨了如何在 WPF 应用中集成 Windows Shell 功能,并通过具体示例代码展示了文件系统的操作方法,包括列出目录下的所有文件、创建和删除文件、移动和复制文件以及打开文件夹或文件等。
113 0
|
5月前
|
C# Windows 监控
WPF应用跨界成长秘籍:深度揭秘如何与Windows服务完美交互,扩展功能无界限!
【8月更文挑战第31天】WPF(Windows Presentation Foundation)是 .NET 框架下的图形界面技术,具有丰富的界面设计和灵活的客户端功能。在某些场景下,WPF 应用需与 Windows 服务交互以实现后台任务处理、系统监控等功能。本文探讨了两者交互的方法,并通过示例代码展示了如何扩展 WPF 应用的功能。首先介绍了 Windows 服务的基础知识,然后阐述了创建 Windows 服务、设计通信接口及 WPF 客户端调用服务的具体步骤。通过合理的交互设计,WPF 应用可获得更强的后台处理能力和系统级操作权限,提升应用的整体性能。
148 0

热门文章

最新文章