=================================================================
音视频入门基础:MPEG2-PS专题系列文章:
音视频入门基础:MPEG2-PS专题(1)------MPEG2-PS官方文档下载
音视频入门基础:MPEG2-PS专题(2)------使用FFmpeg命令生成ps文件
音视频入门基础:MPEG2-PS专题(3)------MPEG2-PS格式简介
音视频入门基础:MPEG2-PS专题(4)------FFmpeg源码中,判断某文件是否为PS文件的实现
音视频入门基础:MPEG2-PS专题(5)------FFmpeg源码中,解析PS流中的PES流的实现
音视频入门基础:MPEG2-PS专题(6)------FFmpeg源码中,获取PS流的视频信息的实现
音视频入门基础:MPEG2-PS专题(7)------通过FFprobe显示PS流每个packet的信息
音视频入门基础:MPEG2-PS专题(8)------使用Wireshark分析GB28181的PS流
=================================================================
一、引言
按照《海康网络摄像机接入EasyGBS GB28181平台》中的方法,将支持GB28181的海康网络摄像机接入EasyGBS GB28181平台。如果国标传输协议的取流方式选择的是UDP:

那进行直播时,摄像机通过GB28181传输的音视频流的格式就是RTP封装的PS流:

二、Wireshark抓包分析
(一)SDP分析
对摄像机的数据进行抓包。以我使用的海康摄像机为例,首先分析SIP信令(INVITE)中携带的SDP。GB28181里面,SIP负责建立和释放会话,而媒体数据由SDP描述。SDP与SIP配合使用时会放到SIP协议的body中。会话建立时,需要通过SDP进行媒体协商,双方才能确定对方的媒体能力以及交换媒体的数据(关于SDP协议可以参考:《音视频入门基础:RTP专题(3)------SDP简介》)。选中SIP的INVITE方法,右键 -> "追踪流" -> "SIP Call":

可以看到映射PT值(payload type,有效载荷类型)为96的负载类型到PS(MPEG2-PS)编码,采样率为90000Hz。由《音视频入门基础:RTP专题(7)------RTP协议简介》可以知道,有效载荷标识符 96-127 用于会话期间动态定义的有效载荷。MPEG2-PS没有具体的PT值,只能使用动态(dynamic)PT值:

(二)RTP header分析
选中其中一个RTP数据包(RTP packet),下图红框中显示的就是其RTP header(关于RTP header的格式可以参考:《音视频入门基础:RTP专题(7)------RTP协议简介》)。可以看到该RTP数据包的RTP header的payload type值为96,为动态(dynamic)PT值。该值跟SDP描述中的PT值对应。所以可以确定其RTP payload中存放的是PS,即MPEG2-PS格式的数据:

(三)提取出PS裸流
GitHub - hongch911/WiresharkPlugin: The H265 H264 PS PCM AMR SILK plugin for Wireshark Lua 下载rtp_ps_assemble.lua和rtp_ps_export.lua。将这两个脚本放到Wireshark的plugins目录下:

重新打开Wireshark,可以看到"工具"菜单多了个"Video"选项。"工具" -> "Video" -> "Export PS":

Export All,然后点击"Browser":

可以看到生成了XXX.ps文件。该文件即为ps裸流文件:

该文件可以用vlc等播放器播放:

也可以用Elecard Stream Analyzer打开分析:
