LiveNVR安防流媒体服务-解决磁盘IO瓶颈方案
LiveNVR安防流媒体服务,支持RTSP稳定拉流接入,支持Onvif协议接入,支持RTMP/HLS/HTTP-FLV分发,将传统安防监控设备互联化,无插件直播等。
磁盘I/O问题
对于LiveNVR的功能中包含使用H5无插件直播。其实H5播放的是HLS流,就是一个个TS文件。我们的LiveNVR会将流切成一个个TS文件,播的的时候就是直接播放这个M3U8文件。对于接入摄像机路数少的时候,磁盘I/O没什么太大的问题,当接入的摄像机过多,并且都是一直在读写TS文件的时候(必须使用HLS流的时候),这个时候磁盘的I/O就会是一个瓶颈问题。磁盘的读写速度跟不上,这将导致我们播放HLS流会出现卡顿甚至无法播放的情况。
解决方法
利用RamDisk,就是虚拟内存盘使用计算机内存的一部分来模拟一个硬盘,相对于直接的硬盘文件读写来说,这种技术可以极大的提高在其上进行的文件读写的速度。
概念简介:
什么是RamDisk?RamDisk就是将内存(RAM)的一部分当做硬盘(DISK)来使用。RamDisk有固定的大小,可以像正常硬盘分区那样去使用。 就操作时间来讲,RamDisk比真实的物理硬盘快很多,当系统关闭或断电时,保存在RamDisk中的数据会全部丢失。RamDisk可以成为一个存放临时数据的好地方。
基于LiveNVR的方案执行:
备注:有需求的可以通过LiveNVR的配置来实现默认使用HLS流。
配置方法:
如果在PC上也需要采用纯H5无插件播放的方式,我们可以修改LiveNVR.XML中的FLASH_STREAMING_TYPE字段为 1 来限定直播协议为HLS
<PREF NAME="FLASH_STREAMING_TYPE" >1</PREF>
对于RamDisk,实现的方式方法有很多,Windows和Linux都有对应的实现方法。
步骤一 从内存里虚拟出相应的硬盘
虚拟硬盘大小根据自身的需求和内存的大小来评定
Linux RamDisk 执行方式
创建一个目录
-
这个目录可以在文件系统的任何位置,比如:
sudo mkdir ramdisk
-
如果你想让所有用户使用这个RamDisk,那么更改目录的权限。
sudo chmod 777 ramdisk
指定RamDisk的大小、文件系统和设备名,并挂载到一个目录下
-
我可以根据自身和机器的需求来分配,我们暂时分配200m给RamDisk。运行下面的一行命令。
sudo mount -t tmpfs -o size=200m myramdisk ramdisk
备注:这条命令指定文件系统为tmpfs,RamDisk大小为200MB,myramdisk是我给它指定的设备名。
-
如果我们运行下面的命令:
mount | tail -n 1
可以发现,RamDisk成功地挂载到了ramdisk;
-
利用如下命令,进行普通硬盘和RAM硬盘的速度对比;
dd if=/dev/zero of=ramdisk/test bs=1024k count=512 conv=fdatasync
卸载RamDisk:
`$ sudo umount ramdisk `
这个目录中的所有数据丢失并释放占用的内存空间
Windows RamDisk 执行方式
使用软件来进行配置(window版本使用软件有很多,在这里就不推荐了);
步骤二 指定到虚拟的硬盘空间
将LiveNVR的对应的TS文件的生成目录指定到虚拟的硬盘空间上;
打开nginx\conf目录下的liveqing.conf文件();
Linux配置对应路径(填写绝对路径)
Windows配置对应路径
步骤三 保存重启
保存文件并重启软件LiveNVR,完成操作;
后面HLS播放时候,将通过RamDisk,解决磁盘I/O瓶颈问题