介紹
EasyRTMP是EasyDarwin團(tuán)隊(duì)開發(fā)的一套夸平臺(tái)的RTMP直播推送功能組件,內(nèi)部集成了包括:基本RTMP協(xié)議、斷線重連、異步推送、環(huán)形緩沖區(qū)、推送網(wǎng)絡(luò)擁塞自動(dòng)丟幀、緩沖區(qū)關(guān)鍵幀檢索、事件回調(diào)(斷線、音視頻數(shù)據(jù)回調(diào)),支持市面上絕大部分的RTMP流媒體服務(wù)器。詳見https://github.com/EasyDarwin/EasyRTMP。
EasyRTSPClient是一套全平臺(tái)支持穩(wěn)定、易用、支持重連的RTSPClient工具。能夠拉取RTSP流地址并解析出視頻幀和音頻幀數(shù)據(jù)。詳見https://github.com/EasyDarwin/EasyRTSPClient。
兩者都是支持多路同時(shí)操作的SDK庫,這樣就方便了我們基于他們做多路RTSP流同時(shí)轉(zhuǎn)成RTMP進(jìn)行推送。
多路RTSP轉(zhuǎn)RTMP流實(shí)現(xiàn)
單路RTSP轉(zhuǎn)RTMP流可直接參考https://github.com/EasyDarwin/EasyRTMP中EasyRTMP_RTSP的Demo。
多路RTSP流轉(zhuǎn)RTMP時(shí),采用Config.ini配置文件,來配置每路輸入的RTSP地址,以及目標(biāo)RTMP地址。
[channel0]
rtsp=rtsp://admin:admin@192.168.66.222/11
rtmp=rtmp://www.easydss.com:10085/live/test1
option=1
[channel1]
rtsp=rtsp://admin:admin@192.168.66.222/22
rtmp=rtmp://www.easydss.com:10085/live/test2初始化讀取Config.ini文件中的配置信息,保存到std::list中,然后為每個(gè)channel都起一路EasyRTSPClient來獲取RTSP數(shù)據(jù)。
std::list<_channel_info*>::iterator it;
for(it = gChannelInfoList.begin(); it != gChannelInfoList.end(); it++)
{
_channel_info* pChannel = *it;
pChannel->fLogHandle = TRACE_OpenLogFile(pChannel->fCfgInfo.channelName);
TRACE_LOG(pChannel->fLogHandle, "channel[%d] rtsp addr : %s\n", pChannel->fCfgInfo.channelId, pChannel->fCfgInfo.srcRtspAddr);
TRACE_LOG(pChannel->fLogHandle, "channel[%d] rtmp addr : %s\n", pChannel->fCfgInfo.channelId, pChannel->fCfgInfo.destRtmpAddr);
EasyRTSP_Init(&(pChannel->fNVSHandle));
if (NULL == pChannel->fNVSHandle)
{
TRACE_LOG(pChannel->fLogHandle, "%s rtsp init error. ret=%d!!!\n", pChannel->fCfgInfo.channelName , iret);
continue;
}
unsigned int mediaType = EASY_SDK_VIDEO_FRAME_FLAG | EASY_SDK_AUDIO_FRAME_FLAG;
EasyRTSP_SetCallback(pChannel->fNVSHandle, __RTSPSourceCallBack);
EasyRTSP_OpenStream(pChannel->fNVSHandle, pChannel->fCfgInfo.channelId, pChannel->fCfgInfo.srcRtspAddr, EASY_RTP_OVER_TCP, mediaType, 0, 0, pChannel, 1000, 0, pChannel->fCfgInfo.option, 0);
}在每個(gè)__RTSPSourceCallBack回調(diào)函數(shù)中去調(diào)用一路EasyRTMP對(duì)象,將視頻流和音頻流封裝成RTMP格式并推送到RTMP服務(wù)器。詳細(xì)代碼請去GitHub下載https://github.com/jinlong0813/RTMPLive
編譯及運(yùn)行
Windows上使用Visual Studio 2010開發(fā),當(dāng)然各位可以改成自己的編譯環(huán)境。
Linux上編譯命令如下:
清理: ./Buildit clean
32位編譯:./Buildit i386
64位編譯:./Buildit x64運(yùn)行時(shí)將Config.ini文件放至于可執(zhí)行文件相同路徑下,然后直接執(zhí)行可執(zhí)行程序,不用帶參數(shù)。



