声网 SDK 提供旁路推流的功能,能将主播的音视频流由声网私有协议转换为标准协议(RTMP 和 RTMPS),然后推到 CDN。CDN 观众点击对应的 URL 即可观看直播。该功能可以丰富直播媒体流的分发渠道,利于推广直播。
使用旁路推流前,请确保已联系声网技术支持开通旁路推流服务。
你可以根据直播场景实现不同的推流方式:转码推流、非转码推流。转码功能本质是一个编解码的功能,用于将多路音视频流合成一路音视频流,可以保障观众看到的多位主播直播的同步性。因此,一般来说,多人连麦直播的场景下,旁路推流时需要开启转码功能;单主播直播时,只向 CDN 推送一路媒体流,不用开启转码功能。
你可以参考转码推流 API 调用时序图和如下步骤实现转码推流。
startRtmpStreamWithTranscoding
并传入来自 CDN 厂商的旁路推流地址和你设置的转码属性,从而开始向一个 CDN 地址进行转码推流。userCount
和 transcodingUsers
为必填,其余属性你可以自定义或使用默认值。start
方法。start
后,请确保在收到 onRtmpStreamingStateChanged
回调报告推流状态为 RUNNING(2)
后再执行其他操作。如果你收到其他推流状态,请参考旁路推流异常处理的最佳实践。updateRtmpTranscoding
动态更新转码属性,如调整主播人数、主播的画面布局。转码属性更新成功后,SDK 会触发 onTranscodingUpdated
回调。stopRtmpStream
并传入待结束推流的 CDN 地址,从而结束当前推流。stop
并填入对应的推流地址。onRtmpStreamingStateChanged
回调报告推流状态为 IDLE(0)
。如果收到其他推流状态,请参考旁路推流异常处理的最佳实践。你可以参考非转码推流 API 调用时序图和如下步骤实现非转码推流。
joinChannel
方法的 uid
参数不能留空或传 0,否则频道内主播无法推送出媒体流。startRtmpStreamWithoutTranscoding
并传入来自 CDN 厂商的旁路推流地址,从而开始向一个 CDN 地址进行非转码推流。start
方法。start
后,请确保在收到 onRtmpStreamingStateChanged
回调报告推流状态为 RUNNING(2)
后再执行其他操作。如果你收到其他推流状态,请参考旁路推流异常处理的最佳实践。stopRtmpStream
并传入待结束推流的 CDN 地址,从而结束当前推流。stop
并填入对应的推流地址。onRtmpStreamingStateChanged
回调报告推流状态为 IDLE(0)
。如果收到其他推流状态,请参考旁路推流异常处理的最佳实践。为展示开始推流、动态更新推流转码属性、异常情况下重试推流的代码逻辑,声网在 GitHub 提供开源示例项目,详见 RTMPStream。
声网推荐你根据转码输出的实际视频效果控制参与转码的主播人数,且同一频道内不得超出 17 人。
一次推流代表一个推流任务。最大并发任务数(PCW)默认为 200,表示允许你在一个声网项目下最多同时运行 200 个推流任务。如需更高配额,请联系技术支持。
客户端推流支持的视频属性上限为:分辨率 1920 × 1080,帧率 30 fps。
客户端推流支持的最大推流路数详见下表:
服务类型 | 中国大陆 | 欧洲 | 美洲 | 亚洲(除中国大陆) |
---|---|---|---|---|
客户端推流 | SD:200,HD:50,FHD:20 | SD:50,HD:20,FHD:5 | SD:50,HD:20,FHD:5 | SD:50,HD:20,FHD:5 |
分辨率说明:
声网支持向 CDN 推送 RTMP 和 RTMPS 协议的媒体流。
你可以从 CDN 厂商获取推流地址。
为避免代码逻辑出错,请确保转码推流和非转码推流中使用的流地址不同。
本节提供使用旁路推流功能时常用的参考信息。
设置转码输出媒体流的视频分辨率、帧率和码率时,声网推荐你使用默认值。你也可以参考下表设值。如果设置的码率超出合理范围,声网服务器会在合理区间内自动调整码率。
分辨率(宽 × 高) | 帧率(fps) | 码率 (Kbps) |
---|---|---|
160 × 120 | 15 | 130 |
120 × 120 | 15 | 100 |
320 × 180 | 15 | 280 |
180 × 180 | 15 | 200 |
240 × 180 | 15 | 240 |
320 × 240 | 15 | 400 |
240 × 240 | 15 | 280 |
424 × 240 | 15 | 440 |
640 × 360 | 15 | 800 |
360 × 360 | 15 | 520 |
640 × 360 | 30 | 1200 |
360 × 360 | 30 | 800 |
480 × 360 | 15 | 640 |
480 × 360 | 30 | 980 |
640 × 480 | 15 | 1000 |
480 × 480 | 15 | 800 |
640 × 480 | 30 | 1500 |
480 × 480 | 30 | 1200 |
848 × 480 | 15 | 1220 |
848 × 480 | 30 | 1860 |
640 × 480 | 10 | 800 |
1280 × 720 | 15 | 2260 |
1280 × 720 | 30 | 3420 |
960 × 720 | 15 | 1820 |
960 × 720 | 30 | 2760 |
1920 x 1080 | 15 | 4160 |
1920 x 1080 | 30 | 6300 |
1920 x 1080 | 60 | 6500 |
本文以 C++ 语言为例,如果你使用其他语言的 API,请参考 API 对照表:
C++ | Objective-C | Java |
---|---|---|
startRtmpStreamWithoutTranscoding |
startRtmpStreamWithoutTranscoding |
startRtmpStreamWithoutTranscoding |
startRtmpStreamWithTranscoding |
startRtmpStreamWithTranscoding |
startRtmpStreamWithTranscoding |
updateRtmpTranscoding |
updateRtmpTranscoding |
updateRtmpTranscoding |
stopRtmpStream |
stopRtmpStream |
stopRtmpStream |
onRtmpStreamingStateChanged |
rtmpStreamingChangedtoState |
onRtmpStreamingStateChanged |
onRtmpStreamingEvent |
rtmpStreamingEventWithUrl |
onRtmpStreamingEvent |
各平台 API 解释详见如下:
使用旁路推流功能时,你可能还需参考如下文档: