分析手机直播端的RTMP包

前言

最近要分析手机直播采集端(手机编码,然后传输码流给服务器)的数据,学习了如何使用WireShark(一款免费闭源的截取网络包工具)。

情景

手机采集视频并编码后封装,然后用RTMP协议传输码流到服务器。

收集数据

对手机(Android)网络数据的收集,找到有2种可行的方法:

  • 一种方法是在adb shell里运行tcpdump,将收集好的网络信息存储,然后传回电脑用WireShark分析;
  • 一种方法是让手机连接一个USB网卡wifi(我用的是360随身wifi),然后在电脑上用WireShark分析这个USB网卡的网络包。

分析到网络包后,我们过滤出RTMPT协议的包,RTMP有header和body,body里有我们需要的码流。假设我们要分析的码流是H.264/AVC码流,RTMP body里的内容就是AVCVIDEOPACKET。

AVCVIDEOPACKET

其中,AVCDecoderConfigurationRecord里的格式是如图。我们读取出其中的SPS数据,用HxD编辑器在SPS前加入H.264起始码00 00 00 01后,就可以用264解码器解SPS了,我是用了一个264码流分析器。读取SPS后就能获取到码流宽度和高度了。

AVCDecoderConfigurationRecord

当然在RTMP协议里有时候会明确写出码流的一些信息,但如果写错误的信息也是没有任何影响的,所以还是自己分析SPS靠谱。

至于fps bitrate这些信息,就只好手动分析了。

fps是分析1s内传输的VideoData个数,比如从某个pts开始数,到某个pts时,中间的videoData个数,除以pts代表的秒数,就是FPS了。

bitrate则是统计一个RTMP body的大小,累加起来,在除以秒数,就是码率了。

Loading Disqus comments...
Table of Contents