产品百科 |RTC Windows SDK 手动推流和手动订阅的实现步骤

简介: 通过阅读本文,您可以了解手动推流和手动订阅的实现步骤。

音视频通信 RTC(Real-Time Communication)是阿里云覆盖全球的实时音视频开发平台,依托核心音视频编解码、信道传输、网络调度技术,提供高可用、高品质、超低延时的音视频通信服务,让用户快速搭建多端实时应用,适用于在线教育、视频会议、互动娱乐、音视频社交等场景。


产品链接:https://www.aliyun.com/product/rtc


通过阅读本文,您可以了解手动推流和手动订阅的实现步骤。

背景信息

RTC SDK 提供了 setAutoPublish 接口,支持设置自动推流或自动订阅,设置自动推流时 SDK 会在加入频道后自动推流,设置自动订阅时 SDK 会在频道中有其他用户推流时自动进行订阅拉流,无需 App 进行操作。

如果您需要根据具体业务场景,按需进行推流或者拉流,可以使用手动推流或手动订阅方式。

推流端

  1. 创建引擎实例后,在加入频道前,设置关闭自动推流(设置参数 autoPub false)。
// 创建引擎实例
AliRtcEngine *pEngine = AliRtcEngine::sharedInstance(this, "");
// 关闭自动推流/自动订阅
pEngine->setAutoPublishSubscribe(false, false);
  1. 配置后加入频道,并根据业务需要启动推流(音频 / 摄像头 / 屏幕采集),并通过回调确认推流是否成功,如果推流失败需要进行重试或提示用户。
    说明 必须在加入频道成功后才能开始推流,否则推流会失败,您需要关注加入频道结果是否成功。
// 配置推送音频流
pEngine->configLocalAudioPublish(true);
// 配置推送摄像头流
pEngine->configLocalCameraPublish(true);
// 配置推送屏幕分享流
pEngine->configLocalScreenPublish(true);
// 启动推流
auto callback = [](void *opaque, int errorCode) {
    if (errorCode == 0) {
        // 推流成功
    } else {
        // 推流失败
    }
};
pEngine->publish(callback, this);
  1. 当业务场景需要停止推流时,配置关闭上一步打开的媒体流并执行停止推流。
// 配置停止推送音频流
pEngine->configLocalAudioPublish(false);
// 配置停止推送摄像头流
pEngine->configLocalCameraPublish(false);
// 配置停止推送屏幕分享流
pEngine->configLocalScreenPublish(false);
// 停止推流
auto callback = [](void *opaque, int errorCode) {
};
pEngine->publish(callback, this);

订阅端

  1. 创建引擎实例后,在加入频道前,设置关闭自动订阅(设置参数 autoSub false)。
// 创建引擎实例
AliRtcEngine *pEngine = AliRtcEngine::sharedInstance(this, "");
// 关闭自动推流/自动订阅
pEngine->setAutoPublishSubscribe(false, false);
  1. 配置后并成功加入频道,当频道中用户推流发送变化时,SDK 会回调 onRemoteTrackAvailableNotify 进行通知,回调中指明了推流用户及推送的媒体流。
  • audioTrack 为 AliRtcAudioTrackMic 时,代表该远端用户推送了音频流。
  • videoTrack 为 AliRtcVideoTrackCamera 或 AliRtcVideoTrackBoth 时,代表该远端用户推送了摄像头视频流。
  • videoTrack 为 AliRtcVideoTrackScreen 或 AliRtcVideoTrackBoth 时,代表该远端用户推送了屏幕分享视频流。
  • audioTrack 为 AliRtcAudioTrackNo 并且 videoTrack 为 AliRtcVideoTrackNo 时,代表该远端用户已停止推流。
// 接收到其他用户推流变化通知
void onRemoteTrackAvailableNotify(const AliRtc::String &uid,
    AliRtcAudioTrack audioTrack,
    AliRtcVideoTrack videoTrack)
{
    ...
}
  1. 说明
  • 在加入频道成功后,才会接收到频道中其他用户推流回调 onRemoteTrackAvailableNotify,您需要关注加入频道结果是否成功。
  • 回调 onRemoteTrackAvailableNotify 中指明了推流用户 ID,以及该用户发生状态变更的媒体流,您需要记录该用户已推送媒体流。
  1. 接收到推流回调后,可根据远端用户实际推送的媒体流及业务需要,配置订阅推流用户的媒体流,然后启动订阅。
// 配置订阅指定用户音频流
pEngine->configRemoteAudio(userId, true);
// 配置订阅指定用户摄像头流
pEngine->configRemoteCameraTrack(userId, false, true);
// 配置订阅指定用户屏幕分享流
pEngine->configRemoteScreenTrack(userId, true);
// 启动订阅
auto callback = [](void *opaque, const AliRtc::String &uid, AliRtcVideoTrack vt, AliRtcAudioTrack at) {
};
pEngine->subscribe(userId, callback, this);
  1. 说明
  • 在接收到远端用户的推流回调之后,您才能对该用户进行订阅拉流,否则订阅失败。
  • 您需要关注回调中远端用户实际推送的媒体流,对于没有推送的媒体流,订阅无法成功。
  • 如果远端用户状态已变为停止推流后,您不能对该用户执行订阅操作,直到再次接收到该用户重新开始推送媒体流的回调。
  1. 订阅成功后,订阅用户会接收到回调 onSubscribeChangedNotify,此时可设置用于显示视频流的 View(视图)。
  • audioTrack 为 AliRtcAudioTrackMic 时,代表已订阅远端用户推送了音频流。
  • videoTrack 为 AliRtcVideoTrackCamera 或 AliRtcVideoTrackBoth 时,代表已订阅远端用户摄像头视频流。
  • videoTrack 为 AliRtcVideoTrackScreen 或 AliRtcVideoTrackBoth 时,代表已订阅远端用户推送了屏幕分享视频流。
void onSubscribeChangedNotify(const AliRtc::String &uid,
    AliRtcAudioTrack audioTrack,
    AliRtcVideoTrack videoTrack) {
    if (at == AliRtcAudioTrackMic) {
        // 订阅音频流成功
    }
    if (vt == AliRtcVideoTrackCamera || vt == AliRtcVideoTrackBoth) {
        // 订阅摄像头流成功
        AliVideoCanvas cameraCanvas;
        ...
        pEngine->setRemoteViewConfig(&cameraCanvas, uid, AliRtcVideoTrackCamera);
    }
    if (vt == AliRtcVideoTrackScreen || vt == AliRtcVideoTrackBoth) {
        // 订阅屏幕流成功
        AliVideoCanvas screenCanvas;
        ...
        pEngine->setRemoteViewConfig(&screenCanvas, uid, AliRtcVideoTrackScreen);
    }
}
  1. 说明 onSubscribeChangedNotify 回调中返回了实际订阅远端用户媒体流的结果,您需要关注订阅结果是否与订阅配置一致,确认订阅是否成功。
  2. 当业务场景不需要订阅指定用户媒体流,或远端用户已停止推流时(参见步骤 2 中远端停止推流状态),配置并取消订阅对应用户。
// 配置取消订阅指定用户音频流
pEngine->configRemoteAudio(userId, false);
// 配置取消订阅指定用户摄像头流
pEngine->configRemoteCameraTrack(userId, false, false);
// 配置取消订阅指定用户屏幕分享流
pEngine->configRemoteScreenTrack(userId, false);
// 取消订阅
auto callback = [](void *opaque, const AliRtc::String &uid, AliRtcVideoTrack vt, AliRtcAudioTrack at) {
};
pEngine->subscribe(userId, callback, this);


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

image.png

相关文章
|
8月前
|
Ubuntu 关系型数据库 MySQL
使用Ubuntu和Windows电脑实现Mysql主从同步(详细操作步骤)
使用Ubuntu和Windows电脑实现Mysql主从同步(详细操作步骤)
126 2
|
3月前
|
API 开发工具 C#
神策SDK不支持Windows客户端全埋点,怎么实现用户统计分析?
本文将介绍,ClkLog针对神策不支持全埋点的客户端实现用户访问基础统计分析 1。
神策SDK不支持Windows客户端全埋点,怎么实现用户统计分析?
|
2月前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
99 4
|
3月前
|
程序员 开发工具 Android开发
Android|使用阿里云推流 SDK 实现双路推流不同画面
本文记录了一种使用没有原生支持多路推流的阿里云推流 Android SDK,实现同时推送两路不同画面的流的方法。
77 7
|
3月前
|
Windows
重装系统学习笔记(一):Windows10重装步骤(正版)
这篇博客文章详细介绍了如何使用微软官方工具重装Windows 10系统,包括下载安装工具、准备U盘、设置BIOS以及系统安装的步骤。
76 0
重装系统学习笔记(一):Windows10重装步骤(正版)
|
3月前
|
API 开发工具 UED
在 UWP 中使用 Windows App SDK
【10月更文挑战第17天】在UWP中使用Windows App SDK可增强应用功能和性能。首先了解SDK特性,接着安装Visual Studio 2022及以上版本,并从微软官网下载安装SDK。配置项目时,确保目标版本支持SDK,添加SDK引用后即可使用新API提升应用体验。开发过程中应充分利用调试工具进行测试,确保应用的兼容性和稳定性。
|
5月前
|
安全 机器人 程序员
Windows 计划任务每天隔 3 小时运行一次批处理文件详细配置步骤
Windows 计划任务每天隔 3 小时运行一次批处理文件详细配置步骤
619 2
|
5月前
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
415 0
|
5月前
|
数据库 Windows
超详细步骤解析:从零开始,手把手教你使用 Visual Studio 打造你的第一个 Windows Forms 应用程序,菜鸟也能轻松上手的编程入门指南来了!
【8月更文挑战第31天】创建你的第一个Windows Forms (WinForms) 应用程序是一个激动人心的过程,尤其适合编程新手。本指南将带你逐步完成一个简单WinForms 应用的开发。首先,在Visual Studio 中创建一个“Windows Forms App (.NET)”项目,命名为“我的第一个WinForms 应用”。接着,在空白窗体中添加一个按钮和一个标签控件,并设置按钮文本为“点击我”。然后,为按钮添加点击事件处理程序`button1_Click`,实现点击按钮后更新标签文本为“你好,你刚刚点击了按钮!”。
423 0
|
5月前
|
存储 Linux 数据中心
【Azure 环境】在Windows系统中 使用Terraform创建中国区Azure资源步骤(入门级)
【Azure 环境】在Windows系统中 使用Terraform创建中国区Azure资源步骤(入门级)

热门文章

最新文章