public void ReChannelVideo()
{
NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log);
logEx.Trace("Start ReChannelVideo");
//copy 一份,防止长时间占用锁
Dictionary<string, MonitorChannelRelation> monitorChannelRelationDicTemp = null;
try
{
monitorChannelRelationDicTemp = new Dictionary<string, MonitorChannelRelation>(monitorChannelRelationDic);
}
catch (Exception e)
{
logEx.Error("ReChannelVideo.Execption message:{0}", e.Message);
}
if (monitorChannelRelationDicTemp == null)
{
//记录日志,获取*监控平台的摄像头列表失败
logEx.Error("ReChannelVideo failed.No any monitorChannelRelationDic.");
return;
}
this.cameraVideoRelationDic = new Dictionary<string, List<string>>();
//循环通道关系字典
foreach (KeyValuePair<string, MonitorChannelRelation> monitorChannelRelation in monitorChannelRelationDicTemp)
{
//if (monitorChannelRelation.Value.IsValid && monitorChannelRelation.Value.ConfAccessCode != "" && monitorChannelRelation.Value.CameraNo != "")
if (monitorChannelRelation.Value.IsValid && !string.IsNullOrEmpty(monitorChannelRelation.Value.ConfAccessCode) && !string.IsNullOrEmpty(monitorChannelRelation.Value.CameraNo))
{
string cameraCode = monitorChannelRelation.Value.CameraNo;
string channelLabel = monitorChannelRelation.Value.Label;
logEx.Trace("ReChannelVideo Before SendRtpData,cameraNo:{0},ChannelLabel:{1}",cameraCode,channelLabel);
//移除断线设备
offLineCameras.Remove(cameraCode);
// 启动新摄像头码流
SmcErr err = this.TryStartSendRtpData(cameraCode, channelLabel);
if (!err.IsSuccess())
{
// 原有摄像头编号要置为空,因为旧摄像头已经关闭,避免再次预览旧摄像头,以为还在开启
this.monitorChannelRelationDic[channelLabel].CameraNo = null;
logEx.Trace("ReChannelVideo cameraNo:{0},Channel:{1} StartRtp failed,errNo={2}.", cameraCode, channelLabel, err.ErrNo);
continue;
}
// 关闭音频码流
err = this.SetCameraAudio(channelLabel, cameraCode, false);
if (!err.IsSuccess())
{
logEx.Trace("ReChannelVideo channelLabel:{0},cameraNo:{1} StartAudio failed,errNo={2}.", channelLabel, cameraCode, err.ErrNo);
continue;
}
}
}
}