本地直播推流

  1. 创建混图器
  2. 开启直播推流
  3. 直播推流事件处理
  4. 更新图像内容
  5. 结束

1.创建混图器

  • 接口调用:
//混混图器编号:图器唯一标识
string mixerID = "1";
//混图器规格配置:720P,帧率15,其他为默认配置
string mixerCfg = "[{\"width\"}:1280, \"height\":720, \"frameRate\":15]";

//混图器内容配置:混图类型为摄像头,混图时图像保持比例,左右布局,左边为user1的1号摄像头, 右边为user1的2号摄像头
string mixerContent = "[\
{\"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.createLocMixer(mixerID, mixerCfg, mixerContent);

左右布局配置示例图:

左右布局示例图 混图器左右布局实例,左边为user1的1号摄像头, 右边为user2的1号摄像头

相关API请参考:

2.开启直播推流

添加混图器输出后,会触发locMixerOutputInfo通知.如果输出异常,将自动停止推流。

  • 接口调用:
//添加直播推流
string mixId = "1";
//输出配置:输入为摄像头,内容保存到路径为D:/1.mp4的文件中
string mixerOutput = "[{\"type\":0,\"filename\":\"D:/1.mp4\"}]";
Meeting.addLocMixerOutput(mixId, mixerOutput);

相关API请参考:

3.直播推流事件处理

录制过程中都会触发此事件。在此可以实时获得录像文件当前的时长、大小,以及录像文件异常等信息。

  • 回调通知:
//录制文件、直播信息通知
void Meeting_locMixerOutputInfo(object sender, ICloudroomVideoMeetingEvents_locMixerOutputInfoEvent e)
{
    MixerOutputInfoObj obj = JsonConvert.DeserializeObject<MixerOutputInfoObj>(e.p_outputInfo);
    if (obj.state)
    {
	     ...
       //状态处理
    }
}

相关API请参考:

4.更新图像内容

  • 接口调用:
//混图器编号
string mixerID = "1";
//混图器内容: 左右布局,混图类型为摄像头,混图时图像保持比例,左边为user1的1号摄像头, 右边为user1的2号摄像头
sring mixerContent ="[\
{\"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.updateLocMixerContent(mixerID, mixerContent);

上述混图器内容左右布局,详见左右布局

相关API请参考:

5.结束

  • 接口调用:
//混图器编号
string mixerID = "1";
//消毁混图器, 各输出自动结束
axMeeting.destroyLocMixer(mixerID);

相关API请参考: