文档中心
hybrid_hierarchical_delivery_system 超低延迟直播
文档中心
体验 App
SDK 中心
API 中心
常见问题
代码市场
进入控制台
立即注册
登录
中文站 English
  • 文档中心
  • 超低延迟直播
  • 直播能力
  • RTMP 推流到 ZEGO 服务器

RTMP 推流到 ZEGO 服务器

更新时间:2024-09-23 18:23

1 功能简介

在直播场景下,主播可以通过 RTMP 推流工具将音视频流推送到 ZEGO 服务器,实现低延迟的效果。观众可以使用 ZEGO Express SDK 拉流。

RTMP 推流工具指的是通过 RTMP 地址进行推流的第三方工具,主要包括硬件推流设备、软件 OBS 等。

2 前提条件

  • 已联系 ZEGO 技术支持,开通 RTMP 工具推流到 ZEGO 服务器的相关权限。
  • 准备 RTMP 推流工具,例如 OBS。

3 使用步骤

3.1 获取 RTMP 推流地址

请联系 ZEGO 技术支持开通服务,通过 RTMP 推流调度 服务端接口获取 RTMP 推流地址。

3.2 使用 RTMP 工具推流

下文以 OBS 为例介绍 RTMP 工具的推流操作。

3.2.1 设置推流地址

  1. 打开 OBS 工具,在底部工具栏的“控件”页签中,单击“设置”进入设置界面。

  1. 单击 “推流” 进入流设置页签,选择服务类型为“自定义流媒体服务器”。

  2. 将获取到的 RTMP 推流地址填写到“服务器”和“串流密码”字段中。

  • 服务器:对应 RTMP 推流地址,即 rtmp://hosts/AppName/

    请注意,RTMP 推流地址 URL,与 CDN 推流鉴权 中的推流地址 URL 不同,不可混用,使用时请您注意区分。

  • 串流密码:对应 RTMP 推流流名,即 “streamID”。

  1. 单击“确定”,保存以上设置信息。

3.2.2 设置推流引导

  1. 在底部工具栏的“来源”页签,单击 “+” 按钮。

  1. 按需选择输入源,例如“显示器捕获”。

3.2.3 使用 OBS 推流

  1. 在底部工具栏的“控件”页签,单击“开始推流”,即可将音视频流推送到所设置的推流地址,底部出现绿灯,则表示推流成功。
  2. 若需停止推流,单击“控件”页签的“停止推流”即可。

使用 RTMP 工具推流后,用户无法通过 onRoomStreamUpdate 回调来收到音视频流新增或删除的通知,可以通过以下两种方式获取:

  • 使用 RTMP 工具推流后,业务服务器通过业务信令下发第三方推流 “streamID” 给房间内的其他用户,通知房间内的其他用户有流新增或删除。
  • 可以使用 ZEGO 服务端的 增加房间流 与 删除房间流 接口向指定房间增加或删除一路流信息,将 “streamID” 信息下发给房间内的其他用户,此时其他用户可以就通过 onRoomStreamUpdate 回调收到音视频流新增或删除的通知。

3.3 使用 SDK 拉流或停止拉流

调用 startPlayingStream 接口,传入 RTMP 推流的 “streamID” (即 3.2.1 章节中设置的“串流密码”)进行拉流播放。

createCanvasView 接口使用展示

  • 接口内部会根据创建引擎时设置的 “enablePlatformView” 参数及平台支持的方式,自动选择使用 TextureRenderer 或者 PlatformView 。
  • Android 和 iOS 平台会根据创建引擎时设置 “enablePlatformView” 参数,选择使用 TextureRenderer 还是 PlatformView。
  • Web、Windows 和 MacOS 不会受创建引擎时设置 “enablePlatformView” 参数影响,只使用支持的方式。

获取预览用的 Widget,然后使用 viewID 创建一个 ZegoCanvas 对象,开始预览。

// 将此 Widget 加入到页面的渲染树中以显示预览画面
_playViewWidget = await ZegoExpressEngine.instance.createCanvasView((viewID) {
    _playViewID = viewID;

    // Set the playing canvas
    ZegoCanvas canvas = ZegoCanvas.view(viewID);

    // Start playing
    ZegoExpressEngine.instance.startPlayingStream(streamID, 
        canvas: canvas, 
        config: ZegoPlayerConfig(ZegoStreamResourceMode.OnlyCDN,videoCodecID: ZegoVideoCodecID.Default, roomID: roomID));
});

调用 stopPlayingStream 接口,传入 RTMP 推流的 “streamID”(即 3.2.1 章节中设置的“串流密码”)停止拉取远端推送的音视频流。

// 停止拉流
ZegoExpressEngine.instance.stopPlayingStream(streamID);

如果拉流时使用了 createCanvasView,需要调用 destroyCanvasView 接口销毁。

// _playViewID 为调用 [createCanvasView] 时得到的 viewID
ZegoExpressEngine.instance.destroyCanvasView(_playViewID);

4 常见问题

1. 业务服务器如何知道 RTMP 推流工具是否已开始推流或停止推流?

ZEGO 提供了 publish_start 开始推流和 publish_stop 停止推流回调通知,如有需要请联系 ZEGO 技术支持进行配置。

本篇目录
  • 免费试用
  • 提交工单
    咨询集成、功能及报价等问题
    电话咨询
    400 1006 604
    咨询客服
    微信扫码,24h在线

    联系我们

  • 文档反馈