您的位置:首页 > 其它

libEasyScreenLive库功能介绍和接口说明与调用

2017-12-29 17:50 375 查看
EasyScreenLive是EasyDarwin开源流媒体团队开发的一个集采集,编码,推流和流媒体RTSP服务于一身的通用库,目前支持Windows,Android平台,通过EasyScreenLive我们就可以避免接触到稍显复杂的音视频源采集,编码和流媒体推送以及RTSP/RTP/RTCP服务流程,只需要调用EasyScreenLive的几个API接口,就能轻松、稳定地把流媒体音视频数据推送给EasyDSS服务器以及发布RTSP服务,RTSP服务支持组播和单播两种模式,可用于同屏直播,延时在300ms以内。

libEasyScreenLive API接口说明:

· EasyScreenLive_Create

接口声明:

LIB_EASYSLIVE_API EASYSLIVE_HANDLE EasyScreenLive_Create();


接口说明:

创建一个EasyScreenLive实例句柄,并返回,在功能模块接口调用时都要用到,一个句柄代表一个实例,该函数可以多次调用,用EasyScreenLive_Release接口进行销毁。

· EasyScreenLive_Release

接口声明:

LIB_EASYSLIVE_API void EasyScreenLive_Release(EASYSLIVE_HANDLE handler);


接口说明:

销毁一个由EasyScreenLive_Create()创建的实例;

参数说明:

handler: [IN] EASYSLIVE_HANDLE(void*)类型, 由EasyScreenLive_Create()创建的实例句柄

· EasyScreenLive_StartCapture

接口声明:

LIB_EASYSLIVE_API int EasyScreenLive_StartCapture(EASYSLIVE_HANDLE handler, SOURCE_TYPE eSourceType, int nCamId, int nAudioId,  EASYSLIVE_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] EASYSLIVE_HANDLE(void*)类型, 由EasyScreenLive_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可以通过EasyScreenLive_GetCameraList()接口函数枚举,通过顺序获取;

nAudioId:[IN] 本地DShow音频采集口ID,eSourceType==SOURCE_LOCAL_CAMERA 时有效,从0开始,小于0标示为不起用;该ID可以通过EasyScreenLive_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=双通道

· EasyScreenLive_StopCapture

接口声明:

LIB_EASYSLIVE_API void EasyScreenLive_StopCapture(EASYSLIVE_HANDLE handler);


接口说明:停止采集

参数说明:

handler:[IN] EASYSLIVE_HANDLE(void*)类型, 由EasyScreenLive_Create()创建的实例句柄

· EasyScreenLive_StartPush

接口声明:

LIB_EASYSLIVE_API int EasyScreenLive_StartPush(EASYSLIVE_HANDLE handler, PUSH_TYPE pushType, char* ServerIp, int nPushPort, char* sPushName, int nPushBufSize = 1024);


接口说明:开始进行流推送,目前版本支持RTMP推送,如果要同时开启多种流推送需要调用多次该函数,同时停止的时候也需要多次调用EasyScreenLive_StopPush()来停止,由参数指定停止哪种类型的流

参数说明:

handler:[IN] EASYSLIVE_HANDLE(void*)类型, 由EasyScreenLive_Create()创建的实例句柄

pushType: [IN] 流推送类型,参考如下数据结构:

typedef enum tagPUSH_TYPE

{

PUSH_NONE = 0,

PUSH_RTSP ,

PUSH_RTMP ,

}PUSH_TYPE;

ServerIp: [IN] 推送的(RTMP==EasyDSS, RTSP==EasyDarwin)服务器IP

nPushPort: [IN] 推送流的服务器端口

sPushName: [IN] 推送流名称

nPushBufSize : [IN] 推送缓存大小,单位: KB

· EasyScreenLive_StopPush

接口声明:

LIB_EASYSLIVE_API void EasyScreenLive_StopPush(EASYSLIVE_HANDLE handler, PUSH_TYPE pushType);


接口说明:停止推送

参数说明:

handler:[IN] EASYSLIVE_HANDLE(void*)类型, 由EasyScreenLive_Create()创建的实例句柄

pushType: [IN] 推送流类型,参考如下数据结构:

typedef enum tagPUSH_TYPE

{

PUSH_NONE = 0,

PUSH_RTSP ,

PUSH_RTMP ,

}PUSH_TYPE;

· EasyScreenLive_StartServer

接口声明:

LIB_EASYSLIVE_API int EasyScreenLive_StartServer(EASYSLIVE_HANDLE handler, int listenport, char *username, char *password,  EASYLIVE_CHANNEL_INFO_T *channelInfo, int channelNum);


接口说明:开启RTSP流媒体服务发布

参数说明:

handler:[IN] EASYSLIVE_HANDLE(void*)类型, 由EasyScreenLive_Create()创建的实例句柄

listenport:[IN] RTSP服务发布端口

username:[IN] RTSP服务发布流拉流验证用户名,无需验证填空

password:[IN] RTSP服务发布流拉流验证密码,无需验证填空

channelInfo:[IN] 流发布通道信息参数设置,可设置多个通道,一个通道标识一个流,通道数由channelNum指定,通道参数结构EASYLIVE_CHANNEL_INFO_T说明如下:

typedef struct __EASYLIVE_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包生存时间(一个包到达目的地之前跳过网络的最大次数)

}EASYLIVE_CHANNEL_INFO_T;

channelNum:[IN]

· EasyScreenLive_StopServer

接口声明:

LIB_EASYSLIVE_API void EasyScreenLive_StopServer(EASYSLIVE_HANDLE handler);


接口说明:停止RTSP服务

参数说明:

handler:[IN] EASYSLIVE_HANDLE(void*)类型, 由EasyScreenLive_Create()创建的实例句柄

· EasyScreenLive_GetAudioInputDevList

接口声明:

LIB_EASYSLIVE_API EASYLIVE_DEVICE_LIST_T* EasyScreenLive_GetAudioInputDevList(EASYSLIVE_HANDLE handler);


接口说明:枚举音频输入设备,返回值为一个音频输入设备链表,链表由头到尾从0递增就是采集设备的编号ID;

参数说明:

handler:[IN] EASYSLIVE_HANDLE(void*)类型, 由EasyScreenLive_Create()创建的实例句柄

· EasyScreenLive_GetCameraList

接口声明:

LIB_EASYSLIVE_API EASYLIVE_DEVICE_LIST_T* EasyScreenLive_GetCameraList(EASYSLIVE_HANDLE handler);


接口说明:枚举视频采集设备,返回值为一个视频采集设备链表,链表由头到尾从0递增就是采集设备的编号ID;

参数说明:

handler:[IN] EASYSLIVE_HANDLE(void*)类型, 由EasyScreenLive_Create()创建的实例句柄

libEasyScreenLive库调用流程:

1) 通过EasyScreenLive_Create()创建一个实例,这个实例在其他的所有接口调用时都需要用到;

2} 功能模块调用,如采集,推流,服务发布等;

3) 停止功能模块调用;

4) EasyScreenLive_Release()销毁由EasyScreenLive_Create()创建的一个实例。

EasyScreenLive 调用Demo

EasyScreenLive 调用Demo可以在github上下载,界面如下图所示:



延时对比:



硬件解码

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息