教学、会议、信息发布同屏直播采集,编码,组播,推流和流媒体RTSP服务于一身满足流媒体录播、直播同屏功能组件之EasyScreenlive库接口说明和调用
背景分析
隨著信息化時(shí)代的到來(lái),同屏技術(shù)在教學(xué)、會(huì)議、大型活動(dòng)中的應(yīng)用越來(lái)越廣泛。同屏結(jié)束簡(jiǎn)單說(shuō)來(lái),就是將手機(jī)、平板等一些移動(dòng)設(shè)備上面的音視頻資料通過(guò)無(wú)線(xiàn)或有線(xiàn)網(wǎng)絡(luò)同步到顯示設(shè)備上。換言之,就是將移動(dòng)設(shè)備中的音視頻資料景象到顯示頻幕上面。就像照鏡子一樣,移動(dòng)設(shè)備上顯示什么,顯示屏上就會(huì)顯示什么。
EasyScreenLive是一個(gè)集采集,編碼,推流和流媒體RTSP服務(wù)于一身的通用庫(kù),目前支持Windows,Android平臺(tái),通過(guò)EasyScreenLive我們就可以避免接觸到稍顯復(fù)雜的音視頻源采集,編碼和流媒體推送以及RTSP/RTP/RTCP服務(wù)流程,只需要調(diào)用EasyScreenLive的幾個(gè)API接口,就能輕松、穩(wěn)定地把流媒體音視頻數(shù)據(jù)推送給EasyDSS服務(wù)器以及發(fā)布RTSP服務(wù),RTSP服務(wù)支持組播和單播兩種模式,可用于同屏直播,延時(shí)在300ms以?xún)?nèi)。
libEasyScreenLive API接口說(shuō)明:
· EasyScreenLive_Create
接口聲明:
LIB_EASYSLIVE_API EASYSLIVE_HANDLE EasyScreenLive_Create();
接口說(shuō)明:
創(chuàng)建一個(gè)EasyScreenLive實(shí)例句柄,并返回,在功能模塊接口調(diào)用時(shí)都要用到,一個(gè)句柄代表一個(gè)實(shí)例,該函數(shù)可以多次調(diào)用,用EasyScreenLive_Release接口進(jìn)行銷(xiāo)毀。
· EasyScreenLive_Release
接口聲明:
LIB_EASYSLIVE_API void EasyScreenLive_Release(EASYSLIVE_HANDLE handler);
接口說(shuō)明:
銷(xiāo)毀一個(gè)由EasyScreenLive_Create()創(chuàng)建的實(shí)例;
參數(shù)說(shuō)明:
handler: [IN] EASYSLIVE_HANDLE(void*)類(lèi)型, 由EasyScreenLive_Create()創(chuàng)建的實(shí)例句柄
· 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 );
接口說(shuō)明:
開(kāi)始一個(gè)數(shù)據(jù)源的采集,并初始化編碼器;采集成功返回1,采集失敗返回負(fù)值,正在采集返回0;
參數(shù)說(shuō)明:
handler:[IN] EASYSLIVE_HANDLE(void*)類(lèi)型, 由EasyScreenLive_Create()創(chuàng)建的實(shí)例句柄
eSourceType:[IN] 數(shù)據(jù)源類(lèi)型,參考以下數(shù)據(jù)結(jié)構(gòu):
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 時(shí)有效,從0開(kāi)始,,小于0標(biāo)示為不起用;該ID可以通過(guò)EasyScreenLive_GetCameraList()接口函數(shù)枚舉,通過(guò)順序獲取;
nAudioId:[IN] 本地DShow音頻采集口ID,eSourceType = = SOURCE_LOCAL_CAMERA 時(shí)有效,從0開(kāi)始,小于0標(biāo)示為不起用;該ID可以通過(guò)EasyScreenLive_GetCameraList()接口函數(shù)枚舉,通過(guò)順序獲取;
hCapWnd:[IN] HWND窗口句柄,用于顯示預(yù)覽采集的視頻源;
nEncoderType:[IN] 編碼類(lèi)型,
0=默認(rèn)編碼器(效率最低,通用性強(qiáng))
1=軟編碼(效率高,通用性不強(qiáng))
2=硬件編碼(效率最高,通用性最低,需要英偉達(dá)獨(dú)立顯卡支持)
參考以下數(shù)據(jù)結(jié)構(gòu):
typedef enum tagENCODER_TYPE
{
ENCODER_DEFAULT = 0, //默認(rèn)編碼器
ENCODER_FASTSOFTWARE = 1,//快速軟編碼
ENCODER_FASTHARDWARE = 2,//快速硬件編碼,需要Nvidia顯卡支持
}ENCODER_TYPE;
nVideoWidth:[IN] 指定采集視頻的寬度
nVideoHeight:[IN] 指定采集視頻的高度
nFps:[IN] 指定采集視頻的幀率
nBitRate:[IN] 指定編碼視頻的比特率(碼率)
szDataType:[IN] 指定采集數(shù)據(jù)源的格式, eSourceTypeSOURCE_LOCAL_CAMERA 或者eSourceTypeSOURCE_SCREEN_CAPTURE時(shí)有效,目前屏幕采集只支持“RGB24”格式, 攝像機(jī)采集支持“YUY2”和“RGB24”格式;
nSampleRate:[IN] 指定音頻采集采樣率
nChannel:[IN] 指定音頻采集通道數(shù) 1=單通道 2=雙通道
· EasyScreenLive_StopCapture
接口聲明:
LIB_EASYSLIVE_API void EasyScreenLive_StopCapture(EASYSLIVE_HANDLE handler);
接口說(shuō)明:停止采集
參數(shù)說(shuō)明:
handler:[IN] EASYSLIVE_HANDLE(void*)類(lèi)型, 由EasyScreenLive_Create()創(chuàng)建的實(shí)例句柄
· EasyScreenLive_StartPush
接口聲明:
LIB_EASYSLIVE_API int EasyScreenLive_StartPush(EASYSLIVE_HANDLE handler, PUSH_TYPE pushType, char* ServerIp, int nPushPort, char* sPushName, int nPushBufSize = 1024);
接口說(shuō)明:
開(kāi)始進(jìn)行流推送,目前版本支持RTMP推送,如果要同時(shí)開(kāi)啟多種流推送需要調(diào)用多次該函數(shù),同時(shí)停止的時(shí)候也需要多次調(diào)用EasyScreenLive_StopPush()來(lái)停止,由參數(shù)指定停止哪種類(lèi)型的流
參數(shù)說(shuō)明:
handler:[IN] EASYSLIVE_HANDLE(void*)類(lèi)型, 由EasyScreenLive_Create()創(chuàng)建的實(shí)例句柄
pushType: [IN] 流推送類(lèi)型,參考如下數(shù)據(jù)結(jié)構(gòu):
typedef enum tagPUSH_TYPE
{
PUSH_NONE = 0,
PUSH_RTSP ,
PUSH_RTMP ,
}PUSH_TYPE;
ServerIp: [IN] 推送的(RTMPEasyDSS, RTSPEasyDarwin)服務(wù)器IP
nPushPort: [IN] 推送流的服務(wù)器端口
sPushName: [IN] 推送流名稱(chēng)
nPushBufSize : [IN] 推送緩存大小,單位: KB
· EasyScreenLive_StopPush
接口聲明:
LIB_EASYSLIVE_API void EasyScreenLive_StopPush(EASYSLIVE_HANDLE handler, PUSH_TYPE pushType);
接口說(shuō)明:停止推送
參數(shù)說(shuō)明:
handler:[IN] EASYSLIVE_HANDLE(void*)類(lèi)型, 由EasyScreenLive_Create()創(chuàng)建的實(shí)例句柄
pushType: [IN] 推送流類(lèi)型,參考如下數(shù)據(jù)結(jié)構(gòu):
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);
接口說(shuō)明:
開(kāi)啟RTSP流媒體服務(wù)發(fā)布
參數(shù)說(shuō)明:
handler:[IN] EASYSLIVE_HANDLE(void*)類(lèi)型, 由EasyScreenLive_Create()創(chuàng)建的實(shí)例句柄
listenport:[IN] RTSP服務(wù)發(fā)布端口
username:[IN] RTSP服務(wù)發(fā)布流拉流驗(yàn)證用戶(hù)名,無(wú)需驗(yàn)證填空
password:[IN] RTSP服務(wù)發(fā)布流拉流驗(yàn)證密碼,無(wú)需驗(yàn)證填空
channelInfo:[IN] 流發(fā)布通道信息參數(shù)設(shè)置,可設(shè)置多個(gè)通道,一個(gè)通道標(biāo)識(shí)一個(gè)流,通道數(shù)由channelNum指定,通道參數(shù)結(jié)構(gòu)EASYLIVE_CHANNEL_INFO_T說(shuō)明如下:
typedef struct __EASYLIVE_CHANNEL_INFO_T
{
int id; //通道號(hào)ID
char name[64]; //該通道流名稱(chēng)
int enable_multicast; //是否啟用組播
char multicast_addr[36]; //組播IP地址,默認(rèn)為238.255.255.255
unsigned char ttl; // 組播IP包生存時(shí)間(一個(gè)包到達(dá)目的地之前跳過(guò)網(wǎng)絡(luò)的最大次數(shù))
}EASYLIVE_CHANNEL_INFO_T;
channelNum:[IN]
· EasyScreenLive_StopServer
接口聲明:
LIB_EASYSLIVE_API void EasyScreenLive_StopServer(EASYSLIVE_HANDLE handler);
接口說(shuō)明:
停止RTSP服務(wù)
參數(shù)說(shuō)明:
handler:[IN] EASYSLIVE_HANDLE(void*)類(lèi)型, 由EasyScreenLive_Create()創(chuàng)建的實(shí)例句柄
· EasyScreenLive_GetAudioInputDevList
接口聲明:
LIB_EASYSLIVE_API EASYLIVE_DEVICE_LIST_T* EasyScreenLive_GetAudioInputDevList(EASYSLIVE_HANDLE handler);
接口說(shuō)明:
枚舉音頻輸入設(shè)備,返回值為一個(gè)音頻輸入設(shè)備鏈表,鏈表由頭到尾從0遞增就是采集設(shè)備的編號(hào)ID;
參數(shù)說(shuō)明:
handler:[IN] EASYSLIVE_HANDLE(void*)類(lèi)型, 由EasyScreenLive_Create()創(chuàng)建的實(shí)例句柄
· EasyScreenLive_GetCameraList
接口聲明:
LIB_EASYSLIVE_API EASYLIVE_DEVICE_LIST_T* EasyScreenLive_GetCameraList(EASYSLIVE_HANDLE handler);
接口說(shuō)明:
枚舉視頻采集設(shè)備,返回值為一個(gè)視頻采集設(shè)備鏈表,鏈表由頭到尾從0遞增就是采集設(shè)備的編號(hào)ID;
參數(shù)說(shuō)明:
handler:[IN] EASYSLIVE_HANDLE(void*)類(lèi)型, 由EasyScreenLive_Create()創(chuàng)建的實(shí)例句柄
libEasyScreenLive庫(kù)調(diào)用流程:
通過(guò)EasyScreenLive_Create()創(chuàng)建一個(gè)實(shí)例,這個(gè)實(shí)例在其他的所有接口調(diào)用時(shí)都需要用到;
2} 功能模塊調(diào)用,如采集,推流,服務(wù)發(fā)布等;
停止功能模塊調(diào)用;
EasyScreenLive_Release()銷(xiāo)毀由EasyScreenLive_Create()創(chuàng)建的一個(gè)實(shí)例。
總結(jié)
以上是生活随笔為你收集整理的教学、会议、信息发布同屏直播采集,编码,组播,推流和流媒体RTSP服务于一身满足流媒体录播、直播同屏功能组件之EasyScreenlive库接口说明和调用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MySQL5.6免安装配置与“系统找不到
- 下一篇: toJSON 方法 (Date) (Ja