1. 程式人生 > >EasyNVR流媒體伺服器接入EasyDSS雲視訊平臺快照上傳實現

EasyNVR流媒體伺服器接入EasyDSS雲視訊平臺快照上傳實現

EasyNVR擁有接入EasyDSS雲平臺的功能

接入EasyDSS雲平臺會定時向雲平臺上傳快照資料,這個快照資料用於雲平臺向客戶端提供快照展示

遇到的問題

由於快照上傳的間隔提供認為修改的功能,則我們限定最短時間為1分鐘

通道的數量會直接影響快照上傳

考慮到壓力情況,1分鐘之內上傳上千通道的快照

快照資料經過Base64編碼,會比快照真實資料擴大1.33333倍,資料量大

EasyNVR的固定通道設計

解決方案

將所有通道快照上傳分散在快照間隔時間內

若遇到通道未啟用、通道不線上則跳過,並且減少通道數量,增大間隔時間

實現

virtual SInt64 Run()
{
    EventFlags event = this
->GetEvents(); if (event & Task::kIdleEvent || event & Task::kUpdateEvent) { if (!channels_) return 0; bool allUploaded = true; for (int i = 0; i < MAX_CHANNEL_COUNT; i++) { if (snapCtrlArray_[i]) { allUploaded = false
; break; } } if (allUploaded) { return 0; } if (snapCtrlArray_[curSnapIndex_]) { snapCtrlArray_[curSnapIndex_] = false; int curChannel = curSnapIndex_ + 1; if (++curSnapIndex_ > MAX_CHANNEL_COUNT - 1
) { curSnapIndex_ = 0; } CameraInfo* cameraInfo = (*channels_)[curChannel]->GetChannelInfo(); if (!cameraInfo->enable || !cameraInfo->online) { --postSnapCount_; return 1; } postSnap(curChannel); } //return (std::min)(timeout_ * 60 / MAX_CHANNEL_COUNT, 3) * 1000; return timeout_ * 60 * 1000 / postSnapCount_; } if (event & Task::kTimeoutEvent) { channels_ = NULL; QTSS_RoleParams params; params.easyNVRChannelsConfigParams.inChannels = NULL; EasyNVRUtil::CallDispatch(Easy_NVRGetChannelsConfig_Role, QTSSModule::kGetChannelsConfigRole, params); channels_ = static_cast<std::map<int, EasyNVRChannel*>*>(params.easyNVRChannelsConfigParams.inChannels); postSnapCount_ = MAX_CHANNEL_COUNT; for (int i = 0; i < MAX_CHANNEL_COUNT; i++) { snapCtrlArray_[i] = true; } this->Signal(Task::kUpdateEvent); timeoutTask_.RefreshTimeout(); } return 0; }

關於EasyNVR

EasyNVR能夠通過簡單的網路攝像機通道配置,將傳統監控行業裡面的高清網路攝像機IP Camera、NVR等具有RTSP協議輸出的裝置接入到EasyNVR,EasyNVR能夠將這些視訊源的音視訊資料進行拉取,轉換為RTMP/HLS,進行全平臺終端H5直播(Web、Android、iOS),並且EasyNVR能夠將視訊源的直播資料對接到第三方CDN網路,實現網際網路級別的直播分發;

獲取更多資訊

Copyright © EasyDarwin.org 2012-2017

EasyDarwin