首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Qt编写安防视频监控系统40-onvif线程处理

    整个onvif模块大部分的功能都有了以后,除了在demo上点点按钮可以执行获取结果显示外,最终还是要应用到视频监控中,在按钮上点点和系统中后台自动运行是两码事,比如onvif校时和事件订阅,不会说是傻到在监控系统界面上提供按钮给用户点击才去执行,最多做的应该是系统设置中提供两个开关比如自动校时、事件订阅,可以方便的开启这几个功能。开启以后等监控系统启动后自动去处理,比如挨个对摄像机进行校时处理以及订阅事件,为了能够做到添加摄像机后自动立即应用,特意改成了在打开摄像机视频画面的时候,主动去实例化DeviceOnvif类(每个摄像机都对应一个实例)

    02

    iOS安全之三攻三防

    互联网世界每分钟都在上演黑客攻击,由此导致的财产损失不计其数。金融行业在安全方面的重视不断加深,而传统互联网行业在安全方面并没有足够重视,这样导致开发的APP在逆向开发人员面前等同于裸奔,甚至有些小厂前后台在账号密码处理上采取明文传送,本地存储,这等同于将账号密码直接暴露无疑。当然即使采用加密传送,逆向APP后依然可以获取到账号密码,让你在神不知鬼不觉的情况下将账号密码发送到了黑客邮箱,所以攻防终究是一个相互博弈的过程。本文主要分析常见的几种攻击和防护手段,通过攻击你可以看到你的APP是如何被一步一步被攻破的。有了攻击,我们针对相应的攻击就是见招拆招了。

    02

    如何添加APP到Buildroot里(以瑞芯微rv1126为例)

    Buildroot是Linux平台上一个构建嵌入式Linux系统的框架,整个Buildroot是由Makefile脚本和Kconfig配置文件构成。可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写到机器上运行的Linux系统软件(包含boot、kernel、rootfs以及rootfs中的各种库和应用程序)。制作的rootfs通常需要包含很多第三方软件,比如busybox,udhcpc,tftp,apache,sqlite,PHP,iptable,DNS等,为避免复杂的移植工作,在buildroot中通过menuconfig配置我们根文件系统中需要的功能,将不需要的去掉,再执行make编译,buildroot就会自动从指定的服务器上下载源码包,自动编译,自动搭建我们所需要的嵌入式根文件系统。

    04

    强制DataNode向NameNode上报blocks

    正常情况下,什么时候上报blocks,是由NameNode通过回复心跳响应的方式触发的。 一次机房搬迁中,原机房hadoop版本为2.7.2,新机房版本为2.8.0,采用先扩容再缩容的方式搬迁。由于新旧机房机型不同和磁盘数不同,操作过程搞混过hdfs-site.xml,因为两种不同的机型,hdfs-site.xml不便做到相同,导致了NameNode报大量“missing block”。 然而依据NameNode所报信息,在DataNode能找到那些被标记为“missing”的blocks。修复配置问题后,“missing block”并没有消失。结合DataNode源代码,估计是因为DataNode没有向NameNode上报blocks。 结合DataNode的源代码,发现了HDFS自带的工具triggerBlockReport,它可以强制指定的DataNode向NameNode上报块,使用方法为: hdfs dfsadmin -triggerBlockReport datanode_host:ipc_port 如:hdfs dfsadmin -triggerBlockReport 192.168.31.35:50020 正常情况下NameNode启动时,会要求DataNode上报一次blocks(通过fullBlockReportLeaseId值来控制),相关源代码如下: DataNode相关代码(BPServiceActor.java): private void offerService() throws Exception {     HeartbeatResponse resp = sendHeartBeat(requestBlockReportLease); // 向NameNode发向心跳     long fullBlockReportLeaseId = resp.getFullBlockReportLeaseId(); // 心跳响应     boolean forceFullBr = scheduler.forceFullBlockReport.getAndSet(false); // triggerBlockReport强制上报仅一次有效     if (forceFullBr) {         LOG.info("Forcing a full block report to " + nnAddr);     }     if ((fullBlockReportLeaseId != 0) || forceFullBr) {         cmds = blockReport(fullBlockReportLeaseId);         fullBlockReportLeaseId = 0;     } } // NameNode相关代码(FSNamesystem.java): /** * The given node has reported in.  This method should: * 1) Record the heartbeat, so the datanode isn't timed out * 2) Adjust usage stats for future block allocation *  * If a substantial amount of time passed since the last datanode  * heartbeat then request an immediate block report.   *  * @return an array of datanode commands  * @throws IOException */ HeartbeatResponse handleHeartbeat(DatanodeRegistration nodeReg,   StorageReport[] reports, long cacheCapacity, long cacheUsed,   int xceiverCount, int xmitsInProgress, int failedVolumes,   VolumeFailureSummary volumeFailureSummary,   boolean requestFullBlockReportLease) throws IOException {     readLock();     try {         //get datanode commands         final int maxTransfer = blockManager.getMaxReplicat

    02
    领券