教学、会议、信息发布同屏直播采集,编码,组播,推流和流媒体RTSP服务于一身满足流媒体录播、直播同屏功能组件之EasyScreenlive库接口说明和调用
背景分析
随着信息化时代的到来,同屏技术在教学、会议、大型活动中的应用越来越广泛。同屏结束简单说来,就是将手机、平板等一些移动设备上面的音视频资料通过无线或有线网络同步到显示设备上。换言之,就是将移动设备中的音视频资料景象到显示频幕上面。就像照镜子一样,移动设备上显示什么,显示屏上就会显示什么。
EasyScreenLive是一个集采集,编码,推流和流媒体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] 指定采集数据源的格式, eSourceTypeSOURCE_LOCAL_CAMERA 或者eSourceTypeSOURCE_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] 推送的(RTMPEasyDSS, RTSPEasyDarwin)服务器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库调用流程:
通过EasyScreenLive_Create()创建一个实例,这个实例在其他的所有接口调用时都需要用到;
2} 功能模块调用,如采集,推流,服务发布等;
停止功能模块调用;
EasyScreenLive_Release()销毁由EasyScreenLive_Create()创建的一个实例。