关于c++:SkeyeLive同屏直播库库功能介绍和接口说明与调用

38次阅读

共计 4733 个字符,预计需要花费 12 分钟才能阅读完成。

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 上下载,界面如下图所示:

延时比照:

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

正文完
 0