private bool CheckError(int errorId, string errorMsg = "") { if (errorId >= 0) { return(false); } OnError(errorId, _command, errorMsg + FFmpegHelper.GetStrError(errorId)); return(true); }
public void StartPush(CommandDto commandDto) { //压入推送对象进入推送列表 ChannelPusher channelPusher = ChannelPusherService.PushChannelIntoWorkingList(commandDto); if (channelPusher != null) { Task.Factory.StartNew((objStat) => { try { PushAMsgIn(channelPusher.CommandDto.ChanneId, channelPusher.CommandDto.Id, $"推流日志: 开始推送成功.", LiveStateType.Started); using (var ffPublisher = new FFmpegPublisher(channelPusher.CommandDto)) { int countTimes = 0; ffPublisher.OnFinishedWritePktEvent += (retId, command) => { //推流速度太快, 采取30条提取一条. ++countTimes; if (countTimes >= 30) { if (retId == 0) { PushAMsgIn(command.ChanneId, command.Id, $"推流日志: 推送Pack成功.", LiveStateType.Pushing); } else { PushAMsgIn(command.ChanneId, command.Id, $"推流日志: 推送Pack失败, 返回值:{FFmpegHelper.GetStrError(retId)}.", LiveStateType.Error); } countTimes = 0; } }; ffPublisher.OnErrorEvent += (errorId, command, errorMsg) => { PushAMsgIn(command.ChanneId, command.Id, $"推流日志:推流异常, 异常ID:{errorId} 异常信息: {errorMsg }", LiveStateType.Error); }; ffPublisher.OnPushStopedEvent += command => { PushAMsgIn(command.ChanneId, command.Id, $"推流日志:停止推流.", LiveStateType.Stoped); }; ffPublisher.OnStartCompletedEvent += command => { PushAMsgIn(command.ChanneId, command.Id, $"推流日志:拉流/推流初始化成功,即将开始发送数据包.", LiveStateType.Started); }; //启动推送 ffPublisher.Start(channelPusher.CTS.Token); } } catch (Exception ex) { LogHelper.SetLogError($"推流日志:{ex.ToString()}"); } }, channelPusher.CTS.Token, TaskCreationOptions.LongRunning); if (channelPusher.CommandDto.CommandType == CommandTypeEnum.Start) { //Write commands to local file. SerializationCommangs(); } } else { PushAMsgIn(commandDto.ChanneId, commandDto.Id, $"推流日志: 频道正在推送中,未执行此命令.", LiveStateType.Error); } }