系统改名为:,升级包改使用jpg图像封装,从2.124版本开始,1.*的升级包停止使用

系统工具            下载地址(2019-04-19) :https://pan.baidu.com/s/1kPZC38jPrZ4xWbSCplomuQ 提取码:39wg

升级包(fs-2.124.1038)下载地址(2019-04-19):https://pan.baidu.com/s/1PhjqtoHeqENI0ERA8aMm3w 提取码:g7so

升级包(1.78)下载地址(2017-04-10):http://pan.baidu.com/s/1i5ieCFr 新功能:增加阿里云oss储存回放的支持

升级包(1.78)下载地址(2017-04-10):http://pan.baidu.com/s/1i5ieCFr 新功能:增加阿里云oss储存回放的支持;

客户端工具下载地址(2017-04-10):http://pan.baidu.com/s/1c2Omp5u

升级包(1.77)下载地址(2017-03-31):http://pan.baidu.com/s/1qY6Sr4C 新功能:增加rtmp采集模块,支持按需拉流,支持相机轮巡检查相机状态;

升级包(1.76)下载地址(2017-03-04):http://pan.baidu.com/s/1i4NdQol  关键更新:hls服务端极限优化,vlc实测直播最小延时小于1S,让web直播互动成为可能;

升级包(1.75)下载地址(2017-02-22):http://pan.baidu.com/s/1boRto4Z

升级包(1.74)下载地址(2017-02-13):http://pan.baidu.com/s/1slat8Pv

升级包(1.73)下载地址(2017-01-11):http://pan.baidu.com/s/1bptbt07

升级包(1.72)下载地址(2017-01-10):http://pan.baidu.com/s/1pKEHoMn

客户端工具下载地址(2017-01-10):http://pan.baidu.com/s/1miLjnCW

升级包(1.71)下载地址(2017-01-09):http://pan.baidu.com/s/1geJHlLp

客户端工具下载地址(2017-01-02):https://pan.baidu.com/s/1nvJKMJR

升级包(1.69)下载地址(2016-12-07):http://pan.baidu.com/s/1c1DFPG8

升级包(1.68)下载地址(2016-12-02):http://pan.baidu.com/s/1i5v4EHZ

升级包(1.65)下载地址(2016-11-01):http://pan.baidu.com/s/1qYbCaNa

客户端工具下载地址(2016-11-01):http://pan.baidu.com/s/1pL4Kpp5

升级包(1.64)下载地址(2016-10-28):http://pan.baidu.com/s/1qXUQmy4

客户端工具下载地址(2016-10-27):http://pan.baidu.com/s/1cd0pBo

升级包(1.63)下载地址(2016-10-18):https://pan.baidu.com/s/1jIM4CRW

客户端工具下载地址(2016-10-18):https://pan.baidu.com/s/1c20wkCS

客户端工具下载地址(2016-10-11):https://pan.baidu.com/s/1kUP9OgB

客户端工具下载地址(2016-10-10):https://pan.baidu.com/s/1skYQYQD

客户端工具下载地址(2016-09-28):https://pan.baidu.com/s/1c2FUoY8

升级包(1.61)下载地址(2016-09-28):https://pan.baidu.com/s/1pLrRsan

客户端工具下载地址(2016-09-27):http://pan.baidu.com/s/1boEufGb

升级包(1.60)下载地址(2016-09-27):http://pan.baidu.com/s/1nvfeho1

客户端工具下载地址(2016-09-22):https://pan.baidu.com/s/1bpKFGrP

升级包(1.57)下载地址(2016-09-12):https://pan.baidu.com/s/1kUH0OJH

客户端工具下载地址(2016-09-07):https://pan.baidu.com/s/1i5sIyhB

客户端工具下载地址(2016-07-13):http://pan.baidu.com/s/1o8tlc9c

客户端工具下载地址(2016-07-07):http://pan.baidu.com/s/1i5O2YbV

文章完善中().....

一,功能清单:

1,单机版(多网口)支持400路以上视频流(1080及以上,4M码流)采集--已实现;

2,支持全天录像--已实现mkv支持;

3,支持硬盘滚动写入,磁盘满时自动删除最早的文件,支持磁盘配额--已实现;

4,支持磁盘阵列,支持动态扩容--已实现;

5,支持通用播放器播放储存的视频--已实现兼容vlc,portplayer;

6,支持视频rtsp分发(不限客户端数量,瓶颈在网络)--已实现;

7,rtsp使用kcp不公平协议抢占网络资源(在网络丢包,如无线网,可比tcp延时小50%以上)--已实现(同时支持tcp和udp);

8,支持视频hls分发(不限客户端数量,瓶颈在网络,pc上的vlc,android上moboPlayer实测与海康网页直播延时1S)--已实现,测试中;

9,支持视频文件rtsp点播--已实现;

10,支持按时间rtsp点播视频(既视频回放,回放与实时视频相比最小延时约为2S,保证10S)--已实现;

11,支持接收第三方程序发送的xml或json,并根据内容合成视频(延时约1S,保证5S)--已实现;

12,支持远程配置系统--已实现;

13,支持接受xml或json导入配置,方便第三方公司控制系统--已实现;

14,支持ftp浏览和下载视频--已实现;

15,支持客户端控制点播速度(可实现快速,慢速和单步播放)--已实现;

16,支持通过gb28181平台预览视频,控制球机(现只支持海康球机)--已实现;

17,支持拉取第三方gb28181平台的视频数据进行储存+rtsp转发+rtsp回放+hls转发+gb28181再推送 --已实现;

18,支持"支持gb28181的相机"直接推送视频数据到服务器进行储存+rtsp转发+rtsp回放+hls转发+gb28181再推送,同时支持NAT穿透 --已实现;

19,支持第三方使用GB28181协议访问本服务器的储存视频,同时支持第三方使用GB28181协议访问与本服务器属于同一集群的服务器上的储存视频--已实现;

20,支持接入onvif相机,代理相机控制指令,实现集中控制;

21,支持阿里云oss储存回放;

22,支持分布式集群(各台主机相互独立,互不依赖,对客户端来说集群内的任何一个节点都是中心服务器,访问任何一台主机都能获取到集群内其它主机上的数据)--已实现;

23,鉴于22条的特性,程序具有中心服务器热备,负载均衡等功能--已实现;

24,加入以telnet方式运行程序,同时配合看门狗,保证系统稳定持续运行,参考文章:http://blog.csdn.net/zhangrui_fslib_org/article/details/51591129;

二,系统优势

1,程序采用C语言,支持arm,x86平台,具有跨平台特性;

2,程序经历了三次重构,拥有先进的框架和良好的扩展性;

1),首次编写使用传统的c面向资源对象设计(如一个相机一个对象,增加相机就增加一个类的实例),导致在通道过多时,会新建大量的对象,日志的数据量成倍增长,在处理大并发时系统将创建大量的线程,线各程的创建和消亡占用了过多的cpu,基于这些原因,在功能全开时程序只能做到100路以内的并发;

2),第一次重构加入了线程池的机制,同时程序也去掉了第三方库(不再需要live555,ffmpeg等第三方库),依然使用面向资源对象设计,这个版本虽做了大量的修改,代码量极度减少,cpu占用降低,但并发数增加仍不明显;

3),第二次重构改变了程序的设计风格,改用使用面向过程的设计模式(或面向过程对象的设计模式,一个过程一个对象,因系统内任何一个资源只经过一个过程一次,即完成整个任务所需要的过程数就是系统总的线程数,这让系统的线程数不再与通道相关,成为一个定值),解决了线程过多的问题,同时也省去了复杂的线程池,让系统变得高效简单,让系统并发数突破1000;

4),第三次重构是对第二次重构的优化,也是真正工程化的实现,在第二次重构后,虽然并发数大大增加,但大并发时的一些不可预见性问题因程序不能追踪(因路数太多,用记录日志的办法效率低下,几乎是因量太大无法分析),系统bug的修复变得困难,这次重够加入了系统异常自动记录功能,在出现异常时,可自动定位并记录异常出现在源码的什么文件的多少行,同时还可记录出现问题时对应线程你关心的内存的值,大大加简化了系统bug定位和修复,让直接处理生产环境中的异常变为了可能,同时还增加了线程资源实时消耗的统计信息,能实时了解系统中各线程的cpu占用情况;这次重够还去掉了glib的依赖,系统不再使用链表,使用数组代替链表,修改所有的查找排序的算法为二分查找,让单系统达到万级并发成为了可能;

3,系统不使用数据库,单进程,不依赖第三方库,简单可靠;

4,系统同时支持xml和json通信,让第三方集成变得异常简单;

5,程序使用配置导入导出方式进行修改程序,让程序可以向下并向后兼容,彻底解决版本不兼容给使用者带来的问题;

三,系统构架

1,系统环境

系统托管给http://blog.csdn.net/zhangrui_fslib_org/article/details/49824353描述的系统,由此系统实现系统的更新与维护;

2,系统密码设计

小雉系统是基于linux开发,为保证系统安全,同时方便运维操作,系统密码按如下设计:

使用固定的本地密码:使用本地键盘输入本地root密码可登录系统,方便安装和本地维护;

动态的远程密码:使用ssh或telnel远程连接系统时,连接终端上会打印提示信息,操作员需根据提示信息向”小雉系统”官方用户中心获取对应的登录密码后登录系统;

注:动态密码中的提示信息随机产生,且获取的密码只能尝试一次,如输入错误,需要重新获取提示信息,使用新的密码再次尝试.

3,调试与稳定性框架设计

系统调试统一使用标准的printf打印,为使系统在实际生产过程中能远程查看到程序的实时打印信息,系统采用管道设计,保证在运行过程中能随时远程查看程序的实时和历史打印信息(调用此接口的方法:out -v 1 /fs/bin/sos,表示用管道捕捉/fs/bin/sos的标准输出),用此接口无需修改程序源码;

为了解程序线程之间的关系和线程的cpu瓶颈,设计线程监控,使用此接口,必须使用此对象;

为了定位生产过程中出现的bug,设计系统遗产处理,使用此接口,必须使用此对象,并用线程监控对象配合;

图1--远程查看打印信息(运行debug);

上图可看出可查看三个程序--fsServer(进程号369),php-fpm(进程号399,php的主程序),sos(进程号588,流媒体主程序)的打印信息;

上图可看出系统现接入16路视频

图2--远程查看程序的线程信息(运行debub -m)

上图可看出有两个程序使用了监控接口--fsServer(进程号369),sos(进程号588,流媒体主程序)的打印信息;

图3--为sos的精简版线程信息(掩码0xF6)

从上图可看出流媒体的线程组成,总共11个线程,实现了线程监控的线程有11个,能清晰地看到各个线程之间的父子关系(主线程创建了ConfigManager线程和vsys,这两个线程又创建了其他子线程),并能清晰看到各个线程的实时cpu(用户态,系统态)的占有率;

图4--程序异常的记录信息

从上图可以看到程序支持在程序死机时自己自动记录当前的线程创建顺序及时间,各线程占用的cpu,异常出现在某线程的某函数(属于某源码文件)内的某行,异常出现线程的函数调用堆栈等信息,保证程序的稳定性;

4,流媒体主程序框架

(1).主线程:负责开启各个工作线程,回收并准备数据帧传给采集线程;
                (2).采集线程:负责调用各个相机的相关函数,得到视频数据初始化数据帧,把数据帧传给解码线程;

(3).解码线程:解码数据帧,得到裸数据,把数据帧传给编码线程(因现有相机的输入视频帧已是h264,最后也只是需要h264帧,此设计预留);
                (4).编码线程:把数据帧编码为h264数据,把数据帧传给录像线程(因现有相机的输入视频帧已是h264,故在第一阶段时此线程为空,此设计预留);

(5).录像线程:把视频按要求保存到硬盘,把数据帧传给rtsp服务线程,响应录像合成命令;

(6).rtsp服务线程:在有需求时把视频帧进行rtp封包发送,并响应视频点播请求,把视频帧传给主线程回收;

(7).配置线程:管理系统的配置,响应客户或第三方的除视频流外的各种请求(如配置获取,配置上传,视频合成请求);

四,系统具体实现

1,采集线程:现只支持h264的rtsp数据,根据vlc,potplayer数据开发,已测试海康,大华部分相机;

2,rtsp服务线程:现只支持h264流化,根据vlc和live555开发,已测试兼容vlc,potplayer;

3,录像线程:现支持把实时数据保存到mkv文件,能响应视频合成请求合成mkv视频,精度在一帧;

4,配置线程:现支持远程导入和导出配置,支持权限管理,数据自描述校验;

五,集群实现原理

假设条件
               1,任何设备或资源(如相机,雷达,gps)都有唯一编号,即唯一的uuid;
               2,任何设备或资源(如相机,雷达,gps)处理可由单核完成;
               3,任何设备或资源(如相机,雷达,gps)的系统配置的数据传输占用的带宽远远小于设备传递的信息量;
        系统实现原理
               1,配置同步
                       1),把要接入的设备信息写入一个文件,每条信息都有自己对应的组号(组号对应集群节点的IP);
                       2),把配置文件发送给集群的任何一个节点(假设为节点A);
                       3),节点A检查导入配置文件到内存,并计算新配置的校验和,如果校验和没有改变,就不执行以后的动作;
                       4),节点A获取配置文件内各组的配置校验和,向与自己校验和不相同的节点发送新的配置文件;
                       注:每个节点只处理属于自己组的资源,如只对属于自己组的相机设备进行录像和转发;
               2,请求处理
                       1),所有请求的发起者都必须包含欲请求资源的uuid,客户端可向集群内的任何一个节点发起请求,如请求节点A;
                       2),节点A查找请求资源,如果此资源是自己处理的,就直接处理并返回,如果是其它节点处理的返回目的重定向地址(如果有多个目的地址,
                       就轮询选择一个,以此实现负载均衡);
                       注:建议客户端建立一个缓存,缓存各个资源所在主机的ip,可提高系统的响应速度;
                       建议客户端保存多个集群节点的IP,这样可实现冗余;
        此设计的优势
               1,支持单机版,系统配置可做到向下兼容,降低老项目的维护成本;
               2,无须添加硬件,节约硬件成本;
               3,集群内节点无从属关系,部署简单;
               4,集群内任何节点都可以做中心服务器,增加节点数量不仅可增加集群的负载能力,同时也可增加中心服务器冗余度;
               5,集群内节点无直接关系,一个节点能否正常工作完全由本机决定,独立性好;
               6,此设计同时支持单机版和集群,支持第三方用其它方案实现系统集群;
        此设计的缺陷
               1,配置同步所需要的数据量是N*N,即节点数量的平方,在节点过多时会产生广播风暴;

限制条件(产生的原因:系统采用分布式集群设计,系统内部所有命令用"命令字+uuid+主机ip"进行唯一区分)
                1,因命令字由开发者决定,故同一主机内不得存在uuid相同的相机或资源(相同uuid的设备执行是随机的,但不会死机,删除重复的异常通道可自动恢复);
                2,不同主机之间如果有相同uuid的资源可实现负载均衡,但负载量由工程人员决定,系统不会自动调整;
                3,不同主机之间的不同uuid的资源组成集群,但节点的负载量由工程人员决定,系统不会自动调整;

六,功能预览

1,配置管理(用configcore程序)

-bash-4.2# configcore -h
-h:for help.
-c:set input config data,remote host or local file,eg(default). -c 127.0.0.1:16863.
-i:import data,must after -c,could use multi times.
-o:set output config data,remote host or local file.
-t:set local output file type(0--config,1--ebml with comment,2--ebml,3--xml all,4--xml with comment,5--xml,6--json all,7-json),eg(default). -t 0.
-q:set quit after run program.

(1)xml完整方式导出配置(configcore -c 127.0.0.1 -o /fs/project/data/1.txt -t 3)

太多了,省略

(2)xml只代注释方式导出配置(configcore -c 127.0.0.1 -o /fs/project/data/1.txt -t 4)

<?xml version="1.0" encoding="UTF-8"?>
<vsys comment="视频系统,预留做定时器,最大实例数:100">
    <ntpfreq comment="ntp校时间隔(s),建议60S,有效长度:0-300字节">6</ntpfreq>
    <ntpserver comment="ntp服务器ip,有效长度:0-16字节">192.168.50.188</ntpserver>
    <vsysChannel comment="通道,最大实例数:1000">
        <uuid comment="通道标识,每个通道应唯一,有效长度:1-64字节">2</uuid>
        <cameraConfig comment="相机配置">
            <cameraType comment="相机类型,有效长度:1-16字节">rtsp</cameraType>
            <ipv4 comment="相机IP,有效长度:1-16字节">192.168.50.252</ipv4>
            <rtspPort comment="rtsp端口,有效长度:1-5字节">554</rtspPort>
            <rtspURL comment="rtspURL,必须以/开头,可为空,有效长度:0-128字节">/h264/ch2/main/av_stream</rtspURL>
            <rstpUsername comment="rtsp用户名,可为空,有效长度:0-128字节">admin</rstpUsername>
            <rstpPasswd comment="rtsp密码,可为空,有效长度:0-128字节">12345</rstpPasswd>
        </cameraConfig>
        <recordConfig comment="数据记录配置">
            <rtspServerURL comment="rtsp转发地址,为空表示不转发,有效长度:1-16字节">/ch1</rtspServerURL>
        </recordConfig>
    </vsysChannel>
    <vsysChannel comment="通道,最大实例数:1000">
        <uuid comment="通道标识,每个通道应唯一,有效长度:1-64字节">57</uuid>
        <cameraConfig comment="相机配置">
            <cameraType comment="相机类型,有效长度:1-16字节">rtsp</cameraType>
            <ipv4 comment="相机IP,有效长度:1-16字节">192.168.50.251</ipv4>
            <rtspPort comment="rtsp端口,有效长度:1-5字节">554</rtspPort>
            <rtspURL comment="rtspURL,必须以/开头,可为空,有效长度:0-128字节">/defaultPrimary?streamType=u</rtspURL>
            <rstpUsername comment="rtsp用户名,可为空,有效长度:0-128字节">admin</rstpUsername>
            <rstpPasswd comment="rtsp密码,可为空,有效长度:0-128字节">12345</rstpPasswd>
        </cameraConfig>
        <recordConfig comment="数据记录配置">
            <rtspServerURL comment="rtsp转发地址,为空表示不转发,有效长度:1-16字节">/57</rtspServerURL>
        </recordConfig>
    </vsysChannel>
    <vsysChannel comment="通道,最大实例数:1000">
        <uuid comment="通道标识,每个通道应唯一,有效长度:1-64字节">6</uuid>
        <cameraConfig comment="相机配置">
            <cameraType comment="相机类型,有效长度:1-16字节">rtsp</cameraType>
            <ipv4 comment="相机IP,有效长度:1-16字节">192.168.50.64</ipv4>
            <rtspPort comment="rtsp端口,有效长度:1-5字节">554</rtspPort>
            <rtspURL comment="rtspURL,必须以/开头,可为空,有效长度:0-128字节">/h264/ch2/main/av_stream</rtspURL>
            <rstpUsername comment="rtsp用户名,可为空,有效长度:0-128字节">admin</rstpUsername>
            <rstpPasswd comment="rtsp密码,可为空,有效长度:0-128字节">12345abc</rstpPasswd>
        </cameraConfig>
        <recordConfig comment="数据记录配置">
            <rtspServerURL comment="rtsp转发地址,为空表示不转发,有效长度:1-16字节">/6</rtspServerURL>
        </recordConfig>
    </vsysChannel>
    <vsysChannel comment="通道,最大实例数:1000">
        <uuid comment="通道标识,每个通道应唯一,有效长度:1-64字节">4</uuid>
        <cameraConfig comment="相机配置">
            <cameraType comment="相机类型,有效长度:1-16字节">rtsp</cameraType>
            <ipv4 comment="相机IP,有效长度:1-16字节">192.168.50.65</ipv4>
            <rtspPort comment="rtsp端口,有效长度:1-5字节">554</rtspPort>
            <rtspURL comment="rtspURL,必须以/开头,可为空,有效长度:0-128字节">/h264/ch2/main/av_stream</rtspURL>
            <rstpUsername comment="rtsp用户名,可为空,有效长度:0-128字节">admin</rstpUsername>
            <rstpPasswd comment="rtsp密码,可为空,有效长度:0-128字节">12345abc</rstpPasswd>
        </cameraConfig>
        <recordConfig comment="数据记录配置">
            <rtspServerURL comment="rtsp转发地址,为空表示不转发,有效长度:1-16字节">/4</rtspServerURL>
        </recordConfig>
    </vsysChannel>
    <vsysChannel comment="通道,最大实例数:1000">
        <uuid comment="通道标识,每个通道应唯一,有效长度:1-64字节">66</uuid>
        <cameraConfig comment="相机配置">
            <cameraType comment="相机类型,有效长度:1-16字节">rtsp</cameraType>
            <ipv4 comment="相机IP,有效长度:1-16字节">192.168.50.66</ipv4>
            <rtspPort comment="rtsp端口,有效长度:1-5字节">554</rtspPort>
            <rtspURL comment="rtspURL,必须以/开头,可为空,有效长度:0-128字节">/h264/ch2/main/av_stream</rtspURL>
            <rstpUsername comment="rtsp用户名,可为空,有效长度:0-128字节">admin</rstpUsername>
            <rstpPasswd comment="rtsp密码,可为空,有效长度:0-128字节">12345abc</rstpPasswd>
        </cameraConfig>
        <recordConfig comment="数据记录配置">
            <rtspServerURL comment="rtsp转发地址,为空表示不转发,有效长度:1-16字节">/66</rtspServerURL>
        </recordConfig>
    </vsysChannel>
    <vsysChannel comment="通道,最大实例数:1000">
        <uuid comment="通道标识,每个通道应唯一,有效长度:1-64字节">67</uuid>
        <cameraConfig comment="相机配置">
            <cameraType comment="相机类型,有效长度:1-16字节">rtsp</cameraType>
            <ipv4 comment="相机IP,有效长度:1-16字节">192.168.50.67</ipv4>
            <rtspPort comment="rtsp端口,有效长度:1-5字节">554</rtspPort>
            <rtspURL comment="rtspURL,必须以/开头,可为空,有效长度:0-128字节">/h264/ch2/main/av_stream</rtspURL>
            <rstpUsername comment="rtsp用户名,可为空,有效长度:0-128字节">admin</rstpUsername>
            <rstpPasswd comment="rtsp密码,可为空,有效长度:0-128字节">12345abc</rstpPasswd>
        </cameraConfig>
        <recordConfig comment="数据记录配置">
            <rtspServerURL comment="rtsp转发地址,为空表示不转发,有效长度:1-16字节">/67</rtspServerURL>
        </recordConfig>
    </vsysChannel>
    <vsysChannel comment="通道,最大实例数:1000">
        <uuid comment="通道标识,每个通道应唯一,有效长度:1-64字节">tt001</uuid>
        <cameraConfig comment="相机配置">
            <cameraType comment="相机类型,有效长度:1-16字节">rtsp</cameraType>
            <ipv4 comment="相机IP,有效长度:1-16字节">127.0.0.1</ipv4>
            <rtspPort comment="rtsp端口,有效长度:1-5字节">554</rtspPort>
            <rtspURL comment="rtspURL,必须以/开头,可为空,有效长度:0-128字节">/ch1</rtspURL>
        </cameraConfig>
        <recordConfig comment="数据记录配置">
            <rtspServerURL comment="rtsp转发地址,为空表示不转发,有效长度:1-16字节">/tt001</rtspServerURL>
        </recordConfig>
    </vsysChannel>
    <vsysChannel comment="通道,最大实例数:1000">
        <uuid comment="通道标识,每个通道应唯一,有效长度:1-64字节">tt002</uuid>
        <cameraConfig comment="相机配置">
            <cameraType comment="相机类型,有效长度:1-16字节">rtsp</cameraType>
            <ipv4 comment="相机IP,有效长度:1-16字节">127.0.0.1</ipv4>
            <rtspPort comment="rtsp端口,有效长度:1-5字节">554</rtspPort>
            <rtspURL comment="rtspURL,必须以/开头,可为空,有效长度:0-128字节">/ch1</rtspURL>
        </cameraConfig>
        <recordConfig comment="数据记录配置">
            <rtspServerURL comment="rtsp转发地址,为空表示不转发,有效长度:1-16字节">/tt002</rtspServerURL>
        </recordConfig>
    </vsysChannel>
    <vsysChannel comment="通道,最大实例数:1000">
        <uuid comment="通道标识,每个通道应唯一,有效长度:1-64字节">tt003</uuid>
        <cameraConfig comment="相机配置">
            <cameraType comment="相机类型,有效长度:1-16字节">rtsp</cameraType>
            <ipv4 comment="相机IP,有效长度:1-16字节">127.0.0.1</ipv4>
            <rtspPort comment="rtsp端口,有效长度:1-5字节">554</rtspPort>
            <rtspURL comment="rtspURL,必须以/开头,可为空,有效长度:0-128字节">/ch1</rtspURL>
        </cameraConfig>
        <recordConfig comment="数据记录配置">
            <rtspServerURL comment="rtsp转发地址,为空表示不转发,有效长度:1-16字节">/tt003</rtspServerURL>
        </recordConfig>
    </vsysChannel>
    <vsysChannel comment="通道,最大实例数:1000">
        <uuid comment="通道标识,每个通道应唯一,有效长度:1-64字节">tt004</uuid>
        <cameraConfig comment="相机配置">
            <cameraType comment="相机类型,有效长度:1-16字节">rtsp</cameraType>
            <ipv4 comment="相机IP,有效长度:1-16字节">127.0.0.1</ipv4>
            <rtspPort comment="rtsp端口,有效长度:1-5字节">554</rtspPort>
            <rtspURL comment="rtspURL,必须以/开头,可为空,有效长度:0-128字节">/ch1</rtspURL>
        </cameraConfig>
        <recordConfig comment="数据记录配置">
            <rtspServerURL comment="rtsp转发地址,为空表示不转发,有效长度:1-16字节">/tt004</rtspServerURL>
        </recordConfig>
    </vsysChannel>
    <vsysChannel comment="通道,最大实例数:1000">
        <uuid comment="通道标识,每个通道应唯一,有效长度:1-64字节">tt005</uuid>
        <cameraConfig comment="相机配置">
            <cameraType comment="相机类型,有效长度:1-16字节">rtsp</cameraType>
            <ipv4 comment="相机IP,有效长度:1-16字节">127.0.0.1</ipv4>
            <rtspPort comment="rtsp端口,有效长度:1-5字节">554</rtspPort>
            <rtspURL comment="rtspURL,必须以/开头,可为空,有效长度:0-128字节">/ch1</rtspURL>
        </cameraConfig>
        <recordConfig comment="数据记录配置">
            <rtspServerURL comment="rtsp转发地址,为空表示不转发,有效长度:1-16字节">/tt005</rtspServerURL>
        </recordConfig>
    </vsysChannel>
    <vsysChannel comment="通道,最大实例数:1000">
        <uuid comment="通道标识,每个通道应唯一,有效长度:1-64字节">tt006</uuid>
        <cameraConfig comment="相机配置">
            <cameraType comment="相机类型,有效长度:1-16字节">rtsp</cameraType>
            <ipv4 comment="相机IP,有效长度:1-16字节">127.0.0.1</ipv4>
            <rtspPort comment="rtsp端口,有效长度:1-5字节">554</rtspPort>
            <rtspURL comment="rtspURL,必须以/开头,可为空,有效长度:0-128字节">/ch1</rtspURL>
        </cameraConfig>
        <recordConfig comment="数据记录配置">
            <rtspServerURL comment="rtsp转发地址,为空表示不转发,有效长度:1-16字节">/tt006</rtspServerURL>
        </recordConfig>
    </vsysChannel>
    <vsysChannel comment="通道,最大实例数:1000">
        <uuid comment="通道标识,每个通道应唯一,有效长度:1-64字节">tt007</uuid>
        <cameraConfig comment="相机配置">
            <cameraType comment="相机类型,有效长度:1-16字节">rtsp</cameraType>
            <ipv4 comment="相机IP,有效长度:1-16字节">127.0.0.1</ipv4>
            <rtspPort comment="rtsp端口,有效长度:1-5字节">554</rtspPort>
            <rtspURL comment="rtspURL,必须以/开头,可为空,有效长度:0-128字节">/ch1</rtspURL>
        </cameraConfig>
        <recordConfig comment="数据记录配置">
            <rtspServerURL comment="rtsp转发地址,为空表示不转发,有效长度:1-16字节">/tt007</rtspServerURL>
        </recordConfig>
    </vsysChannel>
    <vsysChannel comment="通道,最大实例数:1000">
        <uuid comment="通道标识,每个通道应唯一,有效长度:1-64字节">tt008</uuid>
        <cameraConfig comment="相机配置">
            <cameraType comment="相机类型,有效长度:1-16字节">rtsp</cameraType>
            <ipv4 comment="相机IP,有效长度:1-16字节">127.0.0.1</ipv4>
            <rtspPort comment="rtsp端口,有效长度:1-5字节">554</rtspPort>
            <rtspURL comment="rtspURL,必须以/开头,可为空,有效长度:0-128字节">/ch1</rtspURL>
        </cameraConfig>
        <recordConfig comment="数据记录配置">
            <rtspServerURL comment="rtsp转发地址,为空表示不转发,有效长度:1-16字节">/tt008</rtspServerURL>
        </recordConfig>
    </vsysChannel>
    <vsysChannel comment="通道,最大实例数:1000">
        <uuid comment="通道标识,每个通道应唯一,有效长度:1-64字节">tt009</uuid>
        <cameraConfig comment="相机配置">
            <cameraType comment="相机类型,有效长度:1-16字节">rtsp</cameraType>
            <ipv4 comment="相机IP,有效长度:1-16字节">127.0.0.1</ipv4>
            <rtspPort comment="rtsp端口,有效长度:1-5字节">554</rtspPort>
            <rtspURL comment="rtspURL,必须以/开头,可为空,有效长度:0-128字节">/ch1</rtspURL>
        </cameraConfig>
        <recordConfig comment="数据记录配置">
            <rtspServerURL comment="rtsp转发地址,为空表示不转发,有效长度:1-16字节">/tt009</rtspServerURL>
        </recordConfig>
    </vsysChannel>
    <vsysChannel comment="通道,最大实例数:1000">
        <uuid comment="通道标识,每个通道应唯一,有效长度:1-64字节">tt010</uuid>
        <cameraConfig comment="相机配置">
            <cameraType comment="相机类型,有效长度:1-16字节">rtsp</cameraType>
            <ipv4 comment="相机IP,有效长度:1-16字节">127.0.0.1</ipv4>
            <rtspPort comment="rtsp端口,有效长度:1-5字节">554</rtspPort>
            <rtspURL comment="rtspURL,必须以/开头,可为空,有效长度:0-128字节">/ch1</rtspURL>
        </cameraConfig>
        <recordConfig comment="数据记录配置">
            <rtspServerURL comment="rtsp转发地址,为空表示不转发,有效长度:1-16字节">/tt010</rtspServerURL>
        </recordConfig>
    </vsysChannel>
</vsys>

(3)json不带注释方式导出配置(configcore -c 127.0.0.1 -o /fs/project/data/1.txt -t 7)

{
    "vsys":{
        "ntpfreq":"6",
        "ntpserver":"192.168.50.188",
        "vsysChannel":[{
            "uuid":"2",
            "cameraConfig":{
                "cameraType":"rtsp",
                "ipv4":"192.168.50.252",
                "rtspPort":"554",
                "rtspURL":"/h264/ch2/main/av_stream",
                "rstpUsername":"admin",
                "rstpPasswd":"12345"
            },
            "recordConfig":{
                "rtspServerURL":"/ch1"
            }
        },{
            "uuid":"57",
            "cameraConfig":{
                "cameraType":"rtsp",
                "ipv4":"192.168.50.251",
                "rtspPort":"554",
                "rtspURL":"/defaultPrimary?streamType=u",
                "rstpUsername":"admin",
                "rstpPasswd":"12345"
            },
            "recordConfig":{
                "rtspServerURL":"/57"
            }
        },{
            "uuid":"6",
            "cameraConfig":{
                "cameraType":"rtsp",
                "ipv4":"192.168.50.64",
                "rtspPort":"554",
                "rtspURL":"/h264/ch2/main/av_stream",
                "rstpUsername":"admin",
                "rstpPasswd":"12345abc"
            },
            "recordConfig":{
                "rtspServerURL":"/6"
            }
        },{
            "uuid":"4",
            "cameraConfig":{
                "cameraType":"rtsp",
                "ipv4":"192.168.50.65",
                "rtspPort":"554",
                "rtspURL":"/h264/ch2/main/av_stream",
                "rstpUsername":"admin",
                "rstpPasswd":"12345abc"
            },
            "recordConfig":{
                "rtspServerURL":"/4"
            }
        },{
            "uuid":"66",
            "cameraConfig":{
                "cameraType":"rtsp",
                "ipv4":"192.168.50.66",
                "rtspPort":"554",
                "rtspURL":"/h264/ch2/main/av_stream",
                "rstpUsername":"admin",
                "rstpPasswd":"12345abc"
            },
            "recordConfig":{
                "rtspServerURL":"/66"
            }
        },{
            "uuid":"67",
            "cameraConfig":{
                "cameraType":"rtsp",
                "ipv4":"192.168.50.67",
                "rtspPort":"554",
                "rtspURL":"/h264/ch2/main/av_stream",
                "rstpUsername":"admin",
                "rstpPasswd":"12345abc"
            },
            "recordConfig":{
                "rtspServerURL":"/67"
            }
        },{
            "uuid":"tt001",
            "cameraConfig":{
                "cameraType":"rtsp",
                "ipv4":"127.0.0.1",
                "rtspPort":"554",
                "rtspURL":"/ch1"
            },
            "recordConfig":{
                "rtspServerURL":"/tt001"
            }
        },{
            "uuid":"tt002",
            "cameraConfig":{
                "cameraType":"rtsp",
                "ipv4":"127.0.0.1",
                "rtspPort":"554",
                "rtspURL":"/ch1"
            },
            "recordConfig":{
                "rtspServerURL":"/tt002"
            }
        },{
            "uuid":"tt003",
            "cameraConfig":{
                "cameraType":"rtsp",
                "ipv4":"127.0.0.1",
                "rtspPort":"554",
                "rtspURL":"/ch1"
            },
            "recordConfig":{
                "rtspServerURL":"/tt003"
            }
        },{
            "uuid":"tt004",
            "cameraConfig":{
                "cameraType":"rtsp",
                "ipv4":"127.0.0.1",
                "rtspPort":"554",
                "rtspURL":"/ch1"
            },
            "recordConfig":{
                "rtspServerURL":"/tt004"
            }
        },{
            "uuid":"tt005",
            "cameraConfig":{
                "cameraType":"rtsp",
                "ipv4":"127.0.0.1",
                "rtspPort":"554",
                "rtspURL":"/ch1"
            },
            "recordConfig":{
                "rtspServerURL":"/tt005"
            }
        },{
            "uuid":"tt006",
            "cameraConfig":{
                "cameraType":"rtsp",
                "ipv4":"127.0.0.1",
                "rtspPort":"554",
                "rtspURL":"/ch1"
            },
            "recordConfig":{
                "rtspServerURL":"/tt006"
            }
        },{
            "uuid":"tt007",
            "cameraConfig":{
                "cameraType":"rtsp",
                "ipv4":"127.0.0.1",
                "rtspPort":"554",
                "rtspURL":"/ch1"
            },
            "recordConfig":{
                "rtspServerURL":"/tt007"
            }
        },{
            "uuid":"tt008",
            "cameraConfig":{
                "cameraType":"rtsp",
                "ipv4":"127.0.0.1",
                "rtspPort":"554",
                "rtspURL":"/ch1"
            },
            "recordConfig":{
                "rtspServerURL":"/tt008"
            }
        },{
            "uuid":"tt009",
            "cameraConfig":{
                "cameraType":"rtsp",
                "ipv4":"127.0.0.1",
                "rtspPort":"554",
                "rtspURL":"/ch1"
            },
            "recordConfig":{
                "rtspServerURL":"/tt009"
            }
        },{
            "uuid":"tt010",
            "cameraConfig":{
                "cameraType":"rtsp",
                "ipv4":"127.0.0.1",
                "rtspPort":"554",
                "rtspURL":"/ch1"
            },
            "recordConfig":{
                "rtspServerURL":"/tt010"
            }
        }]
    }
}

配置使用导入导出方式,支持标准的xml和json,方便第三方作二次开发

2,实时录像(ftp查看)

3,实时视频转发

4,按时间点播视频

5,文件点播

6,变速播放

7,倒退播放

streamtype:

0--正序正常播放,1-倒序正常播放,2-正序关键帧播放,3-倒序关键帧播放

七,评测

1,120路(1080P视频流) 输入,23个客户端点播

硬件环境: 内存 :2G   CPU:AMD X4 955  主频:3.4GHz  4核4线程    流媒体接千兆口,其他接百兆口,320G硬盘一块,1T硬盘两块

IO峰值:60M/s
                句柄:799
                线程数:11

CPU稳定在26%-45%
                内存峰值:550M
                硬盘IO均值:32.1M/s

网络下行:289m/s
                网络上行:69m/s

2,400路(1080P视频流,4M) 输入,110个客户端直播

硬件环境: 内存 :4G   CPU:AMD X4 955  主频:3.4GHz  4核4线程   双千intel千兆口输入, 一rtl8169输出,6块7200rpm高性能监控硬盘(每个1T)组rad0软阵列;

测试条件:400路1080P视频(4M码流)同时采集并录像,23台pc同时直播流媒体转发视频(共110路)

硬盘IO峰值:250M/s
                句柄:2673
                线程数:25

CPU稳定在65%-87%
                内存峰值:1.2G
                硬盘IO均值:198M/s

网卡1(intel)下行(采集):768m/s

网卡2(intel)下行(采集):789m/s

网卡3(rtl8169)上行(转发):431m/s

八,开发文档

九,使用文档

1,系统安装

2,网络设置

3,硬盘设置

4,系统更新

5,配置工具























































































视频系统 流媒体 rtsp hls h264 h265 aac 高并发 低延时 系统 设计 录像 视频合成 转发 点播 快进 快退 单步播放 分布式集群相关推荐

  1. RTP协议封装H264/H265/AAC

    <RTSP实时音视频传输介绍> 目录 一.前言 二.RTP基本格式介绍 1.RTP 固定头 2.RTP 扩展头 3.RTP 载荷 三.RTP封装H264 1.封装包类型 四.RTP封装H2 ...

  2. 资源放送丨《高并发Oracle OLTP系统的故障案例分享》PPT视频

    点击上方"蓝字" 关注我们,享更多干货! 前段时间,墨天轮邀请资深专家 邓秋爽 老师分享了<高并发Oracle OLTP系统的故障案例分享>,在这里我们将课件PPT和实 ...

  3. 海量并发低延时 RTC-CDN 系统架构设计(下)

    上半部分内容:海量并发低延时 RTC-CDN 系统架构设计(上) 低延时 RTC-CDN 系统的架构 传统 CDN 直播发展多年,为了优化延时,业界基本上朝两大优化方向:优化传输层协议和在传输层协议的 ...

  4. python 循环播放音乐_python gstreamer实现视频快进/快退/循环播放功能

    这篇文章主要介绍了python gstreamer 实现视频快进/快退/循环播放功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 Gstreamer到底是个啥? ...

  5. 软考·系统架构师论文——论软件的高并发设计

    文章目录 说明 摘要 过渡 项目背景 论点理论 论点实践 结尾 说明 1.[摘要 300~330字] ① 项目介绍:时间.项目名.项目主要功能简述.作者角色及工作内容 ② 项目技术简介:正文理论/分论 ...

  6. BILIBILI 高并发实时弹幕系统那些事(项目开源、架构演变)

    原文地址:http://blog.csdn.net/hxqneuq2012/article/details/52813937 B 站建立开源工作组:ijkplayer 等多个项目开源 SegmentF ...

  7. bilibili高并发实时弹幕系统的实战之路

    声明:本文来自「七牛云主办的架构师实践日--泛娱乐+直播技术最佳实践」的演讲内容整理.PPT.速记和现场演讲视频等参见"七牛架构师实践日"官网. 嘉宾:刘丁,bilibili 架构 ...

  8. java使用国标方式取流,一种基于JAIN-SIP的国标28181平台分布式集群实现系统的制作方法...

    本发明涉及国标设备接入相关技术领域,尤其是指一种基于jain-sip的国标28181平台分布式集群实现系统. 背景技术: 在传统安防行业,采用较多的是用c++编写的产品,该类产品存在一些缺陷:该类产品 ...

  9. 如何实现视频的快进快退功能(整理)

    最近在研究视频的播放的快进快退功能,先把相关的调研结果整理一下,做个记录. 裸的H264码流,如果实现快进快退必须基于 I 帧才能实现:在播放前对整个码流进行统计,总共有多少帧,所有的 I 帧在什么位 ...

最新文章

  1. maven 上传jar 包含源码
  2. 给你的站点全面提速——来自Yahoo UI的各种Bset Practices
  3. ABAP document read logic
  4. vba 提取 json某个值_利用VBA字典,提取两列数据的重复值
  5. alm数据库mysql_mysql
  6. 涂威威:第四范式经验与思考分享
  7. java初学总结_Java初学总结
  8. 专科python应届生工资多少-阿里员工吐槽:应届生工资太猛,被倒挂,后悔接阿里侮辱性offer...
  9. 前后端分离 获取用户ip_前后端分离应用——用户信息传递
  10. 数据--第49课 - 线性索引查找
  11. delphi利用bing翻译API做的多国语言翻译软件
  12. java学习-狼人杀
  13. 4场直播丨EsgynDB连接服务层、Oracle、openGauss
  14. 【搜狗VR输入法无法显示键盘】
  15. 【C语言】判断数字是否为素数或合数
  16. ndows movie maker,Windows Movie Maker
  17. 线性代数在计算机中的应用论文,论线性代数在现实生活中的应用(结课论文)
  18. 完爆90%的性能毛病,收好数据库优化八大通用绝招
  19. 2022-2028全球与中国无线和多室音频市场现状及未来发展趋势
  20. 关于PDU电源插座,你了解多少?

热门文章

  1. 计算机软考网络工程师如何复习?
  2. 颜宁发微博“求救” 要投拆造谣公众号
  3. 拼多多校招内推编程题2 大整数乘法
  4. 网页中title乱码问题解决方案
  5. windows下强大的系统监视工具Procmon(Process Monitor)
  6. Windows server 2012远程桌面会话主机和远程桌面授权。
  7. VMware 16 安装银河麒麟V10服务器系统
  8. atsha204a加密ic01
  9. 牛客网练习,某公司2017秋招。叫车 2017年
  10. 今日头条校招真题——字典序