实现低延时直播拉流
更新时间: 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。
获取拉流地址
在实现低延时直播功能前,您需要获取拉流地址。具体步骤如下:
-
调用 直播服务端接口,创建一个直播频道。
-
登录 网易云信控制台。
-
在 应用管理 列表中,单击目标应用,进入应用配置页面。
-
在 直播 产品功能设置页面,单击 频道管理 的 子功能配置,进入频道配置页面。
-
找到您创建的频道,并在 操作 列单击 地址。
-
在弹出的页面中,单击 拉流地址(NERTC) 旁的 复制 按钮,一键复制低延时直播拉流地址。
实现低延时直播
开通低延时直播功能后,拉流端可通过以下步骤使用拉流地址实现低延时直播:
-
导入相关类后,调用
setupEngineWithContext:
方法初始化 RTC ENGINE 实例。 -
设置低延时拉流选项。
创建
NERtcJoinChannelOptions
对象,并配置其中的NERtcLowLatencyOptions
参数:enableLowLatency
:设置为YES
以启用低延时直播功能。playCanvas
:设置低延时直播视频画布。playTimeout
:设置拉流超时时间(可选,保持默认值时可不设置)。
推荐在
NERtcLowLatencyOptions
中直接设置直播视频的画布,这样能够获得最佳的首帧秒开体验。 如果不在NERtcLowLatencyOptions
中设置画布,您也可以通过监听远端用户加入房间的回调onNERtcEngineUserDidJoinWithUserID:userName:
,在该回调中获取到主播uid
后,再通过设置远端画布接口setupRemoteVideoCanvas:forUserID:
进行设置。 -
开始拉流。
调用
joinChannelWithToken:channelName:myUid:channelOptions:completion:
方法开始拉流,需要设置以下参数:token
:鉴权令牌(如果使用调试模式可以传入空字符串)。channelName
:低延时拉流地址,即您在 上一步 获取的拉流地址。myUid
:拉流用户的唯一标识符。completion
:操作完成的回调。
低延时拉流场景中,拉流用户不能使用
uid
值为 1 加入低延时拉流房间。请确保为拉流用户设置非 1 的有效 uid 值。 -
结束拉流。
当需要结束拉流时,调用
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();