声网 SDK 提供旁路推流的功能,能将主播的音视频流由声网私有协议转换为标准协议(RTMP 和 RTMPS),然后推到 CDN。CDN 观众点击对应的 URL 即可观看直播。该功能可以丰富直播媒体流的分发渠道,利于推广直播。
请确保已开通 CDN 旁路推流功能,步骤如下:
开通成功后,你可以在用量页面看到旁路推流的使用情况。
在实现旁路推流功能前,请确保你已在项目中完成基本的音视频功能。详见开始互动直播。
参考如下步骤,在你的项目中实现旁路推流:
调用 Stream.init
成功后,频道内主播可以调用 Client.setLiveTranscoding
方法设置音视频流的直播参数 (LiveTranscoding
),如分辨率、码率、帧率、背景色和水印位置。如果你需要转码合图,请在 TranscodingUser
类中设置每个用户的视频参数,详见示例代码。
如果直播参数(
LiveTranscoding
)有更新,Client.on("liveTranscodingUpdated")
回调会被触发并向主播报告更新信息。
频道内主播可以调用 Client.startLiveStreaming
方法向旁路推流直播中增加指定的一路媒体流。推流地址可以在推流后动态增删。
请通过
enableTranscoding
设置是否转码推流。
频道内主播可以调用 Client.stopLiveStreaming
方法向旁路推流直播中删除指定的一路媒体流。
增加或删除一路媒体流时,SDK 会触发 Client.on(liveStreamingStarted)
或 Client.on(liveStreamingFailed)
回调向主播报告当前推流状态。请确保收到该回调后再调用 API 进行下一步操作。
// CDN 推流参数设置。
var LiveTranscoding = {
// 用于旁路推流的输出视频流的总宽度 (px)。640 为默认值。width × height 的最小值为 16 × 16。如果推纯音频流,请将 width × height 设为 16 × 16。
width: 640,
// 用于旁路推流的输出视频流的总高度 (px)。360 为默认值。width × height 的最小值为 16 × 16。如果推纯音频流,请将 width × height 设为 16 × 16。
height: 360,
// 设置推流输出视频的码率 (Kbps),默认值为 400。
videoBitrate: 400,
// 用于旁路推流的输出视频的帧率 (fps)。默认值为 15。取值范围为 [1,30],声网服务器会将高于 30 的帧率设置改为 30。
videoFramerate: 15,
audioSampleRate: AgoraRTC.AUDIO_SAMPLE_RATE_48000,
audioBitrate: 48,
audioChannels: 1,
videoGop: 30,
// 推流输出视频的编码规格。可以设置为 Baseline (66)、Main (77) 或 High (100)。如果设置其他值,声网会统一设为默认值 High (100)。
videoCodecProfile: AgoraRTC.VIDEO_CODEC_PROFILE_HIGH,
userCount: 1,
userConfigExtraInfo: {},
backgroundColor: 0x000000,
// 设置水印图片(仅支持在线 PNG 文件),只支持一个水印。
images: [{
url: "http://www.com/watermark.png",
x: 0,
y: 0,
width: 160,
height: 160,
}],
// 分配用户视窗的合图布局。
transcodingUsers: [{
x: 0,
y: 0,
width: 640,
height: 360,
zOrder: 0,
alpha: 1.0,
// 下面的 uid 应和 Client.join 输入的 uid 保持一致。
uid: 1232,
}],
};
client.setLiveTranscoding(LiveTranscoding);
// 添加一个推流地址。transcodingEnabled 设置为 true,表示开启转码。如开启,则必须通过 setLiveTranscoding 接口配置 LiveTranscoding 类。单主播模式下,我们不建议使用转码。
client.startLiveStreaming("your RTMP URL", true)
// 删除一个推流地址。
client.stopLiveStreaming("your RTMP URL")
同时,我们在 GitHub 提供一个开源的 Live-Streaming 示例项目。你可以在线体验,或者参考 index.js 和 rtc-client.js 的源代码。
同一频道内最多支持 17 位主播。
本服务为收费服务,声网按照音视频转码时长来计费。
声网支持向 CDN 推送 RTMP 和 RTMPS 协议的媒体流。其中,RTMPS 协议仅在转码模式下支持。
如果你对单主播不经过转码直接推流,请略过步骤 1,直接调用 Client.startLiveStreaming
方法并将 enableTranscoding
参数设置为 false
。
不转码情况下,需要使用
AgoraRTC.createClient({mode: "live", codec: "h264"})
模式。
你可以参考视频分辨率表格设置 videoBitrate
的值。如果设置的码率超出合理范围,声网服务器会在合理区间内自动调整码率值。
请确保转码推流和非转码推流中使用的流地址不同。