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;             //通道号IDchar    name[64];   //该通道流名称int        enable_multicast;        //是否启用组播char    multicast_addr[36];      //组播IP地址,默认为238.255.255.255unsigned 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上下载,界面如下图所示:

延时比照:

  1. SkeyeExPlayer多功能播放器:
  2. SkeyePlayer极速播放器