SkeyeLive 是 OpenSKEYE 开源流媒体团队开发的一个集采集,编码,RTSP/RTMP 推流和流媒体 RTSP 服务于一身的通用库,目前反对 Windows,Android 平台,通过 SkeyeLive 咱们就能够防止接触到稍显简单的音视频源采集,编码和流媒体推送以及 RTSP/RTP/RTCP 服务流程,只须要调用 SkeyeLive 的几个 API 接口,就能轻松、稳固地把流媒体音视频数据推送给 SkeyeSMS 服务器以及公布 RTSP 服务,RTSP 服务反对组播和单播两种模式,可用于同屏直播,延时在 300ms 以内。
libSkeyeLive API 接口阐明:
· SkeyeLive_Create
接口申明:
LIB_SKEYELIVE_API SKEYELIVE_HANDLE SkeyeLive_Create();
接口阐明:
创立一个 SkeyeLive 实例句柄,并返回,在性能模块接口调用时都要用到,一个句柄代表一个实例,该函数能够屡次调用,用 SkeyeLive_Release 接口进行销毁。
· SkeyeLive_Release
接口申明:
LIB_SKEYELIVE_API void SkeyeLive_Release(SKEYELIVE_HANDLE handler);
接口阐明:
销毁一个由 SkeyeLive_Create()创立的实例;
参数阐明:
handler:[IN] SKEYELIVE_HANDLE(void*)类型,由 SkeyeLive_Create()创立的实例句柄
· SkeyeLive_StartCapture
接口申明:
LIB_SKEYELIVE_API int SkeyeLive_StartCapture(SKEYELIVE_HANDLE handler, SOURCE_TYPE eSourceType, int nCamId, int nAudioId, SKEYELIVE_HANDLE hCapWnd, int nEncoderType,
int nVideoWidth=640, int nVideoHeight=480, int nFps=25, int nBitRate=2048, char* szDataType = "YUY2", //VIDEO PARAM
int nSampleRate=44100, int nChannel=2 );
接口阐明:
开始一个数据源的采集,并初始化编码器;采集胜利返回 1,采集失败返回负值,正在采集返回 0;
参数阐明:
handler:[IN] SKEYELIVE_HANDLE(void*)类型,由 SkeyeLive_Create()创立的实例句柄
eSourceType:[IN] 数据源类型, 参考以下数据结构:
typedef enum tagSOURCE_TYPE
{
SOURCE_LOCAL_CAMERA = 0,// 本地音视频
SOURCE_SCREEN_CAPTURE =1,// 屏幕捕捉
SOURCE_FILE_STREAM = 2, // 文件流推送(mp4,ts,flv???)
SOURCE_RTSP_STREAM=3,//RTSP 流
SOURCE_RTMP_STREAM=4,//RTMP 流
// Any other Source to push
}SOURCE_TYPE;
nCamId:[IN] 本地 DShow 视频采集口 ID,eSourceType==SOURCE_LOCAL_CAMERA 时无效,从 0 开始,,小于 0 标示为不起用;该 ID 能够通过 SkeyeLive_GetCameraList()接口函数枚举,通过程序获取;
nAudioId:[IN] 本地 DShow 音频采集口 ID,eSourceType==SOURCE_LOCAL_CAMERA 时无效,从 0 开始,小于 0 标示为不起用;该 ID 能够通过 SkeyeLive_GetCameraList()接口函数枚举,通过程序获取;
hCapWnd:[IN] HWND 窗口句柄,用于显示预览采集的视频源;
nEncoderType:[IN] 编码类型,
0= 默认编码器(效率最低,通用性强)1= 软编码(效率高,通用性不强)2= 硬件编码(效率最高,通用性最低,须要英伟达独立显卡反对)参考以下数据结构:typedef enum tagENCODER_TYPE
{
ENCODER_DEFAULT = 0, // 默认编码器
ENCODER_FASTSOFTWARE = 1,// 疾速软编码
ENCODER_FASTHARDWARE = 2,// 疾速硬件编码,须要 Nvidia 显卡反对
}ENCODER_TYPE;
nVideoWidth:[IN] 指定采集视频的宽度
nVideoHeight:[IN] 指定采集视频的高度
nFps:[IN] 指定采集视频的帧率
nBitRate:[IN] 指定编码视频的比特率(码率)
szDataType:[IN] 指定采集数据源的格局,eSourceType==SOURCE_LOCAL_CAMERA 或者 eSourceType==SOURCE_SCREEN_CAPTURE 时无效,目前屏幕采集只反对“RGB24”格局, 摄像机采集反对“YUY2”和“RGB24”格局;
nSampleRate:[IN] 指定音频采集采样率
nChannel:[IN] 指定音频采集通道数 1= 单通道 2= 双通道
· SkeyeLive_StopCapture
接口申明:
LIB_SKEYELIVE_API void SkeyeLive_StopCapture(SKEYELIVE_HANDLE handler);
接口阐明:进行采集
参数阐明:
handler:[IN] SKEYELIVE_HANDLE(void*)类型,由 SkeyeLive_Create()创立的实例句柄
· SkeyeLive_StartPush
接口申明:
LIB_SKEYELIVE_API int SkeyeLive_StartPush(SKEYELIVE_HANDLE handler, PUSH_TYPE pushType, char* ServerIp, int nPushPort, char* sPushName, int nPushBufSize = 1024);
接口阐明:开始进行流推送,目前版本反对 RTMP 推送,如果要同时开启多种流推送须要调用屡次该函数,同时进行的时候也须要屡次调用 SkeyeLive_StopPush()来进行,由参数指定进行哪种类型的流
参数阐明:
handler:[IN] SKEYELIVE_HANDLE(void*)类型,由 SkeyeLive_Create()创立的实例句柄
pushType: [IN] 流推送类型,参考如下数据结构:
typedef enum tagPUSH_TYPE
{
PUSH_NONE = 0,
PUSH_RTSP ,
PUSH_RTMP ,
}PUSH_TYPE;
ServerIp: [IN] 推送的 (RTMP, RTSP) 流媒体服务器 IP
nPushPort: [IN] 推送流的服务器端口
sPushName: [IN] 推送流名称
nPushBufSize : [IN] 推送缓存大小,单位: KB
· SkeyeLive_StopPush
接口申明:
LIB_SKEYELIVE_API void SkeyeLive_StopPush(SKEYELIVE_HANDLE handler, PUSH_TYPE pushType);
接口阐明:进行推送
参数阐明:
handler:[IN] SKEYELIVE_HANDLE(void*)类型,由 SkeyeLive_Create()创立的实例句柄
pushType:[IN] 推送流类型,参考如下数据结构:
typedef enum tagPUSH_TYPE
{
PUSH_NONE = 0,
PUSH_RTSP ,
PUSH_RTMP ,
}PUSH_TYPE;
· SkeyeLive_StartServer
接口申明:
LIB_SKEYELIVE_API int SkeyeLive_StartServer(SKEYELIVE_HANDLE handler, int listenport, char *username, char *password, SKEYELIVE_CHANNEL_INFO_T *channelInfo, int channelNum);
接口阐明:开启 RTSP 流媒体服务公布
参数阐明:
handler:[IN] SKEYELIVE_HANDLE(void*)类型,由 SkeyeLive_Create()创立的实例句柄
listenport:[IN] RTSP 服务公布端口
username:[IN] RTSP 服务公布流拉流验证用户名,无需验证填空
password:[IN] RTSP 服务公布流拉流验证明码,无需验证填空
channelInfo:[IN] 流公布通道信息参数设置,可设置多个通道,一个通道标识一个流,通道数由 channelNum 指定,通道参数构造 SKEYELIVE_CHANNEL_INFO_T 阐明如下:
typedef struct __SKEYELIVE_CHANNEL_INFO_T
{
int id; // 通道号 ID
char name[64]; // 该通道流名称
int enable_multicast; // 是否启用组播
char multicast_addr[36]; // 组播 IP 地址,默认为 238.255.255.255
unsigned char ttl; // 组播 IP 包生存工夫(一个包达到目的地之前跳过网络的最大次数)
}SKEYELIVE_CHANNEL_INFO_T;
channelNum:[IN]
· SkeyeLive_StopServer
接口申明:
LIB_SKEYELIVE_API void SkeyeLive_StopServer(SKEYELIVE_HANDLE handler);
接口阐明:进行 RTSP 服务
参数阐明:
handler:[IN] SKEYELIVE_HANDLE(void*)类型,由 SkeyeLive_Create()创立的实例句柄
· SkeyeLive_GetAudioInputDevList
接口申明:
LIB_SKEYELIVE_API SKEYELIVE_DEVICE_LIST_T* SkeyeLive_GetAudioInputDevList(SKEYELIVE_HANDLE handler);
接口阐明:枚举音频输出设施,返回值为一个音频输出设施链表,链表由头到尾从 0 递增就是采集设施的编号 ID;
参数阐明:
handler:[IN] SKEYELIVE_HANDLE(void*)类型,由 SkeyeLive_Create()创立的实例句柄
· SkeyeLive_GetCameraList
接口申明:
LIB_SKEYELIVE_API SKEYELIVE_DEVICE_LIST_T* SkeyeLive_GetCameraList(SKEYELIVE_HANDLE handler);
接口阐明:枚举视频采集设施,返回值为一个视频采集设施链表,链表由头到尾从 0 递增就是采集设施的编号 ID;
参数阐明:
handler:[IN] SKEYELIVE_HANDLE(void*)类型,由 SkeyeLive_Create()创立的实例句柄
libSkeyeLive 库调用流程:
1) 通过 SkeyeLive_Create()创立一个实例,这个实例在其余的所有接口调用时都须要用到;
2} 功能模块调用,如采集,推流,服务公布等;
3) 进行功能模块调用;
4) SkeyeLive_Release()销毁由 SkeyeLive_Create()创立的一个实例。
SkeyeLive 调用 Demo
SkeyeLive 调用 Demo 能够在 gitee 上下载,界面如下图所示:
延时比照:
- SkeyeExPlayer 多功能播放器:
- SkeyePlayer 极速播放器