客户端推流到CDN

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

功能描述

客户端将直播媒体流发布到 CDN (Content Delivery Network) 的过程称为 客户端推流到CDN。用户需要集成 IArStreamingKit 类进行推流。

客户端在推流过程中,当频道中有多个主播时,客户端默认合流音频,视频合流布局需要客户端调用setLiveTranscoding方法。

客户端推流到 CDN

前提条件

  1. 集成 anyRTC RTC SDK。
  2. 开通第三方CDN服务。

实现方法

  1. 频道内主播可以调用 setLiveTranscoding 方法设置音视频流的直播参数 (LiveTranscoding),如分辨率、码率、帧率、水印和背景色位置。如果你需要多主播转码合图,请在 TranscodingUser 类中设置每个主播的参数,详见示例代码

  2. 频道内主播可以调用 pushStream 方法向 CDN 推流直播中增加指定的一路媒体流。客户端可以创建多个Streaming 类进行推多个地址。

  3. (可选)频道内主播再次调用 setLiveTranscoding 方法更新音视频流的直播参数 (LiveTranscoding)。

    直播参数(LiveTranscoding)更新时,onTranscodingUpdated 回调会被触发并向主播报告更新信息。

  4. 频道内主播可以调用 unPushStream 方法向 CDN 暂停推流。

示例代码

// C++

// 设置音视频音频:该步骤是向音视频引擎中获取音视频数据,为下方的合流提供音视频源
m_streamKit->SetIRtcEngine(m_rtcEngine);

// CDN 推流参数设置。
LiveTranscoding config;
config.audioSampleRate = TYPE_44100;
config.audioChannels = 2;
config.audioBitrate = 48;
// 用于旁路推流的输出视频流的总宽度 (px)。360 为默认值。
config.width = 360;
// 用于旁路推流的输出视频流的总高度 (px)。640 为默认值。
config.height = 640;
// 设置推流输出视频的码率 (Kbps),默认值为 400。
cofig.videoBitrate = 400;
// 用于旁路推流的输出视频的帧率 (fps)。默认值为 15。取值范围为 [1,30],anyRTC 服务器会将高于 30 的帧率设置改为 30。
config.videoFramerate = 15;
// 如果 userCount > 1,则需要为每个 transcodingUser 分别设置布局。
config.userCount = 1; 
// 推流输出视频的编码规格。可以设置为 Baseline (66)、Main (77) 或 High (100)。如果设置其他值,anyRTC 会统一设为默认值 High (100)。
config.videoCodecProfile = HIGH;

// 分配用户视窗的合图布局。
config.transcodingUser = new TranscodingUser[config.userCount];
// 下面的 uid 应和 joinChannel() 输入的 uid 保持一致。
config.transcodingUser[0].uid = 123456; 
config.transcodingUser[0].x = 0;
config.transcodingUser[0].audioChannel = 0;
config.transcodingUser[0].y = 0;
config.transcodingUser[0].width = 640;
config.transcodingUser[0].height = 720;

// CDN 推流参数设置。注意:调用这个接口前提是需要推流的视频大小以及音频配置,后续的合流布局也需要调用该方法进行相应的布局
m_streamKit->setLiveTranscoding(config);

// 设置视频合流推流
m_streamKit->SetMode(PM_VidMix);

// 开始推流:向CDN推流
m_streamKit->PushStream(url);

if (config.transcodingUsers)
{
    delete[] config.transcodingUsers;
}
// 更新布局
m_streamKit->setLiveTranscoding(config);

// 停止推流。
m_streamKit->UnPushStream();

合图示例1:两人横向平铺

Canvas:
     width: 640
     height: 360
     backgroundColor: #FFFFFF

User0:
      userId: 123
      x: 0
      y: 0
      width: 320
      height: 360
      zOrder: 1
      alpha: 1.0

User1:
      userId: 456
      x: 320
      y: 0
      width: 320
      height: 360
      zOrder: 1
      alpha: 1.0

合图示例2:三人纵向平铺

Canvas:
      width: 360
      height: 640
      backgroundColor: #FFFFFF

   User0:
      userId: 123
      x: 0
      y: 0
      width: 360
      height: 640
      zOrder: 1
      alpha: 1.0

   User1:
       userId: 456
       x: 0
       y: 320
       width: 180
       height: 320
       zOrder: 2
       alpha: 1.0

   User2:
       userId: 789
       x: 180
       y: 320
       width: 180
       height: 320
       zOrder: 2
       alpha: 1.0

合图示例3:1 人全屏 + N 人悬浮小窗

Canvas:
   width: 360
   height: 640
   backgroundColor: #FFFFFF

User0:
   userId: 123
   x: 0
   y: 0
   width: 360
   height: 640
   zOrder: 1
   alpha: 1.0

User1:
    userId: 456
    x: 45
    y: 390
    width: 110
    height: 213
    zOrder: 2
    alpha: 1.0

User2:
    userId: 789
    x: 185
    y: 390
    width: 110
    height: 213
    zOrder: 2
    alpha: 1.0

API 参考

注意事项

  • 同一频道内最多支持 50 位主播。
  • 客户端推流转码时,anyRTC 不会收取转码费用。
  • 如果音频直播无需在调用setLiveTranscoding方法。
  • 本地音视频的参数为RTC中的音视频参数。
  • 需要推多个地址的,请初始化多个 IArStreamingKit 类,进行不同地址推流。