nginx rtmp 包在wireshark中的体现
来源:互联网 发布:启明星bsc软件 编辑:程序博客网 时间:2024/06/01 08:38
nginx rtmp 包在wireshark中的体现
问题:今天在分析nginx发送rtmp包的时候,想通过wireshark抓包查看具体的信息。wireshark只能分析一整个video帧,不能分开解析rtmp包
如图:
图中第二个rtmp video包应该是I帧(第一个是sps),但是wireshark这里只合并成了一个包的信息,实际上:I帧应该分成N个rtmp包发送的。
下面找到每个包的起点:
nginx 默认设置的chunk_size 为4096,Tcp的分片大小为1460
那么I帧的发包理论上应该是:
但是nginx发送的时候,同一个帧的数据将会通过ngx_rtmp_append_shared_bufs 函数将帧的buf放到一个ngx_chain_t 的列表中如:4104+4097+4097+1528 四个包然后相继发送出去。但是由于tcp发包的限制每次只能发送1460个字节,所以曾现的现象就是4个rtmp包混合在一起。
拿#1包包分析:
在tcp发送上会分成4096+7+1 = 1460+1460+1184 三个包发送。
所以第二个rtmp包的起点就应该是: 第三个tcp包的data 数据 1185偏移开始
如图:
这需要减去tcp的header的长度。
总结: nginx rtmp 发送音视频都是一帧一帧的发, 如果一帧过大就通过拆包的形式放在chain中发送。wireshark 只会解析一整帧的rtmp数据包,而不会解析拆分的rtmp包(因为他们都混在一起了),只有接受方通过receive 每次接受的(size = min(memlen,chunk_size)),来接受整个帧的数据(header->memlen)。
- nginx rtmp 包在wireshark中的体现
- wireshark抓rtmp协议包
- RTMP在NGINX的启动
- 数据结构在游戏中的体现
- 异常在子父类中的体现
- chunk在nodejs中的体现
- wireshark抓包和lua语言,及RTMP协议解析
- 关于MVC在Rails中的体现
- 异常Exception 在VS2005 中的体现
- 继承和引用在buiw中的体现
- 设计模式在buiw中的体现
- “破窗理论”在编码中的体现
- Reactor模式及在DSS中的体现
- Reactor模式及在DSS中的体现
- C++函数重载在MFC中的体现
- 异常在子父类覆盖中的体现
- 异常在子父类中的覆盖体现
- 异常在子父类覆盖中的体现
- cvpr2015的face Alignment 文章笔记
- 设计模式之单例模式 最快入门
- 【JavaScript】又一神器框架:linq.js
- C++中的类所占内存空间总结
- 【模板】最近公共祖先(LCA)
- nginx rtmp 包在wireshark中的体现
- python 编程从入门到实践11章 测试代码 11.2测试类11.2.2 修改
- Hessian 源码简单分析
- Android SystemProperties
- 在linux服务器上安装Gradle
- spring添加定时任务
- POJ
- 2.html结构和sublime快捷键
- 图像识别框架