常用协议分析仪工具——Wireshark、TSP、Elecard
这几年做TS流分析,手边最离不开的就是这三件套。
很多人问我哪个工具最好用?
说实话,没有通吃的“神器”。
每个工具都有它最擅长的场景。
我习惯把它们比作:手术刀、瑞士军刀和显微镜。
全能分析手:Wireshark
Wireshark是结构分析的基础。几乎所有TS over IP的问题,我都会先在Wireshark里看一眼。
- 捕获过滤:抓UDP端口范围,比如
udp.port >= 1234 && udp.port <= 1240 - 显示过滤:精确到TS包类型,比如
ts.pid == 0x1011 - 协议解码:双击任意TS包,Wireshark会帮你拆开同步字节、调整字段、PCR等
我个人更习惯用显示过滤器来做第一轮排查。
捕获过滤器抓全量,显示过滤器切视角。
这在项目里特别实用——有一次排查用户投诉画面卡顿,我直接在Wireshark输入ts.pcr_pid,几秒钟就定位到PCR抖动源。
我的习惯:抓TS流时,先把Edit → Preferences → Protocols → MPEG2-TS里的“TCP reassembly”关掉。不然IP分片重组的假数据会误导分析。
专用利器:TSP(TSDuck的瑞士军刀)
说白了,TSP是个命令行工具。但别小看它。
我刚开始接触TS流时也觉得命令行太原始,后来发现——脚本化处理才是王道。
TSP的典型工作流我记在笔记里:
tsp -I ip 233.1.1.1:1234 \
-P analyze \
-P pcrbitrate \
-P continuity \
-O ip 233.1.1.2:1235
上面的命令干了四件事:
-I ip:从UDP接收TS流-P analyze:分析PAT/PMT结构-P pcrbitrate:统计PCR比特率-O ip:转发到另一个IP
嗯,这里要注意。
如果原始TS流的PCR间隔不标准,-P pcrbitrate会报“Discontinuity detected”错误。
这时候不要慌,查一下是不是多个PID的PCR交替写入——我在项目中遇到过,有些复用器会把PMT和视频PCR混在一个包。
TSP的-P continuity插件最适合排查这类问题。
TSP的隐藏价值:
- 可以写脚本批量压测TS流
- 自动生成PAT/PMT变更日志
- 离线重构完整TS文件:
tsp -I file input.ts -P until --packets 1000 -O file chop.ts
码流医生:Elecard StreamEye
Elecard跟前面两个不一样——它不分析网络层,只看码流层。
如果你手上有一台编码器输出的TS文件,用Elecard打开是最快的方式。
我印象最深的一件事:
有次客户抱怨高清频道在接收端花屏,Wireshark里查不到任何丢包或PCR异常。
用Elecard打开TS文件,一看:GOP结构里出现了I帧连续丢失。
原来编码器配置里GOP长度设成了250帧,但每小时有一次强制场景切换,编码器来不及插I帧。
Elecard的界面会告诉你:
- 每个帧的类型(I/B/P)
- 每个帧的比特消耗
- STD(系统目标解码器)缓冲区水位
避坑指南:我曾经因为只盯着Elecard的码率曲线图,漏掉了ES流中的PTS/DTS抖动。Elecard只看PSI/SI层还行,但PTS精度分析必须结合Wireshark一起看——两边的时间基不同,Wireshark显示的是系统时钟,Elecard显示的是PCR重建时钟。
三者的定位对比
| 工具 | 核心定位 | 界面 | TS深度解析 | 适用场景 |
|---|---|---|---|---|
| Wireshark | 通用协议分析 | GUI | 包结构+PCR+CC | 网络层排查、捕获过滤 |
| TSP | 命令行流水线 | CLI | PID处理+比特率+流编辑 | 自动化测试、批量压测 |
| Elecard | 码流可视化 | GUI | GOP/帧类型/STD水位 | 编码质量分析、画质问题 |
你想想看,这三个工具各管一摊,但只要组合使用,大部分问题都能在10分钟内定位。
实际项目中的用法:
- 先用TSP跑
-P analyze看全貌 - Wireshark查细节——比如PCR、CC序列
- Elecard做最后验证——看画面质量和编码结构
有一次现场调试,我在一个UDP端口上抓到TS流,TSP显示所有PID都正常,Wireshark里查PCR也没有大抖动。
但解码器就是无法锁住节目。
最后用Elecard逐帧查,发现节目参考时钟PCR_PID虽然正确,但它的PCR值间隔完全随机——每帧都重新插了一次PCR,频率超标几百倍。
这属于复用器固件bug,三个工具缺了一个都会漏掉这个点。
几句话总结:
- Wireshark先看有没有包
- TSP再看怎么组合
- Elecard最后看画面对不对