public PlayStreamProxyDto(String zlServerIp, StreamProxyDto streamProxy, DomainDto domain, ApplicationDto application) : this(zlServerIp) { this.StreamProxy = streamProxy; this.Domain = domain; this.Application = application; vHost = domain.DomainName; if (GloableCache.ZLMediaServerConfig.ContainsKey("general.enableVhost") && GloableCache.ZLMediaServerConfig["general.enableVhost"] != "1") { vHost = "__defaultVhost__"; } }
public BaseModel <string> AddStreamProxy(StreamProxyDto dto, UserDto owner) { BaseModel <string> result = new BaseModel <string>(); if (dto == null || String.IsNullOrWhiteSpace(dto.StreamId) || String.IsNullOrWhiteSpace(dto.StreamName) || String.IsNullOrWhiteSpace(dto.PullStreamUrl)) { return(result.Failed("参数错误,流Id/名称/拉流地址不能为空!")); } dto.StreamId = dto.StreamId.Trim(); var domain = domainAndAppService.FindDomain(dto.DomainId); if (domain == null) { return(result.Failed("参数错误,找不到域名!")); } var application = domainAndAppService.FindApplication(dto.ApplicationId); if (application == null) { return(result.Failed("参数错误,找不到应用!")); } if (DataBaseCache.StreamProxies.Where(p => p.DomainId == dto.DomainId && p.ApplicationId == dto.ApplicationId && p.StreamId == dto.StreamId).Any()) { return(result.Failed("参数错误,流ID已存在!")); } dto.Id = Tools.NewID; dto.CreateBy = owner.Id; dto.CreateTs = DateTime.Now; dto.UpdateBy = owner.Id; dto.UpdateTs = DateTime.Now; var dbModel = mapper.Map <TbStreamProxy>(dto); dbContext.StreamProxies.Add(dbModel); var flag = dbContext.SaveChanges() > 0 ? true : false; if (flag) { DataBaseCache.StreamProxies.Add(dbModel); if (dbModel.State == (int)BaseStatus.Normal) { //开始拉流 StartPullStreamProxy(dto, domain, application); } } return(result.Success("添加成功!")); }
public BaseModel <String> AddStreamProxy(StreamProxyDto streamProxyDto, UserDto opera) { BaseModel <String> result = new BaseModel <string>(); var domain = GetDomain(streamProxyDto.DomainId); if (domain == null) { return(result.Failed("找不到该域名!")); } var app = GetApplication(streamProxyDto.AppId); if (app == null) { return(result.Failed("找不到该应用!")); } if (dbContext.TbStreamProxy.Where(p => p.DomainId == streamProxyDto.Id && p.AppId == streamProxyDto.AppId && p.StreamName == streamProxyDto.StreamName && p.State != (int)StreamProxyState.Deleted ).Any()) { return(result.Failed("存在相同流名称!")); } streamProxyDto.Id = Tools.NewID; streamProxyDto.CreateBy = opera.Id; streamProxyDto.CreateTs = DateTime.Now; streamProxyDto.UpdateBy = opera.Id; streamProxyDto.UpdateTs = streamProxyDto.CreateTs; var dbModle = mapper.Map <TbStreamProxy>(streamProxyDto); dbContext.TbStreamProxy.Add(dbModle); var flag = dbContext.SaveChanges() > 0 ? true : false; if (flag) { streamProxyDto.CreateByNavigation = opera; streamProxyDto.UpdateByNavigation = opera; RedisHelper.Instance.SetHash <StreamProxyDto>(streamProxyDto.Id.ToString(), streamProxyDto); result.Success("添加成功!"); if (app.Status == ApplicationState.Normal && domain.Status == DomainState.Normal && streamProxyDto.State == StreamProxyState.Normal) { //开始拉流逻辑 AddStreamProxy(streamProxyDto, domain, app); } } return(result); }
public BaseModel <String> Add(StreamProxyDto dto) { BaseModel <String> baseModel = new BaseModel <String>(); try { baseModel = mediaService.AddStreamProxy(dto, UserInfo); } catch (Exception ex) { baseModel.Failed(ex.Message); } return(baseModel); }
private CloseStreamsResponse StopStreamProxy(StreamProxyDto dto, DomainDto domain = null, ApplicationDto application = null) { return(null); ConsoleHelper.Failed("开始断流:" + dto.StreamName); if (domain == null) { domain = GetDomain(dto.DomainId); } if (application == null) { application = GetApplication(dto.AppId); } return(Tools.ZLClient.closeStreams(null, domain.DomainName, application.App, dto.StreamName, true)); }
public void StopPullStreamProxy(StreamProxyDto dto) { var domain = DataBaseCache.Domains.Where(p => p.Id == dto.DomainId).First(); var application = DataBaseCache.Applications.Where(p => p.Id == dto.ApplicationId).First(); var vHost = domain.DomainName; if (GloableCache.ZLMediaServerConfig.ContainsKey("general.enableVhost") && GloableCache.ZLMediaServerConfig["general.enableVhost"] != "1") { vHost = "__defaultVhost__"; } if (domain.State != (int)BaseStatus.Normal || application.State != (int)BaseStatus.Normal || dto.State != (int)BaseStatus.Normal) { //当前流是否在线 var streamMiedasExist = GloableCache.MediaStreams.Where(p => p.vhost == vHost && p.app == application.AppName && p.stream == dto.StreamId).Any(); if (streamMiedasExist && GloableCache.ZLServerOnline) //当前流在线并且服务器在线 { GloableCache.ZLClient.delStreamProxy(vHost + "/" + application.AppName + "/" + dto.StreamId); } } }
public ZLResponse <BodyKey> AddStreamProxy(StreamProxyDto dto, DomainDto domain = null, ApplicationDto application = null) { if (domain == null) { domain = GetDomain(dto.DomainId); } if (application == null) { application = GetApplication(dto.AppId); } ConsoleHelper.Warning("开始拉流:" + dto.Name + ",域名[" + domain.DomainName + "],应用:[" + application.App + "],流[" + dto.StreamName + "]"); var resp = Tools.ZLClient.addStreamProxy( domain.DomainName, application.App, dto.StreamName, dto.SourceUrl, dto.EnableRtsp, dto.EnableRtmp, dto.EnableHls, dto.EnableMp4, (STRealVideo.Lib.RTPPullType)(int) dto.RtpType ); if (resp.code != 0 || resp.data == null || String.IsNullOrWhiteSpace(resp.data.key)) { dto.State = StreamProxyState.Forbid; //拉流失败 EditStreamProxy(dto); ConsoleHelper.Failed("拉流失败:" + dto.Name + ",域名[" + domain.DomainName + "],应用:[" + application.App + "],流[" + dto.StreamName + "]"); } else { ConsoleHelper.Success("拉流成功:" + dto.Name + ",域名[" + domain.DomainName + "],应用:[" + application.App + "],流[" + dto.StreamName + "]"); } return(resp); }
public STRealVideo.Lib.ZLResponse <STRealVideo.Lib.Models.BodyKey> StartPullStreamProxy(StreamProxyDto streamProxy, DomainDto domain = null, ApplicationDto application = null) { STRealVideo.Lib.ZLResponse <STRealVideo.Lib.Models.BodyKey> result = new STRealVideo.Lib.ZLResponse <STRealVideo.Lib.Models.BodyKey>(); if (!GloableCache.ZLServerOnline) { return(result.Failed("服务器不在线!")); } if (domain == null) { domain = DataBaseCache.Domains.Where(p => p.Id == streamProxy.DomainId).Select(p => mapper.Map <DomainDto>(p)).FirstOrDefault(); } if (application == null) { application = DataBaseCache.Applications.Where(p => p.Id == streamProxy.ApplicationId).Select(p => mapper.Map <ApplicationDto>(p)).FirstOrDefault(); } if (domain == null || application == null) { result.Failed("找不到域名或应用!"); } if (domain.State != (int)BaseStatus.Normal) { result.Failed("域名未启用!"); } if (application.State != (int)BaseStatus.Normal) { result.Failed("应用未启用!"); } result = GloableCache.ZLClient.addStreamProxy(domain.DomainName, application.AppName, streamProxy.StreamId, streamProxy.PullStreamUrl, streamProxy.EnableHLS, streamProxy.EnableMP4, (STRealVideo.Lib.RTPPullType)((int)streamProxy.RtpType)); return(result); }
public BaseModel <string> EditStreamProxy(StreamProxyDto dto, UserDto owner) { BaseModel <string> result = new BaseModel <string>(); if (dto == null || String.IsNullOrWhiteSpace(dto.StreamId) || String.IsNullOrWhiteSpace(dto.StreamName) || String.IsNullOrWhiteSpace(dto.PullStreamUrl)) { return(result.Failed("参数错误,流Id/名称/拉流地址不能为空!")); } dto.StreamId = dto.StreamId.Trim(); var domain = domainAndAppService.FindDomain(dto.DomainId); if (domain == null) { return(result.Failed("参数错误,找不到域名!")); } var application = domainAndAppService.FindApplication(dto.ApplicationId); if (application == null) { return(result.Failed("参数错误,找不到应用!")); } if (DataBaseCache.StreamProxies.Where(p => p.DomainId == dto.DomainId && p.ApplicationId == dto.ApplicationId && p.StreamId == dto.StreamId && p.Id != dto.Id).Any()) { return(result.Failed("参数错误,流ID已存在!")); } var dbModel = dbContext.StreamProxies.Where(p => p.Id == dto.Id).FirstOrDefault(); if (dbModel == null) { return(result.Failed("参数错误,找不到该记录!")); } StopPullStreamProxy(mapper.Map <StreamProxyDto>(dbModel));//编辑以前先停止拉流 dbModel.StreamId = dto.StreamId; dbModel.Description = dto.Description; dbModel.StreamName = dto.StreamName; dbModel.PullStreamUrl = dto.PullStreamUrl; dbModel.EnableHLS = dto.EnableHLS; dbModel.EnableMP4 = dto.EnableMP4; dbModel.RtpType = (int)dto.RtpType; dbModel.UpdateBy = owner.Id; dbModel.UpdateTs = DateTime.Now; var flag = dbContext.SaveChanges() > 0 ? true : false; if (flag) { DataBaseCache.StreamProxies.Remove(DataBaseCache.StreamProxies.Where(p => p.Id == dto.Id).First()); DataBaseCache.StreamProxies.Add(dbModel); if (dto.State == (int)BaseStatus.Normal) { //开始拉流 StartPullStreamProxy(dto, domain, application); } else { //停止拉流 StopPullStreamProxy(dto); } return(result.Success("修改成功!")); } else { return(result.Failed("修改失败,数据无变化!")); } }
public BaseModel <String> EditStreamProxy(StreamProxyDto dto) { return(zLServerService.EditStreamProxy(dto, GetUserDto())); }
public BaseModel <String> EditStreamProxy(StreamProxyDto streamProxyDto, UserDto opera = null) { BaseModel <String> result = new BaseModel <string>(); var dbModle = dbContext.TbStreamProxy.Include(p => p.CreateByNavigation).Where(predicate => predicate.Id == streamProxyDto.Id).FirstOrDefault(); if (dbModle == null) { return(result.Failed("找不到数据!")); } var domain = GetDomain(streamProxyDto.DomainId); if (domain == null) { return(result.Failed("找不到该域名!")); } var app = GetApplication(streamProxyDto.AppId); if (app == null) { return(result.Failed("找不到该应用!")); } if (dbContext.TbStreamProxy.Where(p => p.DomainId == streamProxyDto.Id && p.Id != streamProxyDto.Id && p.AppId == streamProxyDto.AppId && p.StreamName == streamProxyDto.StreamName && p.State != (int)StreamProxyState.Deleted ).Any()) { return(result.Failed("存在相同流名称!")); } StopStreamProxy(mapper.Map <StreamProxyDto>(dbModle), domain, app); if (opera != null) { dbModle.UpdateBy = opera.Id; dbModle.UpdateTs = DateTime.Now; } dbModle.AppId = streamProxyDto.AppId; dbModle.DomainId = streamProxyDto.DomainId; dbModle.Name = streamProxyDto.Name; dbModle.Remark = streamProxyDto.Remark; dbModle.StreamName = streamProxyDto.StreamName; dbModle.SourceUrl = streamProxyDto.SourceUrl; dbModle.EnableHls = streamProxyDto.EnableHls; dbModle.EnableMp4 = streamProxyDto.EnableMp4; dbModle.EnableRtmp = streamProxyDto.EnableRtmp; dbModle.EnableRtsp = streamProxyDto.EnableRtsp; dbModle.RtpType = (int)streamProxyDto.RtpType; dbModle.State = (int)streamProxyDto.State; var flag = dbContext.SaveChanges() > 0 ? true : false; var dto = mapper.Map <StreamProxyDto>(dbModle); if (flag) { dto.UpdateByNavigation = opera; result.Success("保存成功!"); if (app.Status == ApplicationState.Normal && domain.Status == DomainState.Normal && streamProxyDto.State == StreamProxyState.Normal) { //开始拉流逻辑 AddStreamProxy(dto, domain, app); } else { //执行断流逻辑 StopStreamProxy(mapper.Map <StreamProxyDto>(dbModle), domain, app); } } RedisHelper.Instance.SetHash <StreamProxyDto>(dto.Id.ToString(), dto); return(result); }