天天看點

【開發記錄】RTSP/RTP協定直播推送庫EasyPusher推RTSP流至EasyDarwin開源平台實作自定義Stream

基于EasyPusher sdk庫工程(即library module)實作一個推送用戶端非常簡單便捷,因為sdk端已經将各種煩人的狀态維護\錯誤檢查\權限判定\UI同步等功能都實作了,開發者僅僅隻需要實作若幹接口即可。

今天遇到一個客戶需要用EasyPusher推RTSP流至EasyDarwin流媒體服務,然後需要用Kurento服務拉EasyDarwin分發的RTSP流做其它應用,但是預設EasyPusher的流在EasyDarwin是有.sdp字尾的,但是Kurento服務不支援,需要我們技術進行協助。

我們先看下正常的效果,如下圖,紅色标注的為視訊流的字尾名.sdp。

【開發記錄】RTSP/RTP協定直播推送庫EasyPusher推RTSP流至EasyDarwin開源平台實作自定義Stream
【開發記錄】RTSP/RTP協定直播推送庫EasyPusher推RTSP流至EasyDarwin開源平台實作自定義Stream

這個是由推流端決定的流名稱,需要修改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”

【開發記錄】RTSP/RTP協定直播推送庫EasyPusher推RTSP流至EasyDarwin開源平台實作自定義Stream

看下效果如下圖:

【開發記錄】RTSP/RTP協定直播推送庫EasyPusher推RTSP流至EasyDarwin開源平台實作自定義Stream

關于EasyDarwin

EasyDarwin是TSINGSEE青犀視訊研發團隊研發的開源平台,能夠幫助流媒體開發者快速建構流媒體平台,更快更便捷的實作移動網際網路視訊直播或點播。目前其衍生的視訊流媒體平台包括EasyGBS、EasyNVR、EasyDSS、EasyCVR等,此外還包括EasyPlayer項目播放器,如果大家感興趣,歡迎大家聯系我們了解咨詢。

【開發記錄】RTSP/RTP協定直播推送庫EasyPusher推RTSP流至EasyDarwin開源平台實作自定義Stream

繼續閱讀