云端直播推流

功能简介: 用于多个主播实时连麦互动。技术实现上,我们会把房间里多个主播的音视频在服务器合成一路流后推流到CDN流媒体服务器,直播观众可以获取RTMP或HLS流观看直播。

互动直播架构图:


互动直播使用流程如下:

  1. 创建直播间并获得推流地址
  2. 开始互动直播
  3. 更新互动直播内容
  4. 观众观看直播
  5. 停止互动直播
  6. 回放点播

1.创建直播间并获得推流地址

2.开始互动直播

  • 调用接口:

//配置混图器编码参数:尺寸为640*360,其他采用默认设置
string mutiMixerCfgs = "[{\
  \"id\": "1",\
	\"cfg\":  {\"width\":640,\"height\":360}\
}]";

//配置混图器内容: 混图器宽高保持比例,为左右布局(示例图如下),左边为user1的1号摄像头, 右边为user2的1号摄像头
string mutiMixerContents = "[{\
  \"id\": "\1\",\
  \"content\": [\
  {\"type\":0,\"keepAspectRatio\":1,\"left\":5,\"top\":181,\"width\":633,\"height\":356,\"param\":{\"camid\":\"usr1.1\"}},\
  {\"type\":0,\"keepAspectRatio\":1,\"left\":642,\"top\":181,\"width\":633,\"height\":356,\"param\":{\"camid\":\"usr2.1\"}}]}\
]";


//配置混图器输出:直播推流地址为rtmp://xxx
string mutiMixerOutputs = "[{\
\"id\": \"1\",\
\"output\": [\
{\"type\":1,\"liveUrl\": \"rtmp://xxx\"}\
]}]";

int rst = axMeeting.startSvrMixer(mutiMixerCfgs, mutiMixerContents, mutiMixerOutputs);
if(rst != 0)
{
  Console.WriteLine("开启 互动直播 出错!");
  ...
}

相关API请参考:

左右布局示例图:

左右布局示例图

  • 回调通知:
//互动直播状态变化通知
void svrMixerStateChanged(object sender, ICloudroomVideoMeetingEvents_svrMixerStateChangedEvent e)
{
  ...
}

相关API请参考:

3.更新互动直播内容

  • 接口调用:

string mixerID = "1";
//混图器尺寸为640*360,帧率为15
string cfg = "[{\"width\":640,\"height\":360,\"frameRate\":15}]";
//混图器内容:画中画布局(示例图如下, 底层640*360, 上层160*90),底层为user1的1号摄像头, 上层为user2的1号摄像头
string mutiMixerContents = "[{\
\"id\": \"1\",\
\"content\": [\
{\"type\":0,\"keepAspectRatio\":1,\"left\":5,\"top\":181,\"width\":633,\"height\":356,\"param\":{\"camid\":\"usr1.1\"}},\
{\"type\":0,\"keepAspectRatio\":1,\"left\":642,\"top\":181,\"width\":633,\"height\":356,\"param\":{\"camid":\"usr2.1\"}}\
]}]";

axMeeting.updateSvrMixerContent(mutiMixerContents)

(2)画中画布局示例图:

画中画布局示例图

相关API请参考:

4.观众观看直播

通过 播放器SDK观看直播.

5.停止互动直播

停止互动直播后,也会触发事件svrMixerStateChanged

  • 接口调用:
axMeeting.stopSvrMixer();

相关API请参考:

7.回放点播

通过 云屋点播API回放点播。