EasyPlayer、EasyRTSPClient是如何設計重連的
首先大概解釋一下EasyRTSPClient與EasyPlayer間的關系:EasyRTSPClient是一個專門用于與RTSP流媒體伺服器互動的RTSPClient架構,類似于live555的OpenRTSP功能,他能夠很好很相容地實作RTSP OPTIONS、SETUP、PLAY、TEARDOWN等功能,還能進行資料回調的解析和網絡事件的回調,更重要的是EasyRTSPClient非常穩定,用于工業級項目3年多,收到了很多使用者發來的好評!
EasyPlayer的底層RTSP互動過程全部采用的是libEasyRTSPClient來實作的,這樣EasyPlayer隻需要專注于擷取到的資料的處理過程,而且不需要關注其他的網絡協定部分的功能,EasyPlayer隻需要調用EasyRTSPClient的相關接口和回調處理,就能控制整個RTSP播放流程的運轉了!
重點說一下EasyRTSPClient是如何進行RTSP重連過程的,EasyRTSPClient采用的是線程控制的,内部RTSP采用的是一個獨立線程運作擷取資料,再在擷取到資料後,進行解析回調,外部線程進行時間統計,當逾時時間内沒有任何視訊或者音頻資料回調,外部線程會主動幹涉内部RTSP線程,重新goto到RTSP初始狀态,重新開始連接配接RTSP Server伺服器;
上層對RTSP重連的多種控制方法
我們先觀察EasyRTSPClient的事件回調:
‘
else if (_frameType == EASY_SDK_EVENT_FRAME_FLAG)//回調連接配接狀态事件
{
// EasyRTSPClient開始進行連接配接,建立EasyRTSPClient連接配接線程
if (NULL == _pBuf && NULL == _frameInfo)
{
printf("Connecting:%s ...\n", fRTSPURL);
}
// EasyRTSPClient RTSPClient連接配接錯誤,錯誤碼通過EasyRTSP_GetErrCode()接口擷取,比如404
else if (NULL != _frameInfo && _frameInfo->codec == EASY_SDK_EVENT_CODEC_ERROR)
{
printf("Error:%s:%d :%s ...\n", fRTSPURL, EasyRTSP_GetErrCode(fRTSPHandle), _pBuf?_pBuf:"null" );
}
// EasyRTSPClient連接配接線程退出,此時上層應該停止相關調用,複位連接配接按鈕等狀态
else if (NULL != _frameInfo && _frameInfo->codec == EASY_SDK_EVENT_CODEC_EXIT)
{
printf("Exit:%s,Error:%d ...\n", fRTSPURL, EasyRTSP_GetErrCode(fRTSPHandle));
}
}
‘
EasyRTSPClient會在幾種情況下回調出狀态:
- RTSPClient開始連接配接的時候;
- RTSPClient連接配接發送錯誤的時候會立即回報回調;
- RTSPClient連接配接線程退出的時候;
EasyRTSPClient自身有重連功能,如果使用者不想麻煩處理重連的過程,完全可以交由EasyRTSPClient内部處理,如果使用者想接管重連過程,主要是處理 EASY_SDK_EVENT_CODEC_ERROR 和 EASY_SDK_EVENT_CODEC_EXIT 兩種回調;
EasyPlayer
EasyPlayer是由EasyDarwin開源團隊開發和維護的一個流媒體播放器項目,目前有RTSP版和Pro版兩個版本,RTSP支援Windows(支援多視窗、包含ActiveX,npAPI Web插件)、Android平台,iOS平台,視訊支援H.264,H.265,MPEG4,MJPEG,音頻支援G711A,G711U,G726,AAC,支援RTSP over TCP/UDP,支援硬解碼,是一套極佳的RTSP流播放元件;
EasyPlayer Pro版支援RTSP、RTMP、HTTP、HLS等各種流媒體協定播放,穩定、高效、可靠,支援Windows、Android、iOS!
擷取更多資訊
郵件:[email protected]
WEB:www.EasyDarwin.org
Copyright © EasyDarwin.org 2012-2017