声网 SDK 提供旁路推流的功能,能将主播的音视频流由声网私有协议转换为标准协议(RTMP 和 RTMPS),然后推到 CDN。CDN 观众点击对应的 URL 即可观看直播。该功能可以丰富直播媒体流的分发渠道,利于推广直播。
第一次使用旁路推流,需要开通服务,步骤如下:
登录控制台,在项目管理页面,选择需要开通输入旁路推流服务的项目,点击配置。
在项目配置页面选择服务配置,在旁路推流模块点击启用。
启用客户端 SDK API。启用后不能关闭。
仔细阅读弹窗提示,点击保存。成功开启旁路推流服务后,启用按钮会切换为配置按钮,用于配置旁路推流。
开通成功后你可以在用量页面看到旁路推流的使用情况。
开始前,请确保你已参考快速开始在你的项目中实现基本的实时音视频功能。
参考如下步骤,在你的项目中实现旁路推流:
在发布之前,在主播端调用 AgoraRTCClient.setLiveTranscoding
方法设置旁路推流的配置,如分辨率、码率、帧率、背景色和水印位置。如果你需要转码合图,请在 transcodingUsers
类中设置每个用户的视频参数,详见示例代码。
在主播端调用 AgoraRTCClient.startLiveStreaming
方法向旁路推流直播中增加指定的一路媒体流。推流地址可以在推流后动态增删。你可以通过 transcodingEnabled
参数设置是否转码推流。
在主播端调用 AgoraRTCClient.stopLiveStreaming
方法向旁路推流直播中删除指定的一路媒体流。
通过监听 AgoraRTCClient.on("live-streaming-error")
/AgoraRTCClient.on("live-streaming-warning")
来感知推流中途出现的异常情况
client
是指通过 AgoraRTC.createClient
创建的本地客户端对象。
// CDN 推流参数设置。
const LiveTranscoding = {
// 用于旁路推流的输出视频流的总宽度 (px)。640 为默认值。
width: 640,
// 用于旁路推流的输出视频流的总高度 (px)。360 为默认值。
height: 360,
// 设置推流输出视频的码率 (Kbps),默认值为 400。
videoBitrate: 400,
// 用于旁路推流的输出视频的帧率 (fps)。默认值为 15。
videoFramerate: 15,
audioSampleRate: 48000,
audioBitrate: 48,
audioChannels: 1,
videoGop: 30,
// 推流输出视频的编码规格。可以设置为 Baseline (66)、Main (77) 或 High (100)。如果设置其他值,声网会统一设为默认值 High (100)。
videoCodecProfile: 100,
userCount: 1,
userConfigExtraInfo: "",
backgroundColor: 0x000000,
// 设置水印图片(仅支持在线 PNG 文件),只支持一个水印。
watermark: {
url: "http://www.com/watermark.png",
x: 0,
y: 0,
width: 160,
height: 160,
},
// 分配用户视窗的合图布局。
transcodingUsers: [{
x: 0,
y: 0,
// 如果不想显示某用户的视窗,可将宽和高同时设为 1,让该用户视窗变成一个点。
// 不能把宽和高同时设为 0,否则 SDK 会报错。
width: 640,
height: 360,
zOrder: 0,
alpha: 1.0,
// 下面的 uid 应和 AgoraRTCClient.join 输入的 uid 保持一致。
uid: 1232,
}],
};
// 注意这是一个异步方法,请确保异步操作完成后再进行下一步操作。
client.setLiveTranscoding(LiveTranscoding).then(() => {
console.log("set live transcoding success");
});
// 添加一个推流地址。transcodingEnabled 设置为 true,表示开启转码。如开启,则必须通过 setLiveTranscoding 接口配置 LiveTranscoding 类。单主播模式下,我们不建议使用转码。
// 注意这是一个异步方法,请确保异步操作完成后再进行下一步操作。
client.startLiveStreaming("your RTMP URL", true).then(() => {
console.log("start live streaming success");
})
// 删除一个推流地址,停止推流。
// 注意这是一个异步方法,请确保异步操作完成后再进行下一步操作。
client.stopLiveStreaming("your RTMP URL").then(() => {
console.log("stop live streaming success");
})
// 监听推流中途的错误, 错误码列表可以参考 API 文档
client.on("live-streaming-error", (url, err) => {
console.log("url", url, "live streaming error!", err.code);
});
videoBitrate
的值。如果设置的码率超出合理范围,声网服务器会在合理区间内自动调整码率值。Client.startLiveStreaming
方法并将 enableTranscoding
参数设置为 false
。不转码情况下,需要使用 AgoraRTC.createClient({mode: "live", codec: "h264"})
模式。