接口协议适用平台:(Windows&Linux&ARM)

1. SDK描述

EasyRTSPClient是紫鲸云团队开发、提供的一套非常稳定、易用、支持重连的RTSPClient工具,SDK形式提供,接口调用非常简单,再也不用像调用live555和ffmpeg那样处理整个RTSP OPTIONS/DESCRIBE/SETUP/PLAY的复杂流程,担心内存释放的问题了,EasyRTSPClient全平台支持(包括Windows/Linux 32&64,ARM各种平台,Android,iOS),接口简单且成熟稳定!

2. API接口函数定义

2.1 数据、事件回调函数

函数:
typedef int (Easy_APICALL RTSPSourceCallBack)( int _channelId, void _channelPtr, int _frameType, char pBuf, RTSP_FRAME_INFO _frameInfo);

参数:
_channelId: 通道号, 由EasyRTSP_OpenStream设置
_channelPtr: 用户自定义数据,由EasyRTSP_OpenStream设置
_frameType: EASY_SDK_VIDEO_FRAME_FLAG/EASY_SDK_AUDIO_FRAME_FLAG/EASY_SDK_EVENT_FRAME_FLAG/…
_pBuf: 回调的数据部分
_frameInfo: 帧结构参数

2.2 SDK激活

函数:
Easy_API int Easy_APICALL EasyRTSP_Activate(char *license);

参数:
license: SDK激活码,可在 www.pvale.com 在线获取,或联系我们。

返回:
返回值为第三节的EASY_ACTIVATE_ERR_CODE_ENUM枚举类型

2.3 创建EasyRTSPClient 一个通道的句柄

函数:
Easy_API int Easy_APICALL EasyRTSP_Init(Easy_RTSP_Handle *handle);

参数:
调用者定义Easy_RTSP_Handle类型的变量,传入变量的地址,如果成功handle为非空,否则为空

返回:
返回0表示成功,返回非0表示失败。也可用调用后的handle值判断是否成功

2.4 设置数据回调

函数:
Easy_API int Easy_APICALL EasyRTSP_SetCallback(Easy_RTSP_Handle handle, RTSPSourceCallBack callback);

参数:
handle: EasyRTSP_Init接口返回的句柄
callback: 设置数据、事件回调函数

2.5 打开一路RTSP网络流

函数:
Easy_API int Easy_APICALL EasyRTSP_OpenStream(Easy_RTSP_Handle handle, int channelid, char url, EASY_RTP_CONNECT_TYPE connType, unsigned int mediaType, char username, char password, void userPtr, int reconn, int outRtpPacket, int heartbeatType, int verbosity);

参数:
handle: EasyRTSP_Init接口返回的句柄
channelid: 自定义通道号,回调函数返回时会携带回来,可用于表示通道,也可用userPtr参数来表示和参数传递
url: 拉取的流地址
connType: 第三节中EASY_RTP_CONNECT_TYPE类型,选择TCP还是UDP拉取流
mediaType: 类似设置 EASY_SDK_VIDEO_FRAME_FLAG | EASY_SDK_AUDIO_FRAME_FLAG
username: 用户名
password: 密码
userPtr: 用户自定义数据,回调函数返回时会带对应的userPtr,可用于标记对应流的回调和参数传递
reconn: 1000表示长连接,即如果网络断开自动重连, 其它值为连接次数
outRtpPacket: 默认为0,即回调输出完整的帧, 如果为1,则输出RTP包
heartbeatType: 是否发送RTSP协议的OPTION,0为不发送,1为发送。默认可以设置0,个别RTSP流遇到有周期性断流的情况尝试设置为1。
verbosity: 日志打印输出等级,0表示不输出,1位输出

2.6 关闭网络流

函数:
Easy_API int Easy_APICALL EasyRTSP_CloseStream(Easy_RTSP_Handle handle);

参数:
handle: EasyRTSP_Init接口返回的句柄

2.7 释放RTSPClient 参数为RTSPClient句柄

函数:
Easy_API int Easy_APICALL EasyRTSP_Deinit(Easy_RTSP_Handle *handle);

参数:
handle: EasyRTSP_Init接口返回的句柄

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; /* 时间戳(微秒) */
};