iOS

实现低延时直播拉流

更新时间: 2025/08/04 15:51:30

本文介绍如何使用网易云信 NERTC SDK 实现低延时视频直播场景。

功能简介

网易云信 NERTC SDK 低延迟直播(Low-Latency Streaming,LLS)专门为提供极致的直播体验而设计,具备超低延迟、超低卡顿、超清画质、首帧秒开、能抗极端弱网等优秀特点,具备低延时、强同步、高质量的功能特点。是现代直播场景中的必备工具。

相较于使用传统 CDN 直播的方式,NERTC SDK 低延迟直播是基于网易云信全球智能路由网络 WE-CAN(Communications Acceleration Network)、高质量分发服务以及全链路自研传输协议,可以为直播提供延时更低、质量更优、链路更加稳定的直播服务。

适用场景

  • 电商直播:主播可实时回应观众问题、反馈互动信息,商品拍卖、秒杀促销等活动体验更佳,显著提升观众的 即看即买 购物体验和转化率。
  • 在线教育:教师能够实时解答学生疑问,进行答题互动、奖励反馈和白板协作,营造接近线下课堂的实时互动氛围,提升教学效果和学习体验。
  • 秀场互动:主播能即时回应观众互动,实时弹幕和礼物打赏显示无延迟,大幅提升直播间氛围和互动热度,增强用户粘性和付费意愿。
  • 赛事直播:体育比赛、电竞赛事等时效性强的内容能以低延时方式传递,观众可与现场同步体验比赛精彩瞬间,避免因延迟获知比赛结果的尴尬。
  • 多人同看:好友们可在直播间一起观看电影、演唱会或赛事,同时进行图文聊天互动,画面与聊天信息同步低延时,打造远程共享观影的沉浸式体验。

关键特性

特性 指标 优势说明
端到端延时 1 秒左右 接近实时通话体验,远低于传统直播 10-30 秒延迟
抗丢包能力 可达 40% 即使在弱网环境下也能保持流畅观看体验
首帧加载 500 毫秒内 用户打开直播几乎无等待,提升观看体验
全球覆盖 多区域部署 基于 WE-CAN 全球智能路由网络,覆盖全球主要地区

准备工作

在开始接入低延时直播功能之前,请确保您已经完成了以下设置:

  • 已创建应用并获取 App Key。详细步骤请参考 创建应用并获取 AppKey

  • 已为应用开通以下三项服务:音视频通话 2.0 服务、直播服务和低延时直播功能。详细步骤请参考 开通或试用产品

  • 测试接入阶段,建议在 网易云信控制台 中为指定应用开通调试模式,应用正式上线后再改为安全模式。详细说明请参考 Token 鉴权

  • 下载 NERTC SDK

    推荐下载最新版本的 NERTC SDK,SDK 已直接内置低延时直播功能,您无需额外集成单独的低延时直播 SDK。

获取拉流地址

在实现低延时直播功能前,您需要获取拉流地址。具体步骤如下:

  1. 调用 直播服务端接口,创建一个直播频道。

  2. 登录 网易云信控制台

  3. 应用管理 列表中,单击目标应用,进入应用配置页面。

  4. 直播 产品功能设置页面,单击 频道管理子功能配置,进入频道配置页面。

    image.png
  5. 找到您创建的频道,并在 操作 列单击 地址

    image.png
  6. 在弹出的页面中,单击 拉流地址(NERTC) 旁的 复制 按钮,一键复制低延时直播拉流地址。

    image.png

实现低延时直播

开通低延时直播功能后,拉流端可通过以下步骤使用拉流地址实现低延时直播:

  1. 导入相关类后,调用 setupEngineWithContext: 方法初始化 RTC ENGINE 实例。

  2. 设置低延时拉流选项。

    创建 NERtcJoinChannelOptions 对象,并配置其中的 NERtcLowLatencyOptions 参数:

    • enableLowLatency:设置为 YES 以启用低延时直播功能。
    • playCanvas:设置低延时直播视频画布。
    • playTimeout:设置拉流超时时间(可选,保持默认值时可不设置)。

    推荐在 NERtcLowLatencyOptions 中直接设置直播视频的画布,这样能够获得最佳的首帧秒开体验。 如果不在 NERtcLowLatencyOptions 中设置画布,您也可以通过监听远端用户加入房间的回调 onNERtcEngineUserDidJoinWithUserID:userName:,在该回调中获取到主播 uid 后,再通过设置远端画布接口 setupRemoteVideoCanvas:forUserID: 进行设置。

  3. 开始拉流。

    调用 joinChannelWithToken:channelName:myUid:channelOptions:completion: 方法开始拉流,需要设置以下参数:

    • token:鉴权令牌(如果使用调试模式可以传入空字符串)。
    • channelName:低延时拉流地址,即您在 上一步 获取的拉流地址。
    • myUid:拉流用户的唯一标识符。
    • completion:操作完成的回调。

    低延时拉流场景中,拉流用户不能使用 uid 值为 1 加入低延时拉流房间。请确保为拉流用户设置非 1 的有效 uid 值。

  4. 结束拉流。

    当需要结束拉流时,调用 leaveChannel 方法。

示例代码

使用网易云信 NERTC SDK 实现低延时直播拉流示例代码如下:

Objective-C// 步骤 1: 初始化 RTC 引擎
NERtcEngineContext* context = [[NERtcEngineContext alloc] init];
context.engineDelegate = self;
context.appKey = self.appKey;
[[NERtcEngine sharedEngine] setupEngineWithContext:context];

// 步骤 2: 配置低延时拉流选项
NERtcJoinChannelOptions* joinChannelOptions = [[NERtcJoinChannelOptions alloc] init];
joinChannelOptions.lowLatencyOptions = [[NERtcLowLatencyOptions alloc] init];
// 启用低延时直播功能
joinChannelOptions.lowLatencyOptions.enableLowLatency = YES;
// 设置视频渲染画布
NERtcVideoCanvas* remoteCanvas = [[NERtcVideoCanvas alloc] init];
remoteCanvas.container = self.view;
joinChannelOptions.lowLatencyOptions.playCanvas = remoteCanvas;

// 步骤 3: 开始低延时拉流
NSString* channelName = @"nertc://xxxxxxxx"; // 从网易云信控制台获取的低延时拉流地址
uint64_t uid = 123456;                       // 用户的唯一标识符
NSString* token = @"";                       // 鉴权 Token,调试模式下可为空字符串
[[NERtcEngine sharedEngine] joinChannelWithToken:token
                                     channelName:channelName
                                           myUid:uid
                                  channelOptions:joinChannelOptions
                                      completion:^(NSError * _Nullable error,
                                                  uint64_t channelId,
                                                  uint64_t elapesd,
                                                  uint64_t uid,
                                                  NERtcJoinChannelExtraInfo * _Nullable info) {
    // 开始低延时拉流的结果处理
}];

// 步骤 4: 结束拉流
NERtcEx.getInstance().leaveChannel();
此文档是否对你有帮助?
有帮助
去反馈
  • 功能简介
  • 适用场景
  • 关键特性
  • 准备工作
  • 获取拉流地址
  • 实现低延时直播
  • 示例代码