基于EasyPusher sdk庫工程(即library module)實作一個推送用戶端非常簡單便捷,因為sdk端已經将各種煩人的狀态維護\錯誤檢查\權限判定\UI同步等功能都實作了,開發者僅僅隻需要實作若幹接口即可。
今天遇到一個客戶需要用EasyPusher推RTSP流至EasyDarwin流媒體服務,然後需要用Kurento服務拉EasyDarwin分發的RTSP流做其它應用,但是預設EasyPusher的流在EasyDarwin是有.sdp字尾的,但是Kurento服務不支援,需要我們技術進行協助。
我們先看下正常的效果,如下圖,紅色标注的為視訊流的字尾名.sdp。
這個是由推流端決定的流名稱,需要修改EasyPusher代碼子產品,StartPush函數中定義參數sPushName為流名稱,函數定義如下:
int CSourceManager::StartPush(char* ServerIp, int nPushPort, char* sPushName, int nPushBufSize, bool bPushRtmp)
m_sPushInfo.pusherHandle = EasyPusher_Create();
strcpy(m_sPushInfo.pushServerAddr, ServerIp);
m_sPushInfo.pushServerPort = nPushPort;
strcpy(m_sPushInfo.sdpName, sPushName);
Easy_U32 nRet = 0;
if (NULL != m_sPushInfo.pusherHandle )
{
EasyPusher_SetEventCallback(m_sPushInfo.pusherHandle, __EasyPusher_Callback, 0, NULL);
nRet = EasyPusher_StartStream(m_sPushInfo.pusherHandle ,
ServerIp, nPushPort, sPushName, EASY_RTP_OVER_TCP, "", "",
(EASY_MEDIA_INFO_T*)&m_mediainfo, nPushBufSize, 0);//512-2048
}
else
{
nRet = -1;
}
m_bPushRtmp = bPushRtmp;
if (bPushRtmp)
{
if (!m_pEasyrtmp)
{
m_pEasyrtmp=new EasyRtmp();
}
char szURL[MAX_PATH];
memset(szURL, 0, sizeof(MAX_PATH));
sprintf(szURL, "rtmp://%s:1935/live/%s", ServerIp, sPushName); nRet = m_pEasyrtmp->Link(szURL,1280);
}
其中sPushName 為傳入的Stream名稱,我們強制定義sPushName=”2”
看下效果如下圖:
關于EasyDarwin
EasyDarwin是TSINGSEE青犀視訊研發團隊研發的開源平台,能夠幫助流媒體開發者快速建構流媒體平台,更快更便捷的實作移動網際網路視訊直播或點播。目前其衍生的視訊流媒體平台包括EasyGBS、EasyNVR、EasyDSS、EasyCVR等,此外還包括EasyPlayer項目播放器,如果大家感興趣,歡迎大家聯系我們了解咨詢。