周新虹 宋维
(山东电子职业技术学院 电子与通信工程系 山东省济南市 250200)
H.264 是一种低码率视频数据压缩算法,其在视频监控、视频会议、视频巡检等领域都有着广泛的应用。H.264视频压缩格式适合于各种组网模式,包括一点对多点的服务器-客户端结构,以及点对点的服务器-服务器结构等。由于H.264视频压缩格式在以太网上传输的便捷性,所以可以考虑使用协议分析技术,从以太网传输的数据中直接获取H.264视频流,并对其进行数据过滤,得到用户指定MAC 地址(或IP 地址)的视频源所传输的H.264视频流,解码后,实现本机的视频实时播放。
通过协议分析技术实现的H.264视频显示终端具有以下优点:
多点性是指视频显示终端可以在以太网内进行多点安装,实现多点视频显示。用户在安装显示终端时,只需考虑网络数据是否能够到达即可,不受安装位置等其它条件束缚。对于跨网段的以太网架构,可以将显示终端安装在路由器的外网出口,这样就可以监听到当前网段内的所有数据,以实现对当前网段内所有H.264视频的监控。
便捷性是指视频显示终端不仅可以使用PC 机实现,也可以使用装有Linux 操作系统的嵌入式设备予以实现。由于,嵌入式设备具有体积小、功耗低、易携带、易安装等显著特点,所以终端可以便捷地安装到网络中的指定位置,方便快捷。
高效性是指视频显示终端的使用不占用现有以太网的任何带宽,这是由于论文所述的视频显示终端仅对接收以太网中传输的数据进行分析和监控,而不向以太网发送任何数据,所以论文所述的视频显示终端的加入不会影响原有以太网中的数据的传输效率,具有高效性的特点。
过滤性是指视频显示终端可以对用户感兴趣的特定视频流进行监控,这是由于H.264视频流是封装在以太网数据报中,而现有的以太网均采用TCP/IP 协议,在对TCP/IP 协议进行解码时,可以获得视频流传输的源MAC 地址(或IP地址),以及目标MAC 地址(或IP 地址),借助取得的MAC 地址(或IP 地址),可以对视频流进行过滤和整理,从而使终端能够显示用户希望看到的H.264视频流。
保密性是指视频显示终端加入以太网后,以太网中的其它计算机设备不能发现视频显示终端的存在,其原因还在于视频显示终端是单纯的数据接收设备,而不向网络中发送任何其它数据,所以视频显示终端加入以太网后,其它计算机设备是察觉不到当前视频显示终端的存在,以及安装的具体位置。
H.264 是ITU-T 和ISO 组建的联合视频组(JVT)制定的数字视频编码标准[1],是当前互联网上广为流行的视频编码压缩标准,其主要采用以下3种方法对视频进行压缩,包括[2]:
(1)帧内预测压缩:解决空域数据冗余问题;
(2)帧间预测压缩:解决时域数据冗余问题;
(3)整数离散余弦变换:将空间上的相关性变为频域上的无关数据,进行量化。
视频帧经过H.264 算法进行压缩后,将分为:I 帧、P帧和B 帧,解释如下[2]:
I 帧:关键帧,采用帧内压缩技术;
P 帧:前向参考帧,在压缩时,只参考前面已处理的帧;
B 帧:双向参考帧,在参考前序帧及后续帧的基础上进行压缩。
RTSP(Real Time Streaming Protocol)称为实时流协议,是一种用于直接处理流媒体的传输协议,其协议本身虽不需连续发送流媒体数据,但通过协议控制,可以建立并控制多个时间同步的连续流媒体[3]。所以,RTSP 是当前互联网上最为流行的流媒体服务器控制协议,与H.264 相结合,各取所长,可以完成互联网上高质量、低码率的视频传输。
RTSP[4]含有RTP 数据,RTP 全称是Real Time Transport Protocol,由IETF 的多媒体传输小组与1996年在RFC1889中公布,并在RFC3550 中进行更新。RTP 是TCP/IP 协议簇的上层协议,位于应用层,使用TCP 或UDP 来传输流媒体数据,所以,从RTSP 中提取H.264视频流,需正确解析TCP/IP 传输层和网络层的协议数据。
论文所述方案的整体分析流程如图1所示,可分为pcapng 的整体解包、解析接口描述块、解析增强分组块、解析TCP/IP 链路层、解析TCP/IP 的IP 协议、解析TCP/IP 的TCP 协议、解析RTSP Interleaved Frame 协议、解析RTP 协议8 个步骤,最终在本地文件中存储H.264视频流,该视频流可通过PotPlayer、VLC media player 等播放器实时播放。
图1:分析流程
提取H.264视频流,首先需要捕获原始网络数据,根据操作系统的不同,可以选用tcpdump、netsniff-ng、iptraf、argurs、iftop 等,这些软件抓包后,一般都会存储为pcapng格式,所以解析RTSP,首先需要对pcapng 格式进行分析。pcapng 是IETF(互联网工程工作组)定义的新一代pcap 格式,有效提升了pcap 的可扩展性及逻辑性。
pcapng 由各种块(block)组成,每种块都有统一的结构,如表1所示。
表1:pcapng 的块结构
根据块类型的不同,pcapng 的块可以分为:节头块(Section Header Block)、接口描述块(Interface Description Block)、分组块(Packet Block)、简单分组块(Simple Packet Block)、名称解析块(Name Resolution Block)、接口统计块(Interface Statistics Block)、增强分组块(Enhanced Packet Block)。
在上述的块中,pcapng 使用二进制标识予以区分,每种块类型有不同的二进制标识,对于提取RTSP 数据,应解析接口描述块和增强分组块。图2 是应用Python 语言对pcapng 的整体解包分析结果,可见pcapng 是由1 个节头块、1 个接口描述块和多个增强分组块构成的。
图2:pcapng 的整体解包分析结果
pcapng 的接口描述区块具有强制性。该区块用于指定网络接口的特性,以便进行捕获。接口描述块必须在使用它的其他任何块之前定义,以便将捕获的数据关联到相应的接口;因此,这个区块通常会紧随节点区块放置,如表2所示的界面描述区块的结构。
表2:接口描述块结构
接口描述块中,常用链路类型有LINKTYPE_ETHERNET、LINKTYPE_AX25 等,解析接口描述块的主要目的在于确认当前pcapng 包是否是D/I/X and 802.3 Ethernet 链路类型。应用Python 语言对接口描述块进行解析后的结果如图3所示,正确解析后可获得链路类型、设备名称、流量捕获过滤端口等信息。
图3:接口描述块解析结果
pcapng 的增强分组块是用来存储来自网络的数据报的标准容器,当前所有的抓包软件都优先采用增强分组块来存储数据,增强分组块的结构如表3所示,从网络中捕获的数据存储于Packet Data 字段中,其包括从链路层开始的完整的报头。
表3:增强分组块的结构
可以使用Python 语言对增强分组块进行解析,如图4所示,获得增强分组块的具体长度等信息,已定位H.264视频数据。
图4:增强分组块解析结果
TCP/IP 为4 层网络协议架构,分别为:链路层、网络层、传输层和应用层。链路层为TCP/IP 协议的最底层,其最靠近硬件链路,在封装上可以分为IEEE802.2/802.3 和RFC 894,其中RFC 894 广泛应用于以太网,具体格式如表4所示。
表4:RFC 894 封装结构
TCP/IP 链路层数据存储于pcapng 增强分组块的Packet Data 字段中,通过其结构可正确解析出目的MAC 地址、源MAC 地址,以及上层协议数据报,通过源MAC 地址、目的MAC 地址可以完成MAC 地址的过滤,图5 是应用Python 语言对TCP/IP 的链路层进行解析的结果。
图5:TCP/IP 链路层的解析结果
IP 协议是TCP/IP 协议簇中最核心的协议,处在网络层中,所有TCP、UDP、ICMP 和IGMP 协议的数据均以IP数据报格式传输,表5 为IP 协议的封装结构。
表5:IP 协议封装结构
解析链路层,通过标识0800 可以正确获取IP 协议,通过IP 协议封装结构可以解析出源IP 地址,目的IP 地址,以及上层协议数据报。IP 地址的过滤可以通过源IP 地址,目的IP 地址来完成。图6 是应用Python 语言解析TCP/IP协议的IP 协议的结果。
图6:TCP/IP 协议的IP 协议解析结果
TCP 协议是TCP/IP 协议簇中的传输层协议,其向应用层提供一种面向连接的、可靠的字节流服务,TCP 协议的封装结构如表6所示。
表6:TCP 协议封装结构
正确解析TCP 协议可以获取源端口号、目的端口号、序号和确认序号等信息,通过对序号和确认序号进行判别,可以正确获得数据报次序,以及掌握数据报的丢包情况和错误重传,图7 是TCP/IP 的TCP 协议的解析结果。
图7:TCP/IP 的TCP 协议解析结果
Interleaved Frame 称为交错帧,是RTSP 中的一种格式,文档[3]对其进行了具体的描述,它可以让RTSP 信息和流媒体数据交错使用,RTSP 应用TCP/IP 协议中传输层的TCP协议进行数据传输,通过解析TCP 协议可获得Interleaved Frame 数据,其封装结构如表7所示。
表7:RTSP Interleaved Frame 封装结构
正确解析RTSP Interleaved Frame 协议,可获得RTSP 的数据类型,判定后续存储的是视频数据,还是音频数据,以及数据的实际长度,图8 是RTSP Interleaved Frame 协议的解析结果。
图8:RTSP Interleaved Frame 协议的解析结果
RTSP Interleaved Frame 数据帧中包含RTP 数据,其带有不同数据编码的有效载荷,例如PCMU、H.264、MPEG 等,可以根据RTP 的封装结构对其进行解析,以获取实际的视频数据,RTP 的封装结构如表8所示。
表8:RTP 封装结构
图9 是应用Python 语言对RTP 协议进行解析的结果,从图中可以看出,当前数据报的有效数据载荷是H.264。
图9:RTP 协议的解析结果
正确解析RTP 协议可获得实际存储的视频数据,以及其有效载荷类型。对RTP 中的数据进行判断,向本地文件中存储有效载荷类型为H.264 的视频数据,即可得到网络上传输H.264视频压缩数据的数据流。对于存储后的数据,可通过PotPlayer、VLC media player 等播放器进行实时播放,如图10所示。
图10:视频数据的实时播放
基于论文所述方案实现的多点H.264视频显示终端相对于传统的视频显示终端技术,具有多点性、便捷性、高效性、过滤性和保密性等优点,为视频监控、传输、回放和显示等领域提供了一种高性能、可扩展的解决方案。采用本方案实现的视频显示终端已经在视频监控、视频会议、视频巡检等多种场合中,进行了实际应用,取得了较好的效果。