コード例 #1
0
 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__";
     }
 }
コード例 #2
0
        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("添加成功!"));
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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));
        }
コード例 #6
0
        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);
                }
            }
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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("修改失败,数据无变化!"));
            }
        }
コード例 #10
0
 public BaseModel <String> EditStreamProxy(StreamProxyDto dto)
 {
     return(zLServerService.EditStreamProxy(dto, GetUserDto()));
 }
コード例 #11
0
        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);
        }