• Wireshark在多媒体开发中的使用


    一 概要:

    Wireshark(前称Ethereal)是一个网络抓包工具。 是一款非常棒的Unix和Windows上的开源 网络协议分析器。尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。在多媒体开发中,经常会用到wireshark进行辅助定位,定位的内容一般有码流正确性确认、码流回放、网络情况分析、帧率码率确认等。
    官网下载地址:https://www.wireshark.org/

    二 使用步骤:

    Wireshark有桌面版和命令行两种,通常在安卓、嵌入式等平台使用命令行方式进行抓包,然后在PC环境下进行包的分析

    2.1 桌面版

    a 开始界面

    image

    b 选择网卡

    wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡。
    image

    c 窗口介绍

    image

    d 填写过滤条件

    image

    协议过滤

    比如TCP,只显示TCP协议。
    rtsp,只显示rtsp协议。
    udp,只显示udp协议。
    rtp,只显示rtp协议。
    rtmpt,只显示rtmp协议。
    常用的还有sip、h225、h245等

    IP过滤

    比如 ip.src 192.168.1.102 显示源地址为192.168.1.102,
    ip.dst
    192.168.1.102, 目标地址为192.168.1.102
    ip.addr=192.168.1.102 表示部分源和目标,所有通过192.168.1.102的包都过滤

    端口过滤

    tcp.port ==80,  tcp端口为80的
    tcp.srcport == 80,  只显示TCP协议的源端口为80的。
    tcp.dstport == 80,  只显示TCP协议的目的端口为80的。
    udp.port ==80,  UDP端口为80的
    udp.srcport == 80,  只显示UDP协议的源端口为80的。
    udp.dstport == 80, 只显示UDP协议的目的端口为80的。

    逻辑运算符为 AND / OR / && / || / !

    例如ip.srcxx.xx.xx.xx && udp.port=xxxxx
    ! ip.src
    xx.xx.xx.xx 表示反过滤IP为xx.xx.xx.xx的数据包

    e 结果展示

    image

    2.2 命令行

    相对于桌面版本。命令行使用起来更为简单

    image

    a 选择网卡

    可以先用ifconfig\ipconfig命令查询网卡xxx ,然后tcpdump –i xxx ,这样会将抓包结果实时刷新到抓包界面,如果想将抓包文件保存可以使用-w参数tcpdump –i xxx –w /sdcard/xxx.pcap

    b 填写过滤条件

    tcpdump ip host xx.xx.xx.xx and ! yy.yy.yy.yy 过滤指定的ip
    tcpdump src port xx过滤指定的源端口

    三 Wireshark媒体码流解析:

    基于标准rtp的码流,底层传输协议为udp
    image
    抓到包之后一般会先根据ip或者端口过滤出要分析的数据流,
    image

    然后将过滤出来的udp转换成RTP

    注意:Wirshark是基于用户指定的格式去做翻译的,所以我们指定将udp转换成RTP时,前提是我们知道这个包确实是RTP码流,否则wireshark将翻译出很奇怪的包,该原则同样适用于将RTP转成h264或其他格式。
    image

    Decode as转码成h264,有时Wireshark会误将其他格式的RTP转成h264,但事实上并不是h264的码流,正如前边所说,Wireshark需要用户告诉他需要解成什么协议。如果出现解错的情况,可以通过payload的配置进行纠正。如下:
    编辑--首选项--protocols---找到要纠正的协议,填上正确的payload值。
    image

    四 示例

    4.1 Ts流

    udp--->decode as---->MP2T将udp流解析成TS流格式,然后可以将tS流中的音视频导出用播放器播放。

    如下图:电话-->rtp-->流分析-->save-->File synchronized Forward Stream Audio, 此时需要注意,需要把后缀名改成.raw,然后保存后再将后缀名改成.ts。
    image

    4.2 流量分析

    首先设置过滤条件,将要分析的码流过滤出来,然后将过滤出来的结果保存--导出特定分组,(否则分析的结果会不准),然后打开新的过滤过的流,点击统计--I/O图标,会分析出流量曲线,用户可以调整统计的时间粒度,已达到自己想要统计的目的。

    image
    image

    4.3 视频帧率统计

    Wireshark没有提供直接的帧率统计功能,但是可以通过过滤rtp.marker == 1(依据rtp标准)来将一帧的最后一个包作为过滤条件,也就是一帧的结束,过滤后需要码流保存导出特定分组,然后打开新的文件,就可以根据时间值看出一秒钟有多少帧了。

    4.4 丢包,乱序分析

    电话—>rtp-流分析
    然后可以可以根据序列的一列来确认是否有乱序和丢包。
    image

  • 相关阅读:
    SpringBoot 如何集成 MyBatisPlus
    【苹果】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
    mysql表的增删改查(进阶)
    初识c++
    PLC中ST编程的无符号数逻辑运算
    前端面试真题宝典(二)
    基于SpringBoot的新闻稿件管理系统
    Vite 5.0 新版本发布,看看有啥新变化?
    Redis的开发利用
    FFmpeg拉流教程
  • 原文地址:https://www.cnblogs.com/zuojie/p/17968892