在直播场景下,主播可以通过 RTMP 推流工具将音视频流推送到 ZEGO 服务器,实现低延迟的效果。观众可以使用 ZEGO Express SDK 拉流。
RTMP 推流工具指的是通过 RTMP 地址进行推流的第三方工具,主要包括硬件推流设备、软件 OBS 等。
)
请联系 ZEGO 技术支持开通服务,通过 RTMP 推流调度 服务端接口获取 RTMP 推流地址。
下文以 OBS 为例介绍 RTMP 工具的推流操作。
)
单击 “推流” 进入流设置页签,选择服务类型为“自定义流媒体服务器”。
将获取到的 RTMP 推流地址填写到“服务器”和“串流密码”字段中。
服务器:对应 RTMP 推流地址,即 rtmp://hosts/AppName/
请注意,RTMP 推流地址 URL,与 CDN 推流鉴权 中的推流地址 URL 不同,不可混用,使用时请您注意区分。
串流密码:对应 RTMP 推流流名,即 “streamID”。
)
)
)
)
使用 RTMP 工具推流后,用户无法通过 RoomStreamUpdate 回调来收到音视频流新增或删除的通知,可以通过以下两种方式获取:
调用 startPlayingStream 接口,传入 RTMP 推流的 “streamID” (即 3.2.1 章节中设置的“串流密码”)拉流播放,下文以超低延迟直播拉流为例,其他拉流方式可参考 快速实现超低延迟直播。
// 流状态更新回调
zg.on('roomStreamUpdate', async (roomID, updateType, streamList, extendedData) => {
// 当 updateType 为 ADD 时,代表有音视频流新增,此时可以调用 startPlayingStream 接口拉取播放该音视频流
if (updateType == 'ADD') {
// 流新增,开始拉流
// 这里为了使示例代码更加简洁,我们只拉取新增的音视频流列表中第的第一条流,在实际的业务中,建议开发者循环遍历 streamList ,拉取每一条音视频流
let playOption = {};
let video = document.create
playOption.resourceMode = 2;
const remoteStream = await zg.startPlayingStream(streamID);
// 创建媒体流播放组件对象,用于播放远端媒体流 。
const remoteView = zg.createRemoteStreamView(remoteStream);
// 将播放组件挂载到页面,"remote-video" 为组件容器 DOM 元素的 id 。
remoteView.play("remote-video");
} else if (updateType == 'DELETE') {
// 流删除,停止拉流
}
});
调用 stopPlayingStream 接口,传入 RTMP 推流的 “streamID”(即 3.2.1 章节中设置的“串流密码”)停止拉取远端推送的音视频流。
// 流状态更新回调
zg.on('roomStreamUpdate', async (roomID, updateType, streamList, extendedData) => {
if (updateType == 'ADD') {
// 流新增,开始拉流
} else if (updateType == 'DELETE') {
// 流删除,通过流删除列表 streamList 中每个流的 streamID 进行停止拉流。
const streamID = streamList[0].streamID;
zg.stopPlayingStream(streamID)
}
});
1. 业务服务器如何知道 RTMP 推流工具是否已开始推流或停止推流?
ZEGO 提供了 publish_start 开始推流和 publish_stop 停止推流回调通知,如有需要请联系 ZEGO 技术支持配置。

联系我们
文档反馈