Exemple #1
0
 private bool CheckError(int errorId, string errorMsg = "")
 {
     if (errorId >= 0)
     {
         return(false);
     }
     OnError(errorId, _command, errorMsg + FFmpegHelper.GetStrError(errorId));
     return(true);
 }
Exemple #2
0
        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);
            }
        }