服务端推流到CDN

最近更新时间:2022-09-20 05:17:40

推流到 CDN

功能描述

将视频流推送到 CDN (Content Delivery Network) 又称之为旁路直播,主要是适用于直播场景。例如:将主播的音视频流推送到 CDN ,然后将其内容分发至各大直播平台进行直播。

当一个频道中涉及到多个主播时,我们需要将多个直播画面合成一路画面进行转码,同时还支持设置音频属性及合图布局。

本服务为收费服务,详见 RTMP 推流收费。

CDN推流 推流到 CDN

前提条件

请确保已经开通 CDN 旁路直播,如果尚未开通,请参考此步骤

实现方法

操作步骤:

  1. 在发布音视频流之前,主播可以通过 ArRTCClient.setLiveTranscoding 方法设置 CDN 推流到属性,如分辨率、码率、帧率、背景色和水印位置。如果频道中有多个主播,需要配置转码 transcodingEnabled,同时在 transcodingUsers 中配置每个主播的视频参数,比如视频宽高、位置、层级等。
  2. 主播加入频道并发布本地音视频轨道成功之后,可以调用 ArRTCClient.startLiveStreaming 方法开始推流,可以将(单个或多个)主播的音视频推送至 CDN 进行内容分发。
  3. 主播调用 ArRTCClient.stopLiveStreaming 方法可以停止推流操作。
  4. 通过 ArRTCClient.on("live-streaming-error")/ArRTCClient.on("live-streaming-warning") 方法监听推流过程中的异常情况。

示例代码

// 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,
    width: 640,
    height: 360,
    zOrder: 0,
    alpha: 1.0,
    // 下面的 uid 应和 ArRTCClient.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);
});

API 参考

API描述
ArRTCClient.setLiveTranscoding设置直播推流(转码的)配置。
ArRTCClient.startLiveStreaming开始 CDN 推流。
ArRTCClient.stopLiveStreaming停止 CDN 推流。
ArRTCClient.on("live-streaming-error")CDN 推流出现错误。
ArRTCClient.on("live-streaming-warning")CDN 推流发生警告。