分类 小雉系统 下的文章

本文原地址: http://feitianzhi.com/boke/index.php/archives/56/

转载请注明出处,有疑问或错误请发邮件到[email protected] 或加QQ群:869598376


背景

      linux分为很多发行版本,发行版本的内核可以升级,比如centos7可以使用kernel 4.,5.的内核(官方默认为3.*),但发行版本间确无法升级,比如centos7不能升级为ubuntu16.04,切换发行版本只能重装系统,甚至在同一发行版本间也不能升级,比如centos 8无法升级为rocky linux 9;


原因分析

      linux发行版本虽都使用同一内核,但应用层的构架没有统一标准,内存的配置文件也是千差万别,本处以ssh连接为例,在centos 8中的ssh_keys用户组号为982,而rocky linux 9中的ssh_keys用户组号为994,即使其他数据完全一样,仅这一区别,升级后直接导致ssh服务不可用;
centos 8无法升级为rocky linux 9


版本不能升级的影响

  1. 驱动问题,新硬件的驱动不能支持老版本,如intel的千兆wifi芯片,ax200、ax201、ax210、ax211只能支持5.2以上的内核,centos7(3.内核),centos8(4.内核)无法使用,虽然可以升级内核解决,但非官方原版,其稳定性与兼容性无法保证,使用官方原版可以共享他人成果,bug修正;
  2. 生态问题,linux发行版本有其支持维护生命周期,比如centos8于2021年12月停止维护,停止维护后dnf(yum)安装软件包受限,运维成本增加,新版本的应用软件也不会再针对centos8进行测试;
  3. 软件臃肿,最新的软件基于rocky linux9适配,但因项目存在centos7、centos8、ubuntu16.04等历史系统,软件不得不进行适配,增加工作量,同时需要大量的测试(开发人员需要熟悉多种发行版本,并针对调整);
  4. 持续消耗的运维成本,历史遗留的老系统需要持续维护(除非解约)或重新装机(每3年一次系统更替,远程机票出差等运维成本高昂);

如何实现跨linux发行版本升级

方案一:差异升级 方案二:镜像升级
描述 找出原系统A与目标系统B之间的差异,写脚本进行修改;
如ssh_keys用户组号变动需要修改group数据,并把与之相关的文件用户组号进行修改(有哪些相关文件?头疼);
典型商业案例:Redhat服务,redhat公司可为付费用户提供此升级方案
原系统A为A镜像,目标系统B为B镜像,系统升级即为镜像切换,只需继承网路配置和root密码(属于配置数据),其余部分之间替换
能否安全升级 因glibc等核心库的依赖(如只替换部分断电,将导致系统无法启动),难以安全升级 可采用双镜像设计,切换时先经行校验,实现安全升级
能否回滚 脚本依赖A与B之间的差异,升级与回滚逻辑不一致,难以实现 回滚也是镜像切换,与升级逻辑一致,可升级即可回滚
结论 适合redhat等原创linux的公司 适合做应用的公司,继承开源版本系统的所有功能,定制自己需要的应用部分

期望的方案

  1. 软件开发只需要考虑特定版本进行适配,如原来基于centos8开发的应用,现在换rocky linux9系统后,软件仅需要考虑rocky linux9系统,删除与centos8相关的代码,无须兼容centos8;
  2. 系统可以跨发行版本直接升级,包含引导、内核、驱动、虚根、应用软件;比如原来是centos8系统(源系统为centos8集成好所有应用的一个镜像),一键升级为rocky linux9(新系统是rocky linux9集成好所有应用的一个镜像);
  3. 系统可以跨发行版本进行降级;比如系统已升级为最新版本的系统rocky linux9,但发现某应用A工作不正常(可能A未适配好rocky linux9),此时可以一键降级为centos8系统(应用A也降级为centos8适配过的版本),测试A的工作效果(让应用A立即恢复正常或测试A的工作效果以便在rocky linux9调整应用A,让应用A在rocky linux9中工作正常);
  4. 系统升级保证安全,允许升级过程断电,升级过程中网络故障自动校正(比如某软件包,驱动传输过程中被篡改,系统能自动识别,并拒绝升级);
  5. 故障恢复机制,应用运行过程中会产生临时文件,也可能因bug修改系统中关键文件,如不适当修改/etc中文件、修改驱动导致系统运行故障;故障恢复机制让系统具备系统故障时重启后自动恢复自初始状态(除应用指定的数据目录、网络配置、系统密码外的所有目录与文件恢复自初始状态),保证系统重启肯定可以正常运行;

小雉系统解决方案

      “小雉系统”是按以上需求的设计的一个镜像升级解决方案,适合ubuntu、centos、rocky linux、debian等linux发行版本;“小雉系统”仅是提供一个打包方案,无须重新编译原版系统的任何代码,稳定性、驱动、使用方法均与原发行版本完全一致(因“小雉系统”只提供打包方案,并不定义任何启动逻辑);
      “小雉系统”解决方案开源,项目地址:
            github https://github.com/feitianzhi/xiaozhios
            gitee https://gitee.com/feitianzhi/xiaozhios
猜您可能喜欢
小雉系统安装: http://www.feitianzhi.com/boke/index.php/archives/11/
小雉系统安装包制作: http://www.feitianzhi.com/boke/index.php/archives/50/
小雉系统网络配置:http://www.feitianzhi.com/boke/index.php/archives/15/
小雉系统硬盘配置:http://www.feitianzhi.com/boke/index.php/archives/16/
小雉系统远程升级:http://www.feitianzhi.com/boke/index.php/archives/14/
使用Google Authenticator为小雉系统增加动态密码功能:http://www.feitianzhi.com/boke/index.php/archives/17/
小雉配置工具:http://www.feitianzhi.com/boke/index.php/fslib-config.html
资源下载:http://www.feitianzhi.com/boke/index.php/ziyuanxiazai.html

本文原地址: http://www.feitianzhi.com/boke/index.php/archives/55/

转载请注明出处,有疑问或错误请发邮件到[email protected] 或加QQ群:869598376


背景

      之前一直使用腾讯企业邮箱,最近腾讯强制绑定微信、手机验证让人不爽;


方案

      本方案是基于centos8.1进行定制,增加邮件相关的组件(大概18M),实现基础的邮件收发功能;
小雉系统邮件服务器
      本文演示以vultr的vps为例搭建邮件服务器;


步骤

  1. 系统安装,配置网络,配置硬盘,参考http://www.feitianzhi.com/boke/index.php/archives/11/ 进行安装;
  2. 升级,在http://www.feitianzhi.com/boke/index.php/ziyuanxiazai.html 选择 4.181.1507 以后的版本参考http://www.feitianzhi.com/boke/index.php/archives/14/ 进行升级;
  3. 使用ftp把https://download.csdn.net/download/zhangrui_fslib_org/87637156的mysql初始数据库上传到ftp://admin:[email protected]的根目录,如果存在权限问题,可以ssh登录(root/12345)后chmod 777 /fs/project/data(ftp的根目录);
  4. ssh登录(root/12345)主机,执行

    cd /fs/project/data;
    gzip -cd mysql-mail.cpio.gz|cpio -idvm;
    sync;
    reboot;

  5. 使用浏览器访问http://ip/mailadmin/index.php 管理域名服务器(admin/admin123),包括添加域名,添加邮箱;
  6. 使用浏览器访问http://ip/maila/index.php 登录邮箱,进行邮件收发(账户密码为第5步添加的用户名密码);

猜您可能喜欢
小雉系统安装: http://www.feitianzhi.com/boke/index.php/archives/11/
小雉系统安装包制作: http://www.feitianzhi.com/boke/index.php/archives/50/
小雉系统网络配置:http://www.feitianzhi.com/boke/index.php/archives/15/
小雉系统硬盘配置:http://www.feitianzhi.com/boke/index.php/archives/16/
小雉系统远程升级:http://www.feitianzhi.com/boke/index.php/archives/14/
使用Google Authenticator为小雉系统增加动态密码功能:http://www.feitianzhi.com/boke/index.php/archives/17/
小雉配置工具:http://www.feitianzhi.com/boke/index.php/fslib-config.html
资源下载:http://www.feitianzhi.com/boke/index.php/ziyuanxiazai.html




序号类别 模块名称 依赖模块 简要说明 备注
1基础模块 FsObject系列
  • 提供线程内的内存池及引用计数实现
  • 提供多线程的内存池及引用计数实现
  • 提供数组链表和排序方法
  • 提供字符串,二进制,结构体链表排序
  • 必须
    2 可变栈
  • 提供一个在栈上动态申请空间的方法
  • 申请的空间内存无须释放
  • 空间自动调整到实际需要的大小
  • 可使用malloc和free替换
    3 通用加解密模块 md5、sha、crc、base64、摘要认证、3Bit、4Bit等加密解密功能 必须
    4 EBML
  • 提供储二进制、整数、小数、字符串的嵌套数据结构
  • 提供ebml序列化与反序列化
  • 提供加密与解密功能
  • 必须
    5 xml EBML
  • 提供xml序列化与反序列化
  • 提供xml同ebml互转的功能
  • 可选
    6 json EBML
  • 提供json序列化与反序列化
  • 提供xml同ebml互转的功能
  • 可选
    7 DNS
  • 提供异步的DNS请求功能(解决先系统请求dns卡顿的问题)
  • 可选
    8 Config
  • EBML
  • xml
  • json
  • 提供储二进制、整数、小数、字符串自描述实现
  • 提供模板自描述实现
  • 提供二进制、整数、小数、字符串的读取功能
  • 提供模板的读取功能
  • 提供从ebml、xml、json中导入数据功能
  • 提供导出ebml、xml、json数据功能
  • 兼容性配置需要
    9异常处理 监控模块 xml
  • 提供线程创建顺序跟踪
  • 提供线程资源占用统计
  • 提供线程死锁诊断
  • 提供实时报表功能
  • 提供循环标记功能(不打印,在出问题后显示)
  • 可选
    10 崩溃反编译模块 监控模块
  • 崩溃自动进入调试模式
  • 提供调用堆栈、源代码的行号
  • 显示崩溃时的线程信息
  • 重要的异常内存或结构落盘
  • 可选
    11 模块化日志
  • 为每个模块提供单独的日志级别控制
  • 运行时可修改任意模块的日志级别
  • 提供异常关注点设置
  • 可选
    12 日志捕捉模块
  • 捕捉程序的标准输出或错误发送给日志服务器
  • 记录日志并管理日志大小
  • 可选
    13 日志服务器
  • 收取与缓存日志数据
  • 为监控模块提供一个交互接口
  • 过滤模块化日志产生的关注点并写入硬盘
  • 检测程序的状态,把崩溃时的日志信息写入硬盘
  • 日志实时信息查看
  • 日志历史信息查看
  • 可选
    14 硬件看门狗
  • 判断系统是否正常
  • 在系统正常时通过驱动重置硬件计时器
  • 处理父进程变动异常
  • 可选
    15框架相关 多端口汇聚
  • 对收到的数据进行预判断(遍历7层协议库)把连接交响应的应用处理(如80端口上收到http数据让nginx处理,收到php数据让php-fpm数据,收到sip指令交gb28181模块处理)
  • 可同时绑定多个端口,数据由哪个模块处理与端口号无关,只与内容相关
  • 必须
    16 配置服务中心
  • Config
  • 多端口汇聚
  • 提供配置注册接口(每个模块只声明自己需要的参数)
  • 汇聚所有模块的需求生成配置
  • 从硬盘上读取历史配置,导入新配置中并处理兼容性问题
  • 响应网络请求,导出xml,json配置发送给客户端或接受客户端的配置数据并写入硬盘
  • 在配置发生变化(客户端发送新配置,或模块申请新参数)时,自动处理历史配置与新配置结构的差异,并把处理结果通知所有应用模块(有调用注册接口的模块),让模块同步配置
  • 提供别名设置,无论逻辑上数据需要中转多少次,执行始终直接操作最终对象
  • 必须
    17 接口管理中心 配置服务中心
  • 提供本地接口注册(模块间函数通信的一个实现,允许模块乱续启动)
  • 提供本地联接接口,调用后直接连接到具体功能的函数指针
  • 提供网络接口注册(多模块共享一个端口的实现)
  • 自动判断xml和json,转ebml后提交给各模块处理(注册接口的模块)
  • 收集模块的ebml处理结果自动转xml或json回执给客户端
  • 帮助模块完成需要等待的事项,比如视频合成后把合成地址回执给客户端
  • 必须
    18 掩码通信服务
  • 本服务为一个多对多的开关量实现
  • 允许多个模块同时注册同一个掩码也允许多个模块同时联接同一个掩码,在掩码发生改变时(注册的任何一个模块都可能设置掩码值),本模块计算其是否发生0与非0转换,转换时通知所有联接此掩码的对象
  • 本模块的典型应用为按需拉流
  • 必须
    19 开方分组
  • 因本框架面向算法设计,需要对对象进行遍历,而在大型流媒体应用中,如16万个相机只有1个在拉流,也需要遍历16万相机,开方分组是把16万个相机分为400组,每组400个相机,把遍历数由16万降为800
  • 可选
    20视频相关 h264 FsObject系列
  • 解析h264解构,实现FsObject系列的派生
  • 解码h264
  • 可选
    21 h264编码 FsObject系列
  • 编码h264
  • 可选
    22 h265 FsObject系列
  • 解析h265解构,实现FsObject系列的派生
  • 解码h265
  • 可选
    23 h265编码 FsObject系列
  • 编码h265
  • 可选
    24 mkv
  • H264
  • h265
  • 把h264封装为mkv
  • 把h265封装为mkv
  • 从mkv读取h264
  • 从mkv读取h265
  • 可选
    25 rtsp拉流模块
  • FsObject系列
  • DNS
  • 使用rtsp协议拉取摄像头的视频流 可选
    26 rtsp推流接收模块 rtsp拉流模块 使用rtsp协议接收其他平台的rtsp推流,输出与rtsp拉流模块相同 可选
    27 rtsp流分发模块 FsObject系列 使用rtsp协议分发rtsp直播流 可选
    28 rtsp推流模块
  • rtsp流分发模块
  • DNS
  • 使用rtsp协议推送视频流到支持推流的rtsp服务器 可选
    29 rtsp回放模块
  • rtsp流分发模块
  • MKV
  • 根据rtsp协议异步读取mkv中指定部分
  • 响应rtsp的跳转
  • 自动适配rtsp的网络速率
  • 可选
    30 rtsp kcp模块
  • 实现抢占他人网速收发数据(开启时在网络带宽有限时,会导致他人严重卡顿)
  • 可降低网络延时40%
  • 可选
    31 hls流分发模块 FsObject系列
  • 使用hls协议分发hls直播流
  • 可选
    32 hls回放模块
  • hls流分发模块
  • MKV
  • 根据hls协议异步读取mkv中指定部分
  • 响应hls的跳转
  • 自动适配hls的网络速率
  • 可选
    33 rtmp拉流模块
  • FsObject系列
  • DNS
  • 使用rtmp协议拉取摄像头的视频流 可选
    34 rtmp推流接收模块 rtmp拉流模块 使用rtmp协议接收其他平台的rtmp推流,输出与rtmp拉流模块相同 可选
    35 rtmp流分发模块 FsObject系列 使用rtmp协议分发rtmp直播流 可选
    36 rtmp推流模块
  • rtmp流分发模块
  • DNS
  • 使用rtmp协议推送视频流到支持推流的rtmp服务器 可选
    37 sip服务器 FsObject系列
  • 先外注册
  • 接受其他服务器注册
  • 处理sip指令
  • 可选
    38 gb28181拉流模块 sip服务器
  • 获取其他服务器的流信息
  • 使用tcp或udp拉取其他gb28181平台的直播视频流
  • 自适应rtcp协议
  • 可选
    39 gb28181流分发模块 sip服务器
  • 响应其他平台的取流请求,按要求使用tcp拉、tcp推、udp推方式分发直播流
  • 自动判断对端对rtcp的支持情况
  • 对端支持rtcp时应发送rtcp指令
  • 可选
    40 gb28181回放模块 gb28181流分发模块
  • 根据gb28181协议异步读取mkv中指定部分
  • 响应gb28181的跳转
  • 自动适配gb28181的网络速率
  • 提供储存查询
  • 可选
    41 Inflray拉流模块 FsObject系列 拉取Inflray视频流 可选
    42 文件点播模块 mkv
  • 实现rtsp的文件点播请求
  • 实现hls的文件点播请求
  • 可选
    43 相机控制级联 FsObject系列
  • 实现相机控制的抽象
  • 提供所有控制接口的网络控制
  • 提供所有控制接口的本地联接控制
  • 提供所有控制接口的多机级联控制
  • 提供外挂控制接口
  • 控制协议转换的桥梁(如onvif转gb28181)
  • 可选
    44 onvif控制模块 相机控制级联
  • 实现相机转动
  • 实现相机缩放
  • 实现相机预置位
  • 实现相机图像参数控制
  • 实现相机ptz的获取与调取
  • 可选
    45 宇视控制模块 相机控制级联
  • 实现相机转动
  • 实现相机缩放
  • 实现相机预置位
  • 实现相机图像参数控制
  • 实现相机ptz的获取与调取
  • 可选
    46 gb28181控制模块 相机控制级联
  • 实现相机转动
  • 实现相机缩放
  • 实现相机转动输出(如onvif进gb28181出)
  • 实现相机缩放输出(如onvif进gb28181出)
  • 可选
    47 gb28181控制模块 相机控制级联
  • 实现相机转动
  • 实现相机缩放
  • 实现相机转动输出(如onvif进gb28181出)
  • 实现相机缩放输出(如onvif进gb28181出)
  • 可选
    48 Inflray控制模块 相机控制级联 Inflray全景相机控制 可选
    49 dib模块 FsObject系列
  • 实现FsObject系列的派生
  • 图像颜色的变换
  • 图像缩放
  • 图像旋转
  • 图像画线
  • 输出bmp图片
  • 加载bmp图片
  • 可选
    50 jpg模块 dib模块
  • 实现FsObject系列的派生
  • 解码为dib
  • 压缩dib为jpg
  • jpg扩展ebml信息
  • 从jpg中读取ebml信息
  • 可选
    51 点阵写字模块 dib模块
  • 从矢量字库中生成点阵字
  • 缓存点阵字
  • 使用and,or,xor等方式把点阵字叠加到dib上
  • 可选
    52 本地拉取模块
  • dib模块
  • 接口管理中心
  • 可拉取本地一路流,实现图像拷贝、旋转拉伸、插帧、虚拟通道等业务
  • 可同时拉取多路视频,进行拼接、旋转拉伸、插帧等业务
  • 可选
    53 本地推送模块
  • dib模块
  • 接口管理中心
  • 同时推送一路或多路流到此虚拟通道
  • 虚拟通道内可进行全景帧拼接业务
  • 虚拟通道内可实现基站切换时虚拟通道动态关联业务
  • 可选
    54 相机状态检测模块
  • jpg模块
  • 接口管理中心
  • 轮巡所有相继
  • 以能否取到关键帧为标准判定是否在线
  • 缓存关键帧
  • 提供网络接口,按需解码为jpg或bmp
  • 可选
    55 视频转码模块
  • jpg模块
  • h264
  • h265
  • 自动选择合适的图像变换路线(如同时有h265和h264时转yuv420P,程序自动调用h264解码实现–因为h264解码开销更低)
  • 自动评估cpu性能,在串行与并行间自动切换(比如h264转yuv420P需求中,在cpu性能好时应使用单线程解码,在cpu吃力时应对h264自动进行分组后使用多核处理)
  • 在相机多,cpu核心少时每个核心应自动轮换处理各相机需要变换的业务,即允许单核处理多相机的业务
  • 可选
    56 视频水印模块
  • dib模块
  • 点阵写字模块
  • 自动选择合适的图像,按配置写响应的信息,如有ycc而没有yuv420P,应直接在ycc上写字,而不强求yuv420P
  • 可选
    57 视频记录模块
  • mkv
  • FsObject系列
  • 把h264或h265写入mkv
  • 缓存最近10 min写入硬盘数据的帧地址
  • 提供截取短视频业务
  • 维护录像记录信息
  • 提供录像信息查询功能
  • 自动评估硬盘性能,尽量尽早写入硬盘,在性能不足时自动合并写入数据,用大块写入代替碎片写入
  • 监听回放业务需求,在有回放读取时,自动暂停写入业务,在读到足够数据后再写入(优化读取)
  • 可选
    58 磁盘管理程序 FsObject系列
  • 一个基于预测的磁盘管理程序–不需要纪录所有文件名及文件的大小实现删除最早数据的实现(因如有1000万条数据,每条100字节,仅记录就需要1G,同时还有数据记录与硬盘数据是否一致的问题(机器掉电会导致其不一致))
  • 统计与学习文件系统的变化规律,找到变化快的和变化慢的目录
  • 在变化快的目录中发现新文件,目录大小变大
  • 在空间不足时删除变化目录慢目录中的数据
  • 可选
    59 代理回放管理模块
  • mkv
  • FsObject系列
  • 一个第三方储存映射到本地的方案实现
  • 定义第三方储存的需要实现的接口
  • 处理具体的回放类请求,创建回放任务与管理回放任务
  • 实现cdn加速回放
  • 可为不支持倒放的第三方储存实现倒放功能
  • 可选
    60 代理回放任务模块 代理回放管理模块
  • 响应具体的回放任务
  • 查找硬盘缓存,有缓存直接使用缓存
  • 播放位置无缓存或缓存不足时,调用“代理回放管理模块”的抽象接口获取数据补充缓存
  • 支持对齐算法,把缓存同线上获取数据边界对齐,自动拼接视频
  • 可选
    61 大华SDK代理回放 代理回放管理模块
  • 实现“代理回放管理模块”的抽象接口
  • 实现大华sdk回放转rtsp回放
  • 实现大华sdk回放转hls回放
  • 实现大华sdk回放转gb28181回放
  • 可选
    62 gb28181代理回放 代理回放管理模块
  • 实现“代理回放管理模块”的抽象接口
  • 实现gb28181回放转rtsp回放
  • 实现gb28181回放转hls回放
  • 实现gb28181回放进gb28181回放出
  • 可选
    63DDNS服务器 DDNS服务器 FsObject系列
  • 同时支持tcp和udp
  • 支持动态dns设置
  • 支持多线检测以最新的为准,如域名y通过A线先报告a,后通过报告ip为b,则查询域名y的ip恒为b
  • 可选
    64网络代理 KVPN服务器 FsObject系列 一个可以使用websocket,http,传输任意数据的代理功能,可在受限网络中打通网络中传输数据(如网络只能使用http,那海康sdk的8000端口的数据则无法传输,使用kvpn后海康sdk的8000端口的数据会以http的方式传输) 可选
    65 KVPN客户端 FsObject系列 可选
    66操作系统 定制系统
  • 基于centos裁剪的一个100M左右的基础系统
  • 集成ftp、ssh、git、nginx、opencv及视频应用后约230M
  • 系统采用双系统设计,重启后除数据盘外的所有操作都会丢失,保证出现异常时重启肯定可以正常启动
  • 可定制启动logo
  • 可选
    67 打包工具
  • 把引导、内核、虚根、驱动、库及应用程序打包为一个升级包
  • 升级包采用jpg封装,可定制企业专署封面
  • 制作升级包时可输入密码,同时会根据密码生成一个系统标识(操作系统应集成此标识),升级包的标识与系统标识必须一致才能升级
  • 系统标识通过hash计算,无法通过hash反推密码,制作升级包时使用的密码应严格保密
  • 定制系统的组件
    68 系统升级服务端
  • 实现双系统,提供不怕掉电的免维护系统
  • 校验系统,选择完整系统启动,在有新版本(校验是完整的)时,切换新版本系统启动
  • 与客户端升级工具交付,差分升级系统(只上传有差异部分,把有差异部分写入备份系统后重启校验完成升级)
  • 69 授权管理系统
  • 读取硬件信息生成SN
  • 使用激活码校验,判断激活码有效后写响应信息授权系统
  • 可选
    70客户端 升级工具
  • 打开升级包,读取升级包信息
  • 提取升级包的系统标识与服务端校验,一致后执行差分升级
  • 支持多服务器同时升级
  • 多服务器同时升级只占用一份内存,如升级包为200M,同时升级1000台主机,也只占用200M内存
  • 支持批量导入主机
  • demo,仅提供合作客户
    71 配置工具 Config Config数据结构实现的一个图形demo
    72 调试工具 接口管理中心
  • 图形渲染注册到“接口管理中心”的所有接口
  • 展示所有接口的参数解释、取值范围
  • 测试所有接口的效果
  • 动态生成所有接口的c语言调用demo源码
  • 73 激活工具
  • 获取系统的SN
  • 传送激码激活系统
  • 74 播放库
  • 视频转码模块
  • MKV
  • rtsp直播
  • rtsp回放
  • 视频拖动
  • 视频快放
  • 视频慢放
  • 视频单帧
  • 视频倒放
  • 视频快速倒放
  • 视频单帧倒放
  • 可选


    本文原地址: http://www.feitianzhi.com/boke/index.php/archives/50/

    转载请注明出处,有疑问或错误请发邮件到[email protected] 或加QQ群:869598376


    概述

          小雉系统的安装包可从线上系统中直接制作,制作的安装包包含线上系统的更新;
          小雉系统只提供升级包,对应的安装包均是客户在应用升级包后按本文自行制作;


    步骤

    1. root登录ssh系统;
    2. 运行“cd /fs/project/data”;
    3. 运行“/fs/bin/ddimg”;
    4. 使用gzip压缩;
    5. 使用ftp下载安装包;

    小雉系统安装包制作

    猜您可能喜欢
    小雉系统安装: http://www.feitianzhi.com/boke/index.php/archives/11/
    小雉系统安装包制作: http://www.feitianzhi.com/boke/index.php/archives/50/
    小雉系统网络配置:http://www.feitianzhi.com/boke/index.php/archives/15/
    小雉系统硬盘配置:http://www.feitianzhi.com/boke/index.php/archives/16/
    小雉系统远程升级:http://www.feitianzhi.com/boke/index.php/archives/14/
    使用Google Authenticator为小雉系统增加动态密码功能:http://www.feitianzhi.com/boke/index.php/archives/17/
    小雉配置工具:http://www.feitianzhi.com/boke/index.php/fslib-config.html
    资源下载:http://www.feitianzhi.com/boke/index.php/ziyuanxiazai.html

    本文原地址: http://www.feitianzhi.com/boke/index.php/archives/49/

    转载请注明出处,有疑问或错误请发邮件到[email protected] 或加QQ群:869598376


    参考文章:https://blog.csdn.net/yaotengjian/article/details/121803257

    1、LVM简介:Logical Volume Manager

       Linux环境下对磁盘分区进行管理的一种机制。LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。
    
      LVM可以将这些底层的物理磁盘或分区整合起来,抽象成容量资源池,以划分成逻辑卷的方式供上层使用,其最主要的功能即是可以在无需关机无需重新格式化(准确地说,原来的部分无需格式化,只格式化新增的部分)的情况下弹性调整逻辑卷的大小。
    

    优缺点:

    文件系统可以跨多个磁盘,因此文件系统大小不会受物理磁盘的限制。可以在系统运行的状态下动态的扩展文件系统的大小。可以增加新的磁盘到LVM的存储池中。可以以镜像的方式冗余重要的数据到多个物理磁盘。可以方便的导出整个卷组到另外一台机器。
    在从卷组中移除一个磁盘的时候必须使用reducevg命令(该命令要求root权限,且不允许在快照卷组中使用)。当卷组中的一个磁盘损坏时,整个卷组都会受到影响。因为加入了额外的操作,存贮性能受到影响。
    2、LVM的工作流程:

    PV:物理卷在逻辑卷管理系统最底层,可为整个物理磁盘或实际物理硬盘上的分区。

    VG:卷组建立在物理卷上,一卷组中至少要包括一物理卷。

    LV:逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。

    PE:物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改且大小需一致。

    LE:逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。

    3、LVM的写入模式:

    线性模式:写完一个设备再写入另外一个设备。

    条带模式:数据是被分散写入到LVM各成员设备上的。

    4、LVM基本使用:

    LVM挂载过程大致是,创建物理卷PV -> 创建卷组 VG -> 创建逻辑卷LV -> 格式化 -> 挂载。

    1、查看主机现有磁盘情况:fdisk -l

    2、对磁盘进行分区:fdisk /dev/vda

    新建分区,选择类型,设置分区号,查看磁盘现有分区情况:

    3、更改分区类型:Linux LVM

    4、创建PV:pvcreate /dev/vdb1 pvdisplay ,同理创建vdc1,vdd1,

    创建VG卷组:vgcreate volume-group1 /dev/vdb1 /dev/vdb2 /dev/vdb3

    5、创建逻辑卷LV: lvcreate -Zn -n lvdata -l +100%FREE vgdata

    注:本机环境采用的是单机挂载,groups方式参考第四第五点:

    以上,LVM方式挂载磁盘完成,磁盘挂载前记得将原路径下的数据备份,挂载完成后在移动至当前路径下面。

    本文原地址: http://www.feitianzhi.com/boke/index.php/archives/47/

    转载请注明出处,有疑问或错误请发邮件到[email protected] 或加QQ群:869598376


    概述

          软件的开发离不开配置,传统的软件设计包括前端、后台和数据库3部分,三者是密切配合的统一整体,在实际项目中往往遇到以下问题:

    1. 因项目需求不明而增加、修改、删除参数导致配置结构调整后难以同已有数据兼容;
    2. 后台参数修改后,前端需要同步修改,无法做到老版本前端与新版本后台配合(新版本后台可能修正了bug,老版本前端属于老项目),修正老项目bug需要在老版本分支上进行,代码分支多,维护困难;
    3. 配置备份困难。首先后台与数据库之间有多个访问渠道,配置备份需要停机备份;其次备份的配置无法线上热还原(有差异部分相关模块重置,无修改部分持续工作,如仅1相机参数有区别,仅停掉1相机进行重连,其余相机持续工作);最后备份的配置无法在新版本或老版本上进行还原(因为字段结构不一样);
    4. 授权困难,配置臃肿。为实现所有用户需求,软件的参数量非常庞大,而对一个具体项目可能只需要其中的很少只关联10个参数的功能,把大量的参数置于系统中会拖慢系统(一个表只有1列可以允许插入1亿行,但如有1000列,可能表就只能插入10万行了)同时软件中需要通过授权判断而限制用户在授权范围内操作,系统调试困难--授权是在做一个减法操作;

    思考与假设

          “小雉视频系统”是一套集所有客户需求于一体的一套视频软件,参数的修改随客户的要求变化而变化,均为不可预知的参数需求,为每位客户单独开一个分支会增加bug修正的同步成本和升级包制作成本,“小雉视频系统”迫切需要一套廉价的高效率的配置设计方案,要求方案具备如下特性:

    1. 配置项在各个模块中申明(限制值的类型、范围、个数和有效条件(比如A参数必须要B参数为1时才有效可设置)),在模块中读取,把参数的管理放到各个模块中,各个模块只需要根据本模块的需要申明参数,实现参数的模块化(移除此模块也移除了此模块的参数);
    2. 各个模块申明配置项时如同全新开发一样申明参数即可,同历史参数的兼容归配置模块算法实现;
    3. 各个模块如果未被授权,则不申明参数,通过减少参数增加系统的容量及并发,既功能少,并发高,让授权是一个加法操作;
    4. 申明参数时指定默认值,在客户端传参时未有对应参数时读取此参数时读到的值为默认值,以此实现对历史客户端的兼容(历史客户端与新版本后台字段有差异部分使用默认值代替,保证新后台可同老客户端适配);
    5. 申明参数时同时申明中文名、注释、可选值,即把注释写入配置,在配置导出时可自动对参数注释,实现文档源码化;
    6. 配置可以热导出,导出后的配置可热导入到任意版本的后台,配置模块可自动探测到变化,自动完成对象实例的增删改动作;
    7. 配置可以导出xml,json等格式,并支持xml,json的导入;
    8. 配置可导出非默认值部分字段,也能导入,实现瘦客户端编程(服务器可以集所有功能与一体,但针对具体的项目客户,可能只需要部分功能,可在完整客户端上正确配置对应项目需求的功能参数后导出参数,瘦客户端上只针对导出参数进行开发,减少参数可提高客户端的人性化程度);

    小雉配置解决方案

          基于假设“小雉配置”采用面向属性的配置设计方式,把配置项分为节点型、模板、字符串、整型、浮点和二进制共6种数据类型,每种数据类型可设置多个条件组,以条件组内的所有条件为真此条件组为真,任何一个条件组为真则参数有效;
          “小雉配置”采用C语言编写,可用于windows,linux,arm等平台,配置为单文件,本地可拷贝备份,远程可热导入导出xml和json,配置可承载数千参数(结构可类似xml任意层级嵌套)数十万级别的量(类比一张表有上千列,表可以容纳数十万行);


    小雉配置数据类型

    1. 节点型类型
            类似于xml中的a->b->c,其中b节点包含c,则b为节点型类型,且a下面有且只能有一个b;节点型类型可以作为节点型节点和模板节点的子类型,可以设置中文名、注释、条件判断,不能设置默认值,可选值;
      fs_Config_node_node_add //添加节点型参数
      fs_Config_node_get_first //获取节点型参数
    2. 模板类型
            类似于xml中的a->b->c,其中b节点包含c,如b固定且只有一个则b为节点型类型,如b可以是0到多个,则b为模板类型,申明模板实质是申明一个类,配置时在a下创建此类的多个实例(创建多少个实例,a下有多少个b,b的子节点与类的结构完全相同);模板类型主要用于同类型数据的管理(比如添加相机);模板类型可以作为节点型节点和模板节点的子类型,可以设置中文名、注释、条件判断、可创建实例的个数、时间控制参数(比如有两个模板实例,第一个模板实例在0-7点生效,另外一个在7-24时生效,实现参数随时间变化的控制),不能设置默认值,可选值;
      fs_Config_node_template_add //添加节点型参数
      fs_Config_node_template__IO //获取节点型参数
    3. 字符串类型
            字符串类型是一个储存字符串数据的节点类型;字符串类型可以作为节点型节点和模板节点的子类型,可以设置中文名、注释、条件判断、可设置值的个数、字符串长度、默认值、可选值;
      fs_Config_node_string_add //添加字符串类型参数
      fs_Config_node_string_get_first //获取字符串类型参数
    4. 整型类型
            整型类型是一个储存64位有符号整数的节点类型;整型类型可以作为节点型节点和模板节点的子类型,可以设置中文名、注释、条件判断、可设置值的个数、值的范围、默认值、可选值;
      fs_Config_node_integer_add //添加整型类型参数
      fs_Config_node_integer_get_first //获取整型类型参数
    5. 浮点类型
            浮点类型是一个储存64位浮点的节点类型;浮点类型可以作为节点型节点和模板节点的子类型,可以设置中文名、注释、条件判断、可设置值的个数、值的范围、默认值、可选值;
      fs_Config_node_float_add //添加浮点类型参数
      fs_Config_node_float_get_first //获取浮点类型参数
    6. 二进制类型
            二进制类型是一个储存任意数据类型的节点类型;二进制类型可以作为节点型节点和模板节点的子类型,可以设置中文名、注释、条件判断、可设置值的个数、数据长度范围、默认值、可选值;
      fs_Config_node_binary_add //添加二进制类型参数
      fs_Config_node_binary_get_first //获取二进制类型参数

    小雉配置的简单演示

    int main() {
    // 创建配置
    FsConfig * const pConfig = fs_Config_new__IO();
    // 创建一个节点型节点
    void *const node = fs_Config_node_node_add(pConfig, pConfig, "node", "节点", "测试节点", 0, 0x7);
    {
        /* 在node下创建一个字符串节点,节点可以设置2个值,长度为0到10个字节 */
        void *const testString = fs_Config_node_string_add(pConfig, node, "testString", "测试字符串", "测试字符串", 0, 0x7, 0, 10, 2);
        /* 为testString添加一个default1的默认值 */
        fs_Config_node_string_add_value(pConfig, testString, FsConfig_nodeValue_default, "default1", "默认值1", "默认值1");
        /* 为testString添加一个optiona1的可选值 */
        fs_Config_node_string_add_value(pConfig, testString, FsConfig_nodeValue_optional, "optiona1", "可选值1", "可选值1");
        /* 在node下创建一个整型节点,节点可以设置2个值,取值范围为0到666666 */
        void *const testInt = fs_Config_node_integer_add(pConfig, node, "testInt", "测试整数", "测试整数", FsConfig_nodeShowType_default, 0, 0x7, 0, 666666, 2);
        /* 为testInt添加一个0的默认值 */
        fs_Config_node_integer_add_value(pConfig, testInt, FsConfig_nodeValue_default, 0, "0", "0");
        /* 为testInt添加一个100的可选值 */
        fs_Config_node_integer_add_value(pConfig, testInt, FsConfig_nodeValue_optional, 100, "100", "100");
        /* 在node下创建一个浮点节点,节点可以设置3个值,取值范围为0.0到1.0 */
        void *const testFloat = fs_Config_node_float_add(pConfig, node, "testFloat", "测试浮点", "测试浮点", 0, 0x7, 0.0, 1.0, 3);
        /* 为testFloat添加一个0.0的默认值 */
        fs_Config_node_float_add_value(pConfig, testFloat, FsConfig_nodeValue_default, 0.0, "0.0", "0.0");
        /* 为testFloat添加一个1.0的可选值 */
        fs_Config_node_float_add_value(pConfig, testFloat, FsConfig_nodeValue_optional, 1.0, "1.0", "1.0");
        /* 在node下创建一个二进制节点,节点可以设置2个值,长度为0到100个字节 */
        void *const testBinary = fs_Config_node_binary_add(pConfig, node, "testBinary", "测试二进制", "测试二进制", 0, 0x7, 1, 100, 2);
        /* 为testBinary创建一个条件组 */
        void *const condition_testBinary = fs_Config_condition_group_add(pConfig, testBinary);
        /* 向condition_testBinary添加一个条件,相对于testBinary节点向上一级的父节点中查找testInt节点,在testInt的值为0时此值有效 */
        fs_Config_condition_add_static(pConfig, condition_testBinary, 1, "testInt", FsConfig_Condition_equal, "0");
    }
    // 创建一个可以创建100个实例的模板
    void *const template = fs_Config_node_template_add(pConfig, pConfig, "testTemplate", "测试模板", NULL, NULL, "测试模板", NULL, NULL, NULL, 0, 0x7, 100);
    {
        /* 在template下创建一个字符串节点,节点可以设置2个值,长度为0到10个字节 */
        void *const testString1 = fs_Config_node_string_add(pConfig, template, "testString1", "测试字符串1", "测试字符串1", 0, 0x7, 0, 10, 2);
        /* 为testString1添加一个默认值 */
        fs_Config_node_string_add_value(pConfig, testString1, FsConfig_nodeValue_default, "default1", "默认值1", "默认值1");
        /* 为testString1添加一个可选值 */
        fs_Config_node_string_add_value(pConfig, testString1, FsConfig_nodeValue_optional, "optiona1", "可选值1", "可选值1");
        /* 在template下创建一个字符串节点,节点可以设置2个值,长度为0到10个字节 */
        void *const testString2 = fs_Config_node_string_add(pConfig, template, "testString2", "测试字符串2", "测试字符串2", 0, 0x7, 0, 10, 2);
        /* 为testString2创建一个条件组 */
        void *const condition_testString2 = fs_Config_condition_group_add(pConfig, testString2);
        /* 向condition_testString2添加一个条件,相对于testString2节点向上两级的父节点中查找node节点,再在node节点中查找testInt节电,在testInt的值为0时此值有效 */
        fs_Config_condition_add_static(pConfig, condition_testString2, 2, "node testInt", FsConfig_Condition_equal, "0");
    }
    // 把配置保存到文件,可使用小雉配置工具打开编辑
    // 项目中可把配置发送给客户端
    fs_Config_save_to_file_direct(pConfig, "test.cfg");
    /* 定义一个xml模拟历史数据导入 */
    {
        const char *str = "<testTemplate><testString1>sss1</testString1></testTemplate>"
                "<testTemplate><testString2>ssss2</testString2></testTemplate>"
                "<node><testInt>30</testInt><testFloat>0.5</testFloat></node>";
        FsXml *pXml = fs_Xml_new_from_string__IO(str, NULL);
        fs_Xml_analyzeAll(pXml, (struct FsXml_node*) pXml, NULL);
        FsEbml *pEbml1 = fs_Ebml_new_from_Xml__IO(pXml);
        fs_Xml_delete__OI(pXml, NULL);
        fs_Config_import_onlyData((FsEbml*) pConfig, (struct FsEbml_node*) pConfig, (struct FsEbml_node*) pConfig, (FsEbml*) pEbml1, (struct FsEbml_node*) pEbml1, NULL);
        fs_Ebml_delete__OI(pEbml1, NULL);
    }
    // 当前pConfig已包含导入的数据,可存盘
    fs_Config_save_to_file_direct(pConfig, "test1.cfg");
    // 读取历史的配置文件"test1.cfg",按目前在申明导入到pConfig中
    {
        FsConfig * const pConfig1 = fs_Config_new_from_file__IO("test1.cfg", NULL);
        fs_Config_import_onlyData((FsEbml*) pConfig, (struct FsEbml_node*) pConfig, (struct FsEbml_node*) pConfig, (FsEbml*) pConfig1, (struct FsEbml_node*) pConfig1, NULL);
        fs_Config_delete__OI(pConfig1, NULL);
    }
    /* 把pConfig导出为json */
    FsObjectBase * const pObjectBase = fs_Config_export_objectBase__IO(pConfig, FsConfig_ExportType_json_export, sizeof (FsObjectBase), 0, NULL);
    printf("%s\n", pObjectBase->data);
    /* 打印数据为:
     * {
     *     "node":{
     *         "testString":"default1",
     *         "testInt":"30",
     *         "testFloat":"0.500000",
     *         "testBinary":""
     *     },
     *     "testTemplate":[{
     *         "testString1":"sss1",
     *         "testString2":""
     *     },{
     *         "testString1":"default1",
     *         "testString2":"ssss2"
     *     }]
     * }
     */
    /* 读取node testInt的值,打印结果为testInt=30 */
    printf("testInt=%lld\n", fs_Config_node_integer_get_first(pConfig, pConfig, pConfig, "node testInt", 0, NULL));
    /* 读取node testFloat的值,打印结果为testFloat=0.500000 */
    printf("testFloat=%lf\n", fs_Config_node_float_get_first(pConfig, pConfig, pConfig, "node testFloat", 0, NULL));
    pObjectBase->_delete(pObjectBase);
    fs_Config_delete__OI(pConfig, NULL);
    return 0;
    }
    

          源码下载地址
          github:https://github.com/feitianzhi/fslib-config
          gitee:https://gitee.com/feitianzhi/fslib-config
          配置工具demo: http://www.feitianzhi.com/boke/index.php/fslib-config.html

    本文原地址: http://www.feitianzhi.com/boke/index.php/archives/44/

    转载请注明出处,有疑问或错误请发邮件到[email protected] 或加QQ群:869598376


    概述

          本文描述的内容归属于"小雉视频NVR子系统"的功能描述;

    背景

          一项目在您入场时可能已存在很多历史的安防储存设备,要把已有储存设备上的视频接入自己的客户端可能需要对很多开发量,同时如需要在移动端播放这些回放视频更是存在一定的技术壁垒;
          本文介绍使用"小雉视频NVR子系统"配置gb28181接入第三方的直播及回放视频,"小雉视频NVR子系统"负责把接入的回放视频转rtsp,hls,gb28181协议输出,同时"小雉视频NVR子系统"会把访问过的视频进行缓存,让新的客户端不再从前端储存中获取(如两个rtsp,两个hls,两个gb28181客户端取同一路流的相近时间的回放视频,"小雉视频NVR子系统"只向前端储存设备取一次流);

    配置

    小雉视频NVR子系统

    • 在海康nvr中配置使用gb28181接入到"小雉视频NVR子系统",如下图;

    小雉视频NVR子系统

    • vlc效果展示(上图为gb28181回放转hls,下图为gb28181回放转rtsp),如下图;

    小雉视频NVR子系统

    小雉视频NVR子系统

    猜您可能喜欢

    小雉系统安装:http://www.feitianzhi.com/boke/index.php/archives/11/
    小雉系统网络配置:http://www.feitianzhi.com/boke/index.php/archives/15/
    小雉系统硬盘配置:http://www.feitianzhi.com/boke/index.php/archives/16/
    小雉系统远程升级:http://www.feitianzhi.com/boke/index.php/archives/14/
    使用Google Authenticator为小雉系统增加动态密码功能:http://www.feitianzhi.com/boke/index.php/archives/17/
    GB28181 级联 CDN 回放:http://www.feitianzhi.com/boke/index.php/archives/37/
    小雉视频系统负载均衡之GB28181多线负载均衡:http://www.feitianzhi.com/boke/index.php/archives/28/
    小雉视频系统GB28181-2016配置:http://www.feitianzhi.com/boke/index.php/archives/41/

    本文原地址: http://www.feitianzhi.com/boke/index.php/archives/43/

    转载请注明出处,有疑问或错误请发邮件到[email protected] 或加QQ群:869598376


    背景

          端口共享主要是为在一些受限环境(如防火墙限制只有http的80可被外网访问)中让自己的业务正常运行(rtsp,hls,gb28181等业务正常运行);
          端口共享技术并不是新技术,如sslh可让ssh和https共用一个端口,haproxy可让ssh,http,https等多种协议共享一个端口;
          小雉系统的主要应用为视频应用,需要同时支持webrtc,rtsp,hls,rtmp,gb28181,sip,rtp,http等协议的端口共享技术并能承载万兆流量方案才能满足小雉系统的需要;
          常见的端口共享方案(如haproxy)采用代理方式,承载万兆流量需要显著增加硬件配置,同时也无法完成视频端口共享的需要;

    方案设计要求

    • 配置层支持为每个端口分配不同的协议,实现简易的权限控制(如连A端口的用户只有rtsp和hls视频权限,连B端口的用户有rtsp,rtmp,GB28181的权限);
    • 模块只提供数据匹配的模式,匹配的数据由具体的协议开发者后期添加(模块如内置直接识别各种协议,则此模块的开发者需要了解rtsp,hls,rtmp,webrtc,gb28181,rtp,http等多种协议,难度高;同时即使识别为http协议后可能还需要进行url和其他参数进行分类后传给不同的业务模块);
    • 模块匹配应根据各业务提供的识别码(rtsp,hls,rtmp,webrtc,gb28181,rtp,http各协议的开发者向本模块注册识别码)进行匹配,匹配后把socket直接交于对应的业务模块,而不通过代理中转(不中转则不需要承担各业务的大流量数据,本模块消耗的资源相较视频应用可忽略,同时中转方式需要根据内容(如sip内容识别rtp数据)也是本模块无法完成的);

    端口共享模块应用

          小雉系统的端口共享技术已应用于《使用cloudflare免费cdn为小雉系统的http,rtsp,rtmp,gb28181,hls,webrtc,ftp,ssh等服务加速》,"小雉私有接口","GB28181"等应用;
          小雉今后开发的新模块都将支持"小雉的端口共享模块",但仍支持传统的模式,如《小雉视频系统GB28181-2016配置》文章描述的按传统方式使用小雉的gb28181依然有效;
          本处以把端口1111配置为同时支持"小雉私有接口","GB28181 sip","GB28181 rtp"为例说明"端口共享模块"的使用方法如下图:
    端口共享模块
          附上添加"GB28181 sip"识别码的代码(就是识别连接的第一个字节是否为"R")

    const char * key[] = {"R"}; // 只有一个识别码为"R"
    unsigned short keyLen[] = {1}; // 每个识别码的长度
    unsigned char caseInsensitive[] = {0}; // 每个识别码是否大小写敏感,0-敏感,1-不敏感
    unsigned char protocol[] = {FsBindClassify_P_Match_protocol_1_sip}; // 识别码的抓取方式
    fs_bindClassify_add_protocol(pBindClassify, 1, protocol, caseInsensitive
        , keyLen, key, cb, externP1, externP2, mask);
    

    猜您可能喜欢

    小雉系统安装:http://www.feitianzhi.com/boke/index.php/archives/11/
    小雉系统网络配置:http://www.feitianzhi.com/boke/index.php/archives/15/
    小雉系统硬盘配置:http://www.feitianzhi.com/boke/index.php/archives/16/
    小雉系统远程升级:http://www.feitianzhi.com/boke/index.php/archives/14/
    使用Google Authenticator为小雉系统增加动态密码功能:http://www.feitianzhi.com/boke/index.php/archives/17/
    GB28181 级联 CDN 回放:http://www.feitianzhi.com/boke/index.php/archives/37/
    小雉视频系统负载均衡之GB28181多线负载均衡:http://www.feitianzhi.com/boke/index.php/archives/28/
    小雉视频系统GB28181-2016配置:http://www.feitianzhi.com/boke/index.php/archives/41/

    本文原地址: http://www.feitianzhi.com/boke/index.php/archives/41/

    转载请注明出处,有疑问或错误请发邮件到[email protected] 或加QQ群:869598376


          小雉视频系统从3.165.3509版本开始支持GB28181-2016版本,SIP指令及视频流均同时支持tcp和udp;

    GB28181端口配置

    • 1路具体的gb28181视频配置(储存,rtsp,rtmp,hls,gb28181转发)

    1路具体的gb28181视频配置(储存,rtsp,rtmp,hls,gb28181转发)

    猜您可能喜欢

    小雉系统安装:http://www.feitianzhi.com/boke/index.php/archives/11/
    小雉系统网络配置:http://www.feitianzhi.com/boke/index.php/archives/15/
    小雉系统硬盘配置:http://www.feitianzhi.com/boke/index.php/archives/16/
    小雉系统远程升级:http://www.feitianzhi.com/boke/index.php/archives/14/
    使用Google Authenticator为小雉系统增加动态密码功能:http://www.feitianzhi.com/boke/index.php/archives/17/
    GB28181 级联 CDN 回放:http://www.feitianzhi.com/boke/index.php/archives/37/
    小雉视频系统负载均衡之GB28181多线负载均衡:http://www.feitianzhi.com/boke/index.php/archives/28/

    本文原地址: http://www.feitianzhi.com/boke/index.php/archives/40/

    转载请注明出处,有疑问或错误请发邮件到[email protected] 或加QQ群:869598376


    背景

          小雉系统中使用的rtsp,rtmp等视频协议需要主动连接才能正场工作,在小雉处在公网,相机在内网时,小雉无法主动连接内网的设备--小雉需要通过一定的方式打通内网与外网;
          小雉系统的一些部署环境仅能支持部分7层协议,如只支持http,sip,websocket等标准协议,其他协议均会被防火墙拒绝--小雉要打通内外网必须使用一常见的http,websocket协议;
          小雉系统内置大量的视频应用,使用时需要大带宽承载,小雉致力于技术研发而非内容研发,仅在少部分时间需要运行(如演示时需要大带宽),每月总流量仅几百G,阿某云按出口带宽收费的vps会让小雉支付过多的成本(40M带宽最便宜的vps一个月大概2500,1000G流量某阿云大概800);

    探索

          偶然发现https://www.vultr.com/提供的云服务器可按流量计费,1000G一个月5刀(30多一个月),出口带宽百兆以上;
          vultr服务器到一些地方的网非常不稳定,延时高,丢包率大,差时只有几十kb甚至不通,完全满足不了小雉的需要;
          综合本文的背景,小雉把视线看向了cloudflare这种免费的cdn服务商,经测试,使用cloudflare后,http服务的速度能稳定维持在30m/S以上;

    确定方案

          使用https://www.vultr.com/提供的云服务器作为测试用例,使用cloudflare提供的免费cdn进行加速实现小雉的专网加速;

    vultr注册

    • 首先注册vultr账号,地址:https://www.vultr.com/
    • 注册好第一次进去会提示让你完善信息,首次最少充值10刀, 之后进入控制台界面,点击products,然后点右上角的加号添加server!

    小雉系统

    • 如图配置,server选哪里的都可以,但是强烈建议选日本(最近上线了韩国的,也挺好用的),真的比其他地方的快好多

    小雉系统

    • 这里要注意了,系统选centos8,centos7,之后配置选5刀的就可以,1000G,1G内存足够用了(小雉系统只有200M)

    小雉系统

    • 选好了就可以deploy now了,之后会自动跳转到products节目,这时候你的server是installing的状态,等大概一分钟,就会running。
    • 之后点右边的三个点(server刚起来也可能是叫manage,反正就是最右边的)进入server detail。(如果之后哪天想改下ip,也可以在这里点destroy然后重新建一个)

    小雉系统

    • 这里是你的server的一些详细信息,记住你的ip address和password,密码需要点那个小眼睛才能看到。(大家可以看见这里月流量是1000G,我们所有人半个月也就用了100多G,所以5刀的流量足够了)

    小雉系统

    小雉系统配置(本处用到的域名在下节中给出教程)

    准备一个域名(准备小雉专网客户端配置时用到的域名)

          事先得准备一个可用的域名,自己买也好,还是免费注册一个都行,这里推荐一个免费注册域名的地方:www.freenom.com

    • 先注册一个账号登陆上去,点击菜单的Services,选择Register a New Domain

    小雉系统

    • 在输入框里输入想要注册的域名:如lovechinacc,点击Check Availability,选择一个域名点击Get it now!

    小雉系统

    • 完成后点击Checkout进入下一步

    小雉系统

    • 选择免费的 12 个月期限,点击Continue下一步

    小雉系统

    • 进入到结算页面后需要填写一些信息,其中红色框出来的地方如实填写,其他的随便填,最关键的是地区,如果你没国外的手机号,老老实实选择 China,不然会校验到你当前 IP 所属国家和你选择的不符会失败。

    小雉系统

    • 出现下面的情况说明域名购买成功了

    小雉系统

    • 如果购买成功的信息里面有如下图红框圈出来的信息则说明失败了

    小雉系统

    域名套上 Cloudflare(如不使用cdn加速,小雉专网客户端配置时直接填写小雉专网服务器的ip)

    小雉系统

    • 输入事先注册好的域名,点击Add site;如果出现无法添加的情况,请耐心等待一会,刚注册的域名 DNS 还未来得及解析。

    小雉系统

    • 选择一个计划,这里我们选择第一个免费的就行了,选择完后点击Confirm plan

    小雉系统

    • 点击Add Record按钮添加 2 条 A 记录,Value 指向在vultr购买小雉服务器的IP,点击Proxy status栏中的云朵,让其变成灰色(这个很重要),弄完后点击Continue按钮继续

    小雉系统

    • 此时会提示你将域名的 DNS 解析到 Cloudflare,其中有 2 个 Nameserver 是需要用到的。

    小雉系统

    • 这里需要重新到 freenom 修改下 DNS,点击Services,选择My Domains,找到之前注册的域名,点击右侧的Manage Domain

    小雉系统
    小雉系统

    • 点击Management Tools选择Nameservers

    小雉系统

    • 选择第二个选项自定义,填写上面的 2 个 Nameserver,点击Change Nameservers保存。

    小雉系统

    • 回到 Cloudflare,刷新之前的页面,如果跳转到下面所示控制台页面就成功了,如果没有耐心等待一会,解析需要时间。

    小雉系统
          到此Cloudflare加速配置完成了,使用wget下载存于小雉系统/fs/project/data/web/tt1的文件(tt1文件可使用 “ dd if=/dev/zero of=/fs/project/data/web/tt1 bs=1024000 count=1000 ”命令制作),出现如下图,说明Cloudflare及域名解析配置成功。
    小雉系统

    小雉加速效果

          经以上配置后加速配置应已完成,下图可看到已识别为websocket。
    小雉系统

    • ssh到作小雉专网客户端的机器执行ifconfig,可看到多了一个tun0的虚拟网口,并分配了ip。

    小雉系统

    • 在作小雉专网客户端的小雉机器上分同时使用tun0接口(使用Cloudflare加速)和普通链路(直接访问vultr的公网ip)下载tt1文件,可看到Cloudflare加速明显。

    小雉系统

    • 正常使用谷歌搜索“小雉系统”。

    小雉系统

    猜您可能喜欢

    小雉系统安装: http://www.feitianzhi.com/boke/index.php/archives/11/
    小雉系统网络配置:http://www.feitianzhi.com/boke/index.php/archives/15/
    小雉系统硬盘配置:http://www.feitianzhi.com/boke/index.php/archives/16/
    小雉系统远程升级:http://www.feitianzhi.com/boke/index.php/archives/14/
    使用Google Authenticator为小雉系统增加动态密码功能:http://www.feitianzhi.com/boke/index.php/archives/17/
    小雉配置工具:http://www.feitianzhi.com/boke/index.php/fslib-config.html
    资源下载:http://www.feitianzhi.com/boke/index.php/ziyuanxiazai.html