作者:Philipp Hancke(原文链接)
翻译:刘通
科技产品随时都有可能出错,所以你就需要经常的调试它们。我最喜欢用的调试工具是Wireshark。在调试ICE和DTLS的时候Wireshark很有用,但是最近我要直接调试媒体数据。
解密变得简单
对于WebRTC来说,第一个挑战是获取未加密的RTP数据包。如果你写了一个像SFU一样的东西的话,可以帮助你解密媒体,然后事情就变得比较简单了。之后你可以将其转存成特定的格式,以便使用Wireshark进行分析。在浏览器领域里,Firefox最近添加了类似的功能,Nils Ohlmeier在这篇博文中写了它们的使用方法—我从这里学到了一个保留时间戳的小技巧。
其主旨是在日志中写下数据包的方向,时间戳,文本000000,以及数据包的内容。然后你就可以运行grep指令,然后将数据导至:
鲨鱼(Wireshark)咬住了VP8
现在,在用Wireshark打开文件之后,形式就变明朗了。如果你知道你的VP8负载类型(假设是100),你就可以用Wireshark将任意一个RTP数据包转化成与VP8数据包一样的类型。只要简单的像下图一样,在Edit -> Preferences中搜索VP8就可以了:
你会发现所有东西变得非常的棒。Wireshark将负载的描述符和其他东西都已经为你转化好了
我们可以看出这个数据包是一个关键帧,并且从T比特我们还看出数据流是使用临时可伸缩性发射的。当重写内容时,Picture ID是很有趣的东西,并且不连续性是bug的一种体现。
把这个夹心蛋糕吃掉(Eating the layer cake)
更令人兴奋的是,如果你进行同播并且在不同空间层之间做转换的话,我们知道大小的关键帧就变得唾手可得:
点开底端的payload部分,我们可以看到这个关键帧是来自低分辨率的320×180像素的同播流。Wireshark的筛选器很优秀,所以你甚至可以设定 “vp8.keyframe.height”来看到特定大小的关键帧在何时被发出。或者你可以筛选“vp8.pld.tid == 2”来只显示临时层2的数据包。你或许想要读一读Oscar这篇关于同播的博文,或者这篇Sergio和Gustavo描述VP9夹心蛋糕的文章。