EasyNVR流媒體伺服器接入EasyDSS雲視訊平臺快照上傳實現
阿新 • • 發佈:2019-01-23
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