1、前言
针对安防行业,实时通过4G上传实时码流推送到监控中心,网络带宽好的时,上传一定分辨率和码率的实时流,通过RTP协议上传到监控中心,可以实时观看,延迟不大;但是当网络不好时,再上传固定码流和分辨率下,监控中心延迟非常大,那么怎么能动态改变分辨率和码率实时上传码流,监控中心实时观看呢。目前可通过/proc/net/dev 来获取实时发送和接收状态,从而可以有效监控和改变分辨率和码率。
2、原理
Linux提供的LKM机制可以使我们通过proc伪文件系统来获取Linux内核信息,而通过proc/net/dev我们可以实时获取网络适配器及统计信息。抛开复杂的概念,简单说就是我们可以利用proc/net/dev来获取网卡的网速及网络包的收发情况。这里我们主要关心Receive和Transmit项的bytes项。同样网卡的流量,丢包率可以通过/proc/net/dev文件来读取。 ifstat获取网卡数据就是读取的/proc/net/dev系统来的。
bytes: 接口发送或接收的数据的总字节数
packets: 接口发送或接收的数据包总数
errs: 由设备驱动程序检测到的发送或接收错误的总数
drop: 设备驱动程序丢弃的数据包总数
fifo: FIFO缓冲区错误的数量
frame: 分组帧错误的数量
colls: 接口上检测到的冲突数
compressed: 设备驱动程序发送或接收的压缩数据包数
carrier: 由设备驱动程序检测到的载波损耗的数量
multic