EasyIPCamera-WindowsLinuxARM服务接口
接口协议适用平台:(Windows&Linux&ARM)
1. SDK描述
EasyIPCamera是一套非常稳定、易用、支持多种平台(包括Windows/Linux 32&64,Android,ARM hisiv100/hisiv200/hisiv300/hisiv400等平台)的RTSP-Server组件,适用于IPCamera、内网RTSP服务等RTSP流媒体服务器、内网单播同屏,接口调用非常简单成熟,无需关注RTSPServer中关于客户端监听接入、音视频多路复用、RTSP具体流程、RTP打包与发送等相关问题,支持多种音视频格式,再也不用像调用live555 RTSPServer那样处理整个RTSP OPTIONS/DESCRIBE/SETUP/PLAY/RTP/RTCP的复杂流程和担心内存释放的问题了!EasyIPCamera非常适合于安防领域、教育领域、互联网直播领域等;
主要流程:
- 调用 EasyIPCamera_Startup 设置监听端口、回调函数和自定义数据指针
- 启动后,程序进入监听状态
2.1 接收到客户端请求, 回调 状态:EASY_IPCAMERA_STATE_REQUEST_MEDIA_INFO 上层程序在填充完mediainfo后,返回0, 则EasyIpCamera响应客户端ok
2.2 EasyIPCamera回调状态 EASY_IPCAMERA_STATE_REQUEST_PLAY_STREAM , 则表示rtsp交互完成, 开始发送流, 上层程序调用EasyIpCamera_PushFrame 发送帧数据
2.3 EasyIPCamera回调状态 EASY_IPCAMERA_STATE_REQUEST_STOP_STREAM , 则表示客户端已发送teaardown, 要求停止发送帧数据 - 调用 EasyIpCamera_Shutdown(), 关闭EasyIPCamera,释放相关资源
2. API接口函数定义
2.1 数据、事件回调函数
函数:
typedef Easy_I32 (EasyIPCamera_Callback)(Easy_I32 channelId, EASY_IPCAMERA_STATE_T channelState, EASY_MEDIA_INFO_T mediaInfo, EASY_PLAY_CONTROL_INFO_T playCtrlInfo, void userPtr);
参数:
channelId: 通道号, 由EasyRTSP_OpenStream设置
channelState: 状态回调,第3节中EASY_IPCAMERA_STATE_T类型。当某个通道第一次被请求时会回调EASY_IPCAMERA_STATE_REQUEST_MEDIA_INFO事件,这时需要将media信息设置进去,如果正确会立刻回调EASY_IPCAMERA_STATE_REQUEST_PLAY_STREAM事件,否则回调EASY_IPCAMERA_STATE_REQUEST_STOP_STREAM事件。
mediaInfo: 第3节中EASY_MEDIA_INFO_T信息,当收到EASY_IPCAMERA_STATE_REQUEST_MEDIA_INFO事件时,需要设置进去。
playCtrlInfo: 第3节中EASY_PLAY_CONTROL_INFO_T信息。
userPtr: 用户自定义数据,由EasyIPCamera_Startup设置
2.2 SDK激活
函数:
Easy_API int Easy_APICALL EasyIPCamera_Activate(char *license);
参数:
license: SDK激活码,可在 www.pvale.com 在线获取,或联系我们。
返回:
返回值为第三节的EASY_ACTIVATE_ERR_CODE_ENUM枚举类型
2.3 创建RTSP Server一个视频流通道
函数:
Easy_API Easy_I32 Easy_APICALL EasyIPCamera_Startup(Easy_U16 listenport, AUTHENTICATION_TYPE_ENUM authType, char realm, Easy_U8 username, Easy_U8 password, EasyIPCamera_Callback callback, void userptr, LIVE_CHANNEL_INFO_T *channelInfo, Easy_U32 channelNum);
参数:
listenport: 监听端口
authType: 鉴权类型,默认可设置AUTHENTICATION_TYPE_BASIC
realm: 自定义RTSP协议交互时realm信息,正常可以设置能空字符串,由库中自动设置
username: 视频流用户名
password: 视频流密码
callback: 设置数据、事件回调函数
userptr: 用户自定义数据
channelInfo: 通道信息列表
channelNum: channelInfo中个数
返回:
返回0表示成功,返回非0表示失败。
2.4 添加或修改用户
函数:
Easy_API Easy_I32 Easy_APICALL EasyIPCamera_AddUser(const Easy_U8 username, const Easy_U8 password);
参数:
username: 用户名
password: 密码
添加用户或根据用户名修改用户密码,如果添加的用户名不存在,则为新增, 如已存在,则为修改密码。
2.5 删除用户
函数:
Easy_API Easy_I32 Easy_APICALL EasyIPCamera_DelUser(const Easy_U8 *username);
参数:
username: 用户名
2.6 推送视频帧数据
函数:
Easy_API Easy_I32 Easy_APICALL EasyIPCamera_PushFrame(Easy_I32 channelId, EASY_AV_Frame* frame );
参数:
channelId: EasyIPCamera_Startup接口参数中LIVE_CHANNEL_INFO_T里面的id, 是每个视频流的唯一id
frame: 帧数据信息
2.7 重置RTSP Server某一路视频流
函数:
Easy_API Easy_I32 Easy_APICALL EasyIPCamera_ResetChannel(Easy_I32 channelId);
参数:
channelId: EasyIPCamera_Startup接口参数中LIVE_CHANNEL_INFO_T里面的id, 是每个视频流的唯一id
2.8 终止RTSP Server
函数:
Easy_API Easy_I32 Easy_APICALL EasyIPCamera_Shutdown();
3. 结构体描述
typedef enum __EASY_ACTIVATE_ERR_CODE_ENUM { EASY_ACTIVATE_INVALID_KEY = -1, /* 无效Key */ EASY_ACTIVATE_TIME_ERR = -2, /* 时间错误 */ EASY_ACTIVATE_PROCESS_NAME_LEN_ERR = -3, /* 进程名称长度不匹配 */ EASY_ACTIVATE_PROCESS_NAME_ERR = -4, /* 进程名称不匹配 */ EASY_ACTIVATE_VALIDITY_PERIOD_ERR= -5, /* 有效期校验不一致 */ EASY_ACTIVATE_PLATFORM_ERR = -6, /* 平台不匹配 */ EASY_ACTIVATE_COMPANY_ID_LEN_ERR= -7, /* 授权使用商不匹配 */ EASY_ACTIVATE_SUCCESS = 0, /* 激活成功 */ }EASY_ACTIVATE_ERR_CODE_ENUM; /* 视频编码 */ #define EASY_SDK_VIDEO_CODEC_H264 0x1C /* H.264 */ #define EASY_SDK_VIDEO_CODEC_H265 0x48323635 /* H.265 */ #define EASY_SDK_VIDEO_CODEC_MJPEG 0x08 /* MJPEG */ #define EASY_SDK_VIDEO_CODEC_MPEG4 0x0D /* MPEG4 */ /* 音频编码 */ #define EASY_SDK_AUDIO_CODEC_AAC 0x15002 /* AAC */ #define EASY_SDK_AUDIO_CODEC_G711U 0x10006 /* G711 ulaw*/ #define EASY_SDK_AUDIO_CODEC_G711A 0x10007 /* G711 alaw*/ #define EASY_SDK_AUDIO_CODEC_G726 0x1100B /* G726 */ #define EASY_SDK_EVENT_CODEC_ERROR 0x63657272 /* ERROR */ #define EASY_SDK_EVENT_CODEC_EXIT 0x65786974 /* EXIT */ /* 音视频帧标识 */ #define EASY_SDK_VIDEO_FRAME_FLAG 0x00000001 /* 视频帧标志 */ #define EASY_SDK_AUDIO_FRAME_FLAG 0x00000002 /* 音频帧标志 */ #define EASY_SDK_EVENT_FRAME_FLAG 0x00000004 /* 事件帧标志 */ #define EASY_SDK_RTP_FRAME_FLAG 0x00000008 /* RTP帧标志 */ #define EASY_SDK_SDP_FRAME_FLAG 0x00000010 /* SDP帧标志 */ #define EASY_SDK_MEDIA_INFO_FLAG 0x00000020 /* 媒体类型标志*/ /* 视频关键字标识 */ #define EASY_SDK_VIDEO_FRAME_I 0x01 /* I帧 */ #define EASY_SDK_VIDEO_FRAME_P 0x02 /* P帧 */ #define EASY_SDK_VIDEO_FRAME_B 0x03 /* B帧 */ #define EASY_SDK_VIDEO_FRAME_J 0x04 /* JPEG */ /* 连接类型 */ typedef enum __EASY_RTP_CONNECT_TYPE { EASY_RTP_OVER_TCP = 0x01, /* RTP Over TCP */ EASY_RTP_OVER_UDP /* RTP Over UDP */ }EASY_RTP_CONNECT_TYPE; /* 媒体信息 */ typedef struct __EASY_MEDIA_INFO_T { Easy_U32 u32VideoCodec; /* 视频编码类型 */ Easy_U32 u32VideoFps; /* 视频帧率 */ Easy_U32 u32VideoQueueSize; /* 视频缓存大小 */ Easy_U32 u32AudioCodec; /* 音频编码类型 */ Easy_U32 u32AudioSamplerate; /* 音频采样率 */ Easy_U32 u32AudioChannel; /* 音频通道数 */ Easy_U32 u32AudioBitsPerSample; /* 音频采样精度 */ Easy_U32 u32AudioQueueSize; /* 音频缓存大小 */ Easy_U32 u32VpsLength; /* H.265格式VPS长度 */ Easy_U32 u32SpsLength; /* SPS数据长度 */ Easy_U32 u32PpsLength; /* PPS数据长度 */ Easy_U32 u32SeiLength; /* SEI信息数据长度 */ Easy_U8 u8Vps[255]; /* VPS数据内容 */ Easy_U8 u8Sps[255]; /* SPS数据内容 */ Easy_U8 u8Pps[128]; /* PPS数据内容 */ Easy_U8 u8Sei[128]; /* SEI数据内容 */ }EASY_MEDIA_INFO_T; /* 帧信息 */ typedef struct { unsigned int codec; /* 音视频格式 */ unsigned int type; /* 视频帧类型 */ unsigned char fps; /* 视频帧率 */ unsigned short width; /* 视频宽 */ unsigned short height; /* 视频高 */ unsigned int reserved1; /* 保留参数1 */ unsigned int reserved2; /* 保留参数2 */ unsigned int sample_rate; /* 音频采样率 */ unsigned int channels; /* 音频声道数 */ unsigned int bits_per_sample; /* 音频采样精度 */ unsigned int length; /* 音视频帧大小 */ unsigned int timestamp_usec; /* 时间戳,微妙 */ unsigned int timestamp_sec; /* 时间戳 秒 */ float bitrate; /* 比特率 */ float losspacket; /* 丢包率 */ }RTSP_FRAME_INFO; struct EASY_AV_Frame { Easy_U32 u32AVFrameFlag; /* 帧标志 视频 or 音频 */ Easy_U32 u32AVFrameLen; /* 帧的长度 */ Easy_U32 u32VFrameType; /* 视频的类型,I帧或P帧 */ Easy_U8 *pBuffer; /* 数据 */ Easy_U32 u32TimestampSec; /* 时间戳(秒)*/ Easy_U32 u32TimestampUsec; /* 时间戳(微秒) */ }; typedef enum _AUTHENTICATION_TYPE_ENUM { AUTHENTICATION_TYPE_BASIC = 0x00, AUTHENTICATION_TYPE_DIGEST, }AUTHENTICATION_TYPE_ENUM; typedef struct __LIVE_CHANNEL_INFO_T { int id; char name[64]; }LIVE_CHANNEL_INFO_T; typedef struct __EASY_AV_Frame { Easy_U32 u32AVFrameFlag; /* 帧标志 视频 or 音频 */ Easy_U32 u32AVFrameLen; /* 帧的长度 */ Easy_U32 u32VFrameType; /* 视频的类型,I帧或P帧 */ Easy_U8 *pBuffer; /* 数据 */ Easy_U32 u32TimestampSec; /* 时间戳(秒)*/ Easy_U32 u32TimestampUsec; /* 时间戳(微秒) */ }EASY_AV_Frame; typedef enum __EASY_IPCAMERA_STATE_T { EASY_IPCAMERA_STATE_ERROR = -1, //内部错误 EASY_IPCAMERA_STATE_REQUEST_MEDIA_INFO = 1, //新连接,请求media info EASY_IPCAMERA_STATE_REQUEST_PLAY_STREAM, //开始发送流 EASY_IPCAMERA_STATE_REQUEST_STOP_STREAM, //停止流 EASY_IPCAMERA_STATE_PLAY_CONTROL, }EASY_IPCAMERA_STATE_T; typedef struct __EASY_PLAY_CONTROL_INFO_T { EASY_PLAY_CTRL_CMD_ENUM ctrlCommand; float scale; Easy_U8 startTime[36]; Easy_U8 endTime[36]; char suffix[256]; }EASY_PLAY_CONTROL_INFO_T; |
EasyIPCamera-WindowsLinuxARM服务接口相关推荐
- 微服务接口限流的设计与思考(附GitHub框架源码)
http://www.infoq.com/cn/articles/microservice-interface-rate-limit?useSponsorshipSuggestions=true&am ...
- dubbo服务接口如何mock_2019年Dubbo你掌握的如何?快看看这30道高频面试题!
前言 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式 ...
- spring boot编写并运行HelloWorld服务接口
spring boot编写并运行HelloWorld服务接口 在主程序上要加包扫描注解@ComponentScan("com.example.demo1") package com ...
- Web Service 一些对外公开的网络服务接口以及http://www.webxml.com.cn/zh_cn/index.aspx
Web Service 一些对外公开的网络服务接口 2011-10-29 14:12 商业和贸易: 1.股票行情数据 WEB 服务(支持香港.深圳.上海基金.债券和股票:支持多股票同时查询) Endp ...
- WebApiClient百度地图服务接口实践
1. 文章目的 随着WebApiClient的不断完善,越来越多开发者选择WebApiClient替换原生的HttpClient,然而在应用到实际项目中多多少少会遇到一些项目结合上的疑问和困难,本文将 ...
- 第6章 服务模式 Service Interface(服务接口)
Service Interface(服务接口) 上下文 您正在设计企业应用程序,并且需要能够通过网络使用其部分功能.此功能需要能够被各类系统使用,因此互操作性是设计的重要方面.除互操作性之外,可能还需 ...
- 谈一下我对如何设计微服务接口的理解和思考
微服务是一个独立运行.自带数据存储管理,对外提供接口的自治系统.微服务设计很关键的一点是微服务接口的设计.不同微服务经常是分配给不同的团队开发的,接口是各团队编程的契约. 下面只讨论微服务间接口的设计 ...
- feign调用多个服务_spring cloud各个微服务之间如何相互调用(Feign、Feign带token访问服务接口)...
1.首先先看什么是Feign. 2.若其他服务的接口未做权限处理,参照上文第1点的博文即可. 3.若其他服务的接口做了权限的处理(例如OAuth 2)时该如何访问? a.有做权限处理的服务接口直接调用 ...
- python的坐标代码_基于Python的地图坐标服务接口调用代码实例
代码描述:基于Python的地图坐标服务接口调用代码实例 关联数据:地图坐标服务 接口地址:http://www.juhe.cn/docs/api/id/32 #!/usr/bin/python # ...
- Hystrix面试 - 基于 timeout 机制为服务接口调用超时提供安全保护
Hystrix面试 - 基于 timeout 机制为服务接口调用超时提供安全保护 一般来说,在调用依赖服务的接口的时候,比较常见的一个问题就是超时.超时是在一个复杂的分布式系统中,导致系统不稳定,或者 ...
最新文章
- 到底什么是hash?它起什么作用?
- Android手机WIFI与电脑间共享文件
- 依赖: ros-melodic-desktop 但是它将不会被安装_npm系列之依赖管理
- 160 - 10 Andrénalin.3
- 前端学习(3320):undefine和null 2
- SpringScerity的使用
- excel 度分秒转度
- llama是什么动物_羊驼(Alpaca)与骆马(Llama)
- 作为一个程序员对特修斯之船的理解
- Ps和Excel结合,快速制作透明表格
- 清空H3C交换机CF存储回收站空间
- 强烈推荐这款刷题小程序
- Anaconda 使用 set CONDA_FORCE_32BIT=1 切换32位环境失败的解决方法
- iOS开发之AVPlayer的精彩使用---网易新闻视频播放界面的另类实现
- uniapp上高德(百度)地图API的使用(APP安卓)
- 软件开发+推广引流,最适合企业商家的软件营销模式
- win7修复计算机消失,win7系统引导文件丢失的修复妙招
- oracle 朱志辉_甲骨文(Oracle)授权教育中心落户我校
- C/C++ 报数游戏
- 两条命令解决移动硬盘无法弹出的问题