Skip to content

API调用说明

chatop2020 edited this page Jan 17, 2021 · 5 revisions

AKStream WebApi接口说明


  • AKStream采用http restful 风格的WebApi接口提供给第三方应用对接集成
  • AKStream的http接口有鉴权认证功能,在调用AKStream WebApi接口时需要在http header上携带AccessKey,AccessKey的值被配置在配置文件中,具体详见配置文件章节介绍
  • 在http header上携带AccessKey的方式是KeyValue形式的如下所示: AccessKey=047I4WS1-U51UBO6W-1J4BT21P-MF17IT99-92J8WIHU-944Q4KIW
  • AccessKey会在首次运行并生成配置文件时自动生成,你也可以修改AccessKey的值,使之符合你的需求
  • AKStream的WebApi调用约定的方法有HttpGet和HttpPost两种,在向AKStream传递普通一般参数时(如基础类型参数)一般采用HttpGet方法,在向AKStream传递复杂参数时(如对象)一般采用HttpPost方法,具体接口采用了什么方式详见每个接口的具体说明
  • AKStream将接口按照功能集中程度分为以下几类
    1. AKStreamKeeper 这是专门针对AKStreamKeeper的API接口
    1. MediaServer 专门针对流媒体控制的API接口
    1. RecordPlan 针对录制计划模板的API接口
    1. SipServer 针对GB28181 Sip信令网关的API接口
    1. SystemService 针对系统层面的API接口
    1. WebHook 针对ZLMediaKit的回调而准备的API接口
  • AKStream还提供了Swagger API接口Web在线调试工具,可以通过http://ip:port/swagger 来访问它
  • 为了保障开发阶段的高效,AKStream的编译模式是Debug的情况下,不需要通过AccessKey鉴权认证;Release模式下则需要AccessKey鉴权认证
  • AKStream的WebApi中额外约定如下
    1. DateTime的格式化标准为 yyyy-MM-dd HH:mm:ss
    1. 涉及到枚举类型,可以传枚举的String值也可以传int值

异常处理

  • AKStream的API调用异常有三种类型
  • 1.AKStream所知异常
  • 2.WebServer异常
  • 3.系统内部错误

AKStream所知异常

  • 所有AKStream所知异常都会被包装成一个异常结构,结构如下
 /// <summary>
    /// 返回状态结构
    /// </summary>
    [Serializable]
    public class ResponseStruct
    {
        private ErrorNumber _code;
        private string _message = null!;
        private string? _exceptMessage = null!;
        private string? _exceptStackTrace = null!;


        /// <summary>
        /// 返回结构体构造
        /// </summary>
        /// <param name="code"></param>
        /// <param name="message"></param>
        public ResponseStruct(ErrorNumber code, string message)
        {
            Code = code;
            Message = message;
        }


        public ResponseStruct()
        {
        }

        /// <summary>
        /// 状态代码
        /// </summary>
        [JsonConverter(typeof(StringEnumConverter))]
        public ErrorNumber Code
        {
            get => _code;
            set => _code = value;
        }

        /// <summary>
        /// 状态描述
        /// </summary>
        public string Message
        {
            get => _message;
            set => _message = value;
        }

        /// <summary>
        /// 异常的Message
        /// </summary>
        public string? ExceptMessage
        {
            get => _exceptMessage;
            set => _exceptMessage = value;
        }

        /// <summary>
        /// 异常的StackTrace
        /// </summary>
        public string? ExceptStackTrace
        {
            get => _exceptStackTrace;
            set => _exceptStackTrace = value;
        }
    }
  • 此异常类在namespace LibCommon下
  • 异常类主要包含了以下四个内容
        private ErrorNumber _code;
        private string _message = null!;
        private string? _exceptMessage = null!;
        private string? _exceptStackTrace = null!;
  • Code为错误代码,此字段是一个枚举类型,其中0=None表示没有错误(异常),其他值都是有异常情况,具体见后面的附录1
  • Message是对Code的具体描述
  • ExceptMessage,ExceptStackTrace 这两个字段是在发生Exception时保存Exception的message和堆栈信息,以帮助快速排错
  • 如类似以下报错信息
{
  "Code": "MediaServer_InstanceIsNull",
  "Message": "流媒体服务实例为空,请先创建流媒体服务实例"
}

WebServer异常

  • WebServer异常一般是因为传参不符合要求造成的,比如需要传的参数没有传,传参类型不符等,这些异常由.net core的全局异常拦截器进行拦截并向应用报错
  • 如类似以下报错
{
  "errors": {
    "pageSize": [//这里指出了传参的问题
      "Invalid property identifier character: {. Path 'pageSize', line 5, position 4."
    ]
  },
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "traceId": "|4fdb4241-4b91dd00b7b63532."
}

异常响应

  • 所有正常调用,http 状态码均为200
  • 所有异常调用,http 状态码均不是200,有可能是400也有可能是500

系统内部错误

  • 可能在极个别情况下产生 http 状态码为500的情况,这类情况一般是AKStream代码流程中没有考虑到的问题造成WebServer的内部错误,这类错误的发生,虽然是致命的,但不会造成AKStream崩溃

附录1

  • ErrorCode的结构
 public enum ErrorNumber : int
    {
        None = 0, //成功
        Sys_GetMacAddressExcept = -1000, //获取Mac地址异常
        Sys_GetIpAddressExcept = -1001, //获取IP地址异常
        Sys_JsonWriteExcept = -1002, //Json写入异常
        Sys_JsonReadExcept = -1003, //Json读取异常
        Sys_ConfigDirNotExists = -1004, //配置文件目录不存在
        Sys_ConfigFileNotExists = -1005, //配置文件不存在
        Sys_ParamsNotEnough = -1006, //参数不足
        Sys_ParamsIsNotRight = -1007, //参数不正确
        Sys_WebApi_Except = -1008, //WebApi异常
        Sys_ConfigNotReady = -1009, //配置文件没有就绪
        Sys_DataBaseNotReady = -1010, //数据库没有就绪
        Sys_NetworkPortExcept = -1011, //端口不可用
        Sys_DiskInfoExcept = -1012, //磁盘不可用
        Sys_UrlExcept = -1013, //参数中URL异常
        Sys_ReadIniFileExcept = -1014, //读取ini文件异常
        Sys_WriteIniFileExcept = -1015, //写入ini文件异常
        Sys_SocketPortForRtpExcept = -1016, //查找可用rtp端口时异常,可能已无可用端口
        Sys_SpecifiedFileNotExists = -1017, //指定文件不存在
        Sys_InvalidAccessKey = -1018, //访问密钥失效
        Sys_AKStreamKeeperNotRunning = -1019, //AKStreamKeeper流媒体服务器治理程序没有运行
        Sys_DataBaseLimited = -1020, //数据库操作受限,请检查相关参数,如分页查询时每页不能超过10000行
        Sys_DB_VideoChannelNotExists = -1021, //数据库中不存在指定音视频通道
        Sys_DataBaseExcept = -1022, //数据库执行异常
        Sys_DB_VideoChannelAlRedayExists = -1023, //数据库中已经存在指定音视频通道
        Sys_DB_RecordNotExists = -1024, //数据库中指定记录不存在
        Sys_VideoChannelNotActived = -1025, //音视频通实例没有激活
        Sys_HttpClientTimeout = -1026, //http客户端请求超时
        Sys_DB_RecordPlanNotExists = -1027, //录制计划不存在
        Sys_RecordPlanTimeLimitExcept = -1028, //录制计划时间间隔异常
        Sys_DB_RecordPlanAlreadyExists = -1029, //数据库中指定录制计划已经存在
        Sys_DvrCutMergeTimeLimit = -1030, //裁剪时间限制,超过120分钟任务不允许执行
        Sys_DvrCutMergeFileNotFound = -1031, //时间周期内没有找到相关视频文件
        Sys_DvrCutProcessQueueLimit = -1032, //处理队列已满,请稍后再试
        Sip_StartExcept = -2000, //启动Sip服务异常
        Sip_StopExcept = -2001, //停止Sip服务异常
        Sip_Except_DisposeSipDevice = -2002, //Sip网关内部异常(销毁Sip设备时)
        Sip_Except_RegisterSipDevice = -2003, //Sip网关内部异常(注册Sip设备时)
        Sip_ChannelNotExists = -2004, //Sip音视频通道不存在
        Sip_DeviceNotExists = -2005, //Sip设备不存在
        Sip_OperationNotAllowed = -2006, //该设备类型下不允许这个操作
        Sip_DeInviteExcept = -2007, //结束推流时异常
        Sip_InviteExcept = -2008, //推流时异常
        Sip_SendMessageExcept = -2009, //发送sip消息时异常
        Sip_AlredayPushStream = -2010, //sip通道已经在推流状态
        Sip_NotOnPushStream = -2011, //Sip通道没有在推流状态
        Sip_Channel_StatusExcept = -2012, //Sip通道设备状态异常
        Sip_VideoLiveExcept = -2013, //Sip通道推流请求异常
        MediaServer_WebApiExcept = -3000, //访问流媒体服务器WebApi时异常
        MediaServer_WebApiDataExcept = -3001, //访问流媒体服务器WebApi接口返回数据异常
        MediaServer_TimeExcept = -3002, //服务器时间异常,建议同步
        MediaServer_BinNotFound = -3003, //流媒体服务器可执行文件不存在
        MediaServer_ConfigNotFound = -3004, //流媒体服务器配置文件不存在,建议手工运行一次流媒体服务器使其自动生成配置文件模板
        MediaServer_InstanceIsNull = -3005, //流媒体服务实例为空,请先创建流媒体服务实例
        MediaServer_StartUpExcept = -3006, //启动流媒体服务器失败
        MediaServer_ShutdownExcept = -3007, //停止流媒体服务器失败
        MediaServer_RestartExcept = -3008, //重启流媒体服务器失败
        MediaServer_ReloadExcept = -3009, //流媒体服务器配置热加载失败
        MediaServer_NotRunning = -3010, //流媒体服务器没有运行
        MediaServer_OpenRtpPortExcept = -3011, //申请rtp端口失败,申请端口可能已经存在
        MediaServer_WaitWebHookTimeOut = -3012, //等待流媒体服务器回调时超时
        MediaServer_StreamTypeExcept = -3013, //流类型不正确
        MediaServer_GetStreamTypeExcept = -3014, //指定拉流方法不正确
        MediaServer_VideoSrcExcept = -3015, //源流地址异常
        Other = -6000 //其他异常
    }