logo
超低延迟直播
最佳实践
当前页

RTMP 推流到 ZEGO 服务器


功能简介

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

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

前提条件

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

使用步骤

获取 RTMP 推流地址

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

使用 RTMP 工具推流

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

设置推流地址

  1. 打开 OBS 工具,在底部工具栏的“控件”页签中,单击“设置”进入设置界面。
  1. 单击 “推流” 进入流设置页签,选择服务类型为“自定义流媒体服务器”。

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

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

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

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

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

设置推流引导

  1. 在底部工具栏的“来源”页签,单击 “+” 按钮。
  1. 按需选择输入源,例如“显示器捕获”。

使用 OBS 推流

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

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

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

使用 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);

常见问题

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

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

Previous

单流转码

Next

使用 Token 鉴权