car-eye 流媒体SDK是car-eye 开源团队针对android IOS windows linux等各种平台下开发的流媒体推送库和播放库的提供的一系列应用API接口。分成car-eye pusher,player,FFMPEG, server 各个章节,为各种流媒体音视频应用提供了完整的解决方案。以下是详细的文档说明:
Car-eye RTSP client 库说明
1 RTSP库接口说明
关于本章
本章对RTSP拉取库的使用及各个接口函数进行了详细说明。
标题 | 内容 |
1.1 使用说明 | 使用本库的先提条件。 |
1.2 数据结构类型说明 | 本库中自定义的枚举类及结构体说明。 |
1.3 流拉取器接口说明 | RTSP流拉取器接口的使用方法及详细说明。 |
1.1 使用说明
使用本库需要三部分文件:本库的引用头文件CarEyeRTSPClientAPI.h,运行动态库libCarEyeRtspClient.dll及开发使用的libCarEyeRtspClient.lib库。
注意:在使用本库时,必须要先调用CarEye_RtspActivate接口进行接口鉴权才能正常使用。
1.2 数据结构类型说明
本节中介绍本库中需要使用的几种自定义的数据类型。
1.2.1 视频编码类型定义
CarEye_VCodeType:该枚举类型定义了本库支持的视频编码类型,基本涵盖了实时流媒体领域中常见的几种格式。
1.2.2 音频编码类型定义
CarEye_ACodeType:该枚举类型定义了本库支持的音频编码类型,基本涵盖了实时流媒体领域中常见的几种格式。
1.2.3 推流信息媒体结构定义
CarEye_MediaInfo:该结构定义了本库中进行要拉流的媒体信息,结构成员说明见下表:
成员名 | 数据类型 | 成员说明 |
VCodec | CarEye_VCodeType | 拉取的视频编码类型 |
Width | unsigned short | 拉取的视频宽度分辨率 |
Height | unsigned short | 拉取的视频高度分辨率 |
Fps | unsigned int | 视频帧率 |
ACodec | CarEye_ACodeType | 推流的音频编码类型 |
Channels | unsigned char | 音频通道数 |
Samplerate | unsigned int | 音频采样率 |
BitsPerSample | unsigned int | 音频采样精度 |
表1 CarEye_MediaInfo结构说明
1.2.4 媒体帧信息结构定义
CarEye_RtspFrameInfo:该结构体定义了要拉取的媒体帧信息结构封装,结构成员说明见下表:
成员名 | 数据类型 | 成员说明 |
Codec | unsigned int | 音频或视频编码格,参考CarEye_VCodeType与CarEye_ACodeType定义 |
FrameType | unsigned int | 视频帧类型,如I、P、B等帧类型,参考CarEyeVideoFrameType定义 |
Fps | unsigned char | 视频帧率 |
Width | unsigned short | 拉取的视频宽度分辨率 |
Height | unsigned short | 拉取的视频高度分辨率 |
Reserved1 | unsigned int | 保留字,如果该帧为关键帧则该字段为Sps长度加4字节 |
Reserved2 | unsigned int | 保留字,如果该帧为关键帧则该字段为Sps长度加4字节+Pps长度加4字节 |
Channels | unsigned char | 音频通道数 |
Samplerate | unsigned int | 音频采样率 |
BitsPerSample | unsigned int | 音频采样精度 |
Length | unsigned int | 音视频帧数据大小 |
USecond | unsigned int | 时间戳中的微秒数部分 |
Second | unsigned int | 时间戳中的秒数部分 |
Bitrate | float | 比特率 |
Losspacket | Float | 丢包率,暂时未用到 |
表2 CarEye_RtspFrameInfo结构说明
1.2.5 流拉取器数据回调函数定义
RTSPSourceCallBack:该回调函数类型定义了流拉取器状态变更时的通知结构,共三个参数,定义如下:
channelId:拉取器对应的通道号;
userPtr:用户开始拉流时传递的自定义数据;
frameType: 回调事件帧类型,定义参考CarEye_FrameFlag枚举类型;
pBuf: 根据帧类型定义的媒体数据;
frameInfo:当前帧的媒体信息;
1.3 流拉取器接口说明
1.3.1 创建一个RTSP实时流拉取器
说明:使用拉取器必须要使用本接口先创建一个拉取器才能正常使用,本接口创建的是实时流媒体拉取的拉取器。
函数名:CarEye_RtspCreate
返回值:返回0表示成功,其他表示失败
参数: handle:流拉取器对象句柄。
1.3.2 释放一个申请的RTSP拉取器
说明:在拉取器使用完后一定要使用本接口进行释放,防止申请过多不释放造成内存增加。
函数名:CarEye_RtspRelease
返回值:是否成功释放, 0释放成功
参数:handle:已申请的拉取器对象句柄。
1.3.3 使用指定拉取器拉取数据
说明:本接口将会从指定服务器中拉取流数据。
函数名:CarEye_RtspStart
返回值:0启动成功,否则失败
参数:handle:已申请的拉取器对象句柄;
channelId:用户指定为的通道号,回调函数的channelId形参即为该通道号;
url:拉取网络流的URL地址;
connType:连接类型,RTP数据是基于TCP或者UDP;
mediaType:获取的媒体类型;
userName:RTSP链接的用户名,无则输入NULL;
password:RTSP链接的密码,无则输入NULL;
userPtr:用户传入的自定义数据,回调函数的userPtr即为该数据;
reCount:失败自动重连次数,1000表示失败后一直自动重连;
outRtpPacket:为0回调函数输出完整的帧数据,为1回到输出RTP包数据;
heartbeatType:心跳类型 0x00:不发送心跳、0x01:OPTIONS心跳、 0x02:GET_PARAMETER心跳;
verbosity:日志打印级别,0表示不输出。
1.3.4 关闭一个开启的RTSP流拉取器
说明:使用本接口可关闭一个已经启动的流拉取器。
函数名:CarEye_RtspStop
返回值:是否成功关闭, 0表示关闭成功。
参数:handle:已启动成功的拉取器对象句柄。
1.3.5 注册流拉取器的状态变更事件
说明:注册本事件可以通过回调函数获取拉取器获取的流数据。
函数名:CarEye_RtspEventRegister
返回值:无
参数:handle:已申请的拉取器对象句柄;
callback:回调函数。
1 RTSP库接口说明
关于本章
本章对RTSP推流库的使用及各个接口函数进行了详细说明。
标题 | 内容 |
1.1 使用说明 | 使用本库的先提条件。 |
1.2 数据结构类型说明 | 本库中自定义的枚举类及结构体说明。 |
1.3 推流器接口说明 | RTSP推流器接口的使用方法及详细说明。 |
Car-eye 推流器库说明
1.1 使用说明
使用本库需要三部分文件:本库的引用头文件CarEyeRtspAPI.h、CarEyeTypes.h,运行动态库libCarEyePusher.dll及开发使用的libCarEyePusher.lib库。
注意:在使用本库时,必须要先调用CarEyeRTSP_Register接口进行接口鉴权才能正常使用。
1.2 数据结构类型说明
本节中介绍的数据类型在CarEyeTypes.h中进行了定义。
1.2.1 推流库中错误码定义
CarEyeError:该枚举类型定义了本库接口在返回错误时的错误编码定义。
1.2.2 推流器的类型定义
CarEyePusherType:该枚举类型定义了推流库实现的四种推流器类型,分别是RTSP/RTMP方式推送实时流媒体或者推送本地MP4多媒体文件。
1.2.3 视频编码类型定义
CarEye_VCodeType:该枚举类型定义了本库支持的视频编码类型,基本涵盖了实时流媒体领域中常见的几种格式。
1.2.4 音频编码类型定义
CarEye_ACodeType:该枚举类型定义了本库支持的音频编码类型,基本涵盖了实时流媒体领域中常见的几种格式。
1.2.5 推流信息媒体结构定义
CarEye_MediaInfo:该结构定义了本库中进行要推流的媒体信息,结构成员说明见下表:
成员名 | 数据类型 | 成员说明 |
VideoCodec | CarEye_VCodeType | 推流的视频编码类型 |
VideoFps | unsigned int | 视频帧率,一般为25 |
AudioCodec | CarEye_ACodeType | 推流的音频编码类型 |
AudioSamplerate | unsigned int | 音频采样率, 录制人声一般为8000 |
AudioChannel | unsigned int | 音频通道数 |
AudioBitsPerSample | unsigned int | 音频采样精度 |
表1 CarEye_MediaInfo结构说明
1.2.6 媒体帧信息结构定义
CarEye_AV_Frame:该结构体定义了要推流的媒体帧信息结构封装,结构成员说明见下表:
成员名 | 数据类型 | 成员说明 |
FrameFlag | unsigned int | 标识为视频帧或音频帧,取下面两个值: CAREYE_VFRAME_FLAG CAREYE_AFRAME_FLAG |
FrameLen | unsigned int | 帧的数据长度 |
VFrameType | unsigned int | 视频帧类型,如I、P、B等 帧类型,定义参考 CarEyeVideoFrameType枚举类型定义 |
Buffer | unsigned char * | 媒体数据存储区 |
Second | unsigned int | 推流的时间戳秒数 |
USecond | unsigned int | 推流的时间戳微秒值,非总微秒数, 与Second结合形成精确时间 |
表2 CarEye_AV_Frame结构说明
1.2.7 推流器状态变更回调函数定义
CarEyePusher_StateChanged:该回调函数类型定义了推流器状态变更时的通知结构,共三个参数,定义如下:
channel:推流器对应的通道号;
state: 推流器当前的状态,定义参考CarEyeStateType枚举类型;
type: 该通道的推流器类型,定义参考1.2.2 推流器的类型定义
1.3 推流器接口说明
本节内容参见头文件CarEyeRtspAPI.h,还有一些简单的定义本文档就不做说明了,直接看代码注释即可。
1.3.1 创建一个RTSP实时推流器
说明:使用推流器必须要使用本接口先创建一个推流器才能正常使用,本接口创建的是实时流媒体推送的推流器。
函数名:CarEyeRTSP_StartPusher
返回值:创建成功返回大于等于0的推流器的通道号,小于0错误编号参考CarEyeError
参数: svrip:要推流的流媒体服务器IP地址或域名
port:要推流的流媒体服务器的端口号
name:推流链接的sdp名,拉取RTSP流的链接即为rtsp://svrip:port/name
mediaInfo:要推流的媒体信息,具体定义见1.2.5 推流信息媒体结构定义。
1.3.2 释放一个申请的RTSP推流器
说明:在推流器使用完后一定要使用本接口进行释放,防止申请过多不释放造成内存增加,本接口只用于释放CarEyeRTSP_StartPusher接口申请到的推流器。
函数名:CarEyeRTSP_StopPusher
返回值:是否成功关闭, 状态码参考CarEyeError
参数:channel:已启动的RTSP推流通道号。
1.3.3 获取指定通道编号的推流状态
说明:使用本接口可进行推流器的状态判断,是否已做好推流的准备,也就是与服务器已握手成功,可进行流媒体的推送。
函数名:CarEyeRTSP_PusherIsReady
返回值:0未做好准备, 非0做好准备
参数:channel:已启动的RTSP推流通道号。
1.3.4 使用指定通道推流器推送数据
说明:本接口会将输入的流媒体数据推送到服务器中。
函数名:CarEyeRTSP_PushData
返回值:是否推送成功, 状态码参考CarEyeError
参数:channel:已启动的RTSP推流通道号;
frame:要推送的帧数据,详细定义见1.2.6 媒体帧信息结构定义。
1.3.1~1.3.4四节的接口即是RTSP推送实时媒体信息用到的全部接口,接下来讲述的为通过RTSP推送MP4文件的接口。
1.3.5 创建本地文件RTSP推流器
说明:本接口将会创建一个本地MP4文件推送的RTSP推流器,启动成功后接口内部会根据参数判断直接进行文件的推送,无需进行其他操作。
函数名:CarEyeRTSP_StartNativeFile
返回值:大于等于0: 启动的推流通道号 小于0错误编号参考CarEyeError
参数: svrip:要推流的流媒体服务器IP地址或域名
port:要推流的流媒体服务器的端口号
name:推流链接的sdp名,拉取RTSP流的链接即为rtsp://svrip:port/name
fileName: 要推流的本地文件路径 目前暂时支持MP4文件
startMs: 从本地媒体文件的该毫秒数位置开始推送
endMs: 推流结束的毫秒数 endMs必须大于startMs, 否则推流失败, 当两个参数都为0时推送全文件。
1.3.6 释放一个申请的RTSP本地文件推流器
说明:在推流器使用完后一定要使用本接口进行释放,防止申请过多不释放造成内存增加,本接口只用于释放CarEyeRTSP_StartNativeFile接口申请到的推流器。
函数名:CarEyeRTSP_StopNativeFile
返回值:是否成功关闭, 状态码参考CarEyeError
参数:channel:已启动的RTSP推流通道号。
1.3.7 注册推流器的状态变更事件
说明:注册本事件可以通过回调函数获取每个推流器通道的状态变更通知。
函数名:CarEyeRTSP_RegisterStateChangedEvent
返回值:无
参数:event:回调方法,类型定义见1.2.7 推流器状态变更回调函数定义。
Car-eye FFMPEG 多媒体库
使用本库需要三部分文件:本库的引用头文件CarEyeTypes.h,CarEyeDecoderAPI.h,CarEyeEncoderAPI.h,CarEyeOSDAPI.h、运行动态库libCarEyeMPEG.dll及开发使用的libCarEyeMPEG.lib库、FFMPEG的动态运行库。
注意:在使用本库时,必须要先调用CarEye_MPEG_Init接口进行初始化才能正常使用,该接口在CarEyeTypes.h头文件有进行了声明。
1.2 数据结构类型说明
本节中介绍的数据类型分别在CarEyeTypes.h、CarEyeDecoderAPI.h和CarEyeEncoderAPI.h三个文件中进行了定义。
1.2.1 媒体编码类型定义
CarEye_CodecType:该媒体类型定义了本库支持的音视频编码类型,基本涵盖了实时流媒体领域中常见的几种格式。
1.2.2YUV视频流类型定义
CarEye_AVType:该类型定义了本库支持的YUV视频流格式。
1.2.3 YUV视频流结构定义
CarEye_YUVFrame:该结构定义了本库中进行YUV数据传递的信息,结构成员说明见下表:
成员名 | 数据类型 | 成员说明 |
Y | unsigned char * | YUV数据中Y信道的数据 |
YSize | int | Y信道中数据的字节个数 |
U | unsigned char * | YUV数据中U信道的数据 |
USize | int | U信道中数据的字节个数 |
V | unsigned char * | YUV数据中V信道的数据 |
VSize | int | V信道中数据的字节个数 |
表1 CarEye_YUVFrame结构说明
1.2.4 水印信息结构定义
CarEye_OSDParam:该结构体定义了水印添加的参数信息,结构成员说明见下表:
成员名 | 数据类型 | 成员说明 |
Width | int | 视频的宽度像素 |
Height | int | 视频的高度像素 |
FramesPerSecond | int | 视频帧率(FPS) |
YUVType | CarEye_AVType | 添加水印的YUV视频格式 |
X | int | 水印起始位置的X轴坐标 |
Y | int | 水印起始位置的Y轴坐标 |
FontSize | int | 水印字体大小定义 |
FontColor | unsigned int | 16进制的RGB颜色值,如绿色:0x00FF00 |
Transparency | float | 透明度,0~1,0为全透明,1为不透明 |
SubTitle | char[1024] | 要显示的水印字符,如果想要显示中文,则源代码文件必须保存为UTF-8无签名格式,否则会显示乱码。 |
FontName | char[64] | 字体所在路径,如果字体文件在同目录下可使用”arial.ttf”这种格式,在Windows下调用系统字体可使用如下格式:”C\\\\:/Windows/Fonts/msyh.ttc”,示例是调用的系统的微软雅黑字体,可支持中文水印字体,有个别字体中文会乱码。 |
表2 CarEye_OSDParam结构说明
1.2.5 解码媒体帧信息结构定义
CarEye_FrameInfo:该结构体定义了本库解码需要的媒体信息数据,结构成员说明见下表:
成员名 | 数据类型 | 成员说明 |
VCodec | CarEye_CodecType | 视频编码格式 |
ACodec | CarEye_CodecType | 音频解码格式,无赋值CAREYE_CODEC_NONE |
FramesPerSecond | unsigned char | 视频帧率(FPS) |
Width | unsigned short | 视频的宽度像素 |
Height | unsigned short | 视频的高度像素 |
VideoBitrate | unsigned int | 视频码率,越高视频越清楚,相应体积也越大,如:4000K |
SampleRate | unsigned int | 音频采样率 如:44100 |
Channels | unsigned int | 音频的通道数 |
BitsPerSample | unsigned int | 音频采样精度16/8位等,库内部固定为16位 |
AudioBitrate | unsigned int | 音频比特率,如:64K,越高声音越清楚,相应体积也越大 |
表3 CarEye_FrameInfo结构说明
1.2.6 编码媒体帧信息结构定义
CarEye_OriginalStream:该结构体定义了本库编码需要的媒体信息数据,结构成员说明见下表:
成员名 | 数据类型 | 成员说明 |
InVideoType | CarEye_AVType | 视频YUV输入流格式 |
OutVideoType | CarEye_CodecType | 期望编码后输出的视频流格式,不期望输出可设置为CAREYE_CODEC_NONE |
OutAudioType | CarEye_CodecType | 期望编码后输出的音频流格式,不期望输出可设置为CAREYE_CODEC_NONE |
FramesPerSecond | unsigned char | 视频帧率(FPS),推荐如:25 |
Width | unsigned short | 视频的宽度像素 |
Height | unsigned short | 视频的高度像素 |
GopSize | int | 一组图片中的图片数量,推荐值:10 |
MaxBFrames | int | 非B帧之间的B帧的最大数量,推荐值:1 |
VideoBitrate | unsigned int | 视频码率,越高视频越清楚,相应体积也越大 如:4000K |
SampleRate | unsigned int | 音频采样率 如:44100 |
AudioBitrate | unsigned int | 音频比特率,如:64K,越高声音越清楚,相应体积也越大 |
表4 CarEye_OriginalStream结构说明
1.3 解码器接口说明
本节内容参见头文件CarEyeDecoderAPI.h
1.3.1 创建一个解码对象
说明:使用解码器必须要使用本接口先创建一个解码器才能正常使用。
函数名:CarEye_DecoderCreate
返回值:创建成功返回解码器的句柄,失败返回NULL
参数:aInfo:需要解码的媒体信息,具体定义见1.2.5 解码媒体帧信息结构定义。
1.3.2 释放一个申请的解码对象
说明:在解码器使用完后一定要使用本接口进行释放,防止申请过多不释放造成内存增加。
函数名:CarEye_DecoderRelease
返回值:无
参数:aDecoder:已申请并想释放的解码器。
1.3.3 获取解码后YUV视频所占用的字节数
说明:由于解码后的YUV数据字节数是固定的,所以提供该接口方便开发者申请内存。
函数名:CarEye_GetYUVSize
返回值:解码后YUV数据的字节个数,小于0说明获取失败
参数:aDecoder:已申请成功的解码器。
1.3.4 解码视频数据
说明:本接口会将输入的视频流解码为YUV420视频数据。
函数名:CarEye_DecoderYUV420
返回值:小于表示解码失败,大于0为解码后YUV420的字节个数,等于0表示参数无效
参数:aDecoder:已申请成功的解码器;
aFilter:水印编码器,已弃用,直接传入NULL即可;
aBytes:要解码的视频流;
aSize:要解码的视频流字节个数;
aYuv:解码成功后输出的YUV420数据,该参数传递方向为向外输出。
1.3.5 解码音频数据
说明:本接口会将输入的音频流解码为PCM音频数据。
函数名:CarEye_DecoderPCM
返回值:小于表示解码失败,大于0为解码后PCM的字节个数,等于0表示参数无效
参数:aDecoder:已申请成功的解码器;
aBytes:要解码的音频流;
aSize:要解码的音频流字节个数;
aPcm:解码成功后输出的PCM数据,该参数传递方向为向外输出。
1.4 编码器接口说明
本接内容参见头文件CarEyeEncoderAPI.h
1.4.1 创建一个编码对象
说明:使用编码器必须要使用本接口先创建一个编码器才能正常使用。
函数名:CarEye_EncoderCreate
返回值:创建成功返回编码器的句柄,失败返回NULL
参数:aInfo:需要编码的媒体信息,具体定义见1.2.6 编码媒体帧信息结构定义。
1.4.2 释放一个编码对象
说明:在编码器使用完后一定要使用本接口进行释放,防止申请过多不释放造成内存增加。
函数名:CarEye_EncoderRelease
返回值:无
参数:aEncoder:已申请并想释放的编码器。
1.4.3 编码视频数据
说明:将输入的YUV数据编码为设定好的视频数据输出。
函数名:CarEye_EncoderYUV
返回值:小于表示编码失败,大于0为编码后视频数据的字节个数,等于0表示参数无效
参数:aEncoder:已申请成功的编码器;
aYuv:要进行编码的YUV数据;
aBytes:编码后的视频流,该参数传递方向为向外输出。
1.4.4 获取音频编码时接收的最大字节数
说明:防止一次解码的音频数据过大,提供该接口方便开发者申请内存。
函数名:CarEye_GetPcmMaxSize
返回值:PCM缓冲区的最大字节个数
参数:aEncoder:已申请成功的编码器。
1.4.5 编码音频数据
说明:将输入的PCM数据编码为设定好的音频数据输出。
函数名:CarEye_EncoderPCM
返回值:小于表示编码失败,大于0为编码后视频数据的字节个数,等于0表示参数无效
参数:aEncoder:已申请成功的编码器;
aPcm:要进行编码的PCM数据;
aSize:要编码PCM数据字节个数;
aPts:当前编码帧的序号;
aBytes:编码后的音频流,该参数传递方向为向外输出。
1.5 水印编码器接口说明
本接内容参见头文件CarEyeOSDAPI.h
1.5.1 创建一个水印编码对象
说明:使用编码器必须要使用本接口先创建一个编码器才能正常使用。
函数名:CarEye_OSD_Create
返回值:创建成功返回编码器的句柄,失败返回NULL
参数:aParam:需要添加水印的媒体信息,具体定义见1.2.4 水印信息结构定义。
1.5.2 进行水印添加
说明:本接口对输入的YUV数据进行水印添加操作。
函数名:CarEye_OSD_Encode
返回值:成功返回0,其他为失败
参数:aFilter:申请成功的水印编码器;
;
txtoverlay:水印文字内容,增加该参数值可实时修改水印内容。
1.5.3 释放一个水印编码对象
说明:在编码器使用完后一定要使用本接口进行释放,防止申请过多不释放造成内存增加。
函数名:CarEye_OSD_Release
返回值:无
参数:aFilter:已申请并想释放的水印编码器。