zoukankan      html  css  js  c++  java
  • 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网络,实现互联网级别的直播分发;

    详细说明:http://www.easydarwin.org/easynvr/

    点击链接加入群【EasyNVR解决方案】:383501345

    获取更多信息

    邮件:support@easydarwin.org

    WEB:www.EasyDarwin.org

    Copyright © EasyDarwin.org 2012-2017

    EasyDarwin

  • 相关阅读:
    java 的异常和错误,有哪些
    java里的15种锁
    Netty知识点总结(一)——NIO
    Java中的路径问题
    Java定时任务-Timer
    安装Idea后需要做的3件事
    线程中的队列(queue)
    信号量(Semaphore)
    python线程的同步事件Event
    python中的GIL
  • 原文地址:https://www.cnblogs.com/babosa/p/7702424.html
Copyright © 2011-2022 走看看