python工具-解析wireshark的rtp抓包

RTP抓包工具——抓包分析工具wireshark提取视频数据之RTP包中提取H264和H265 RTP抓包工具调研任务:1 RTP流生成方法2 抓包工具试用RTP流的生成:其中,v4l2src是摄像头的视频源,video/x-raw是视频格式,x264enc是视频编码器,rtph264pay是将H.264编码的视频打包成RTP包的元素,udpsink是将RTP包发送到指定的IP地址和端口号的元素Wireshark 抓包分析 RTSP/RTP。 阅读详情

python工具-解析wireshark的rtp抓包

抓包

将 rtp 包数据,使用 python 解析,然后根据需要,再进一步分析

  • 使用 tcpdump 或 wireshark 抓 rtp 包
  • 过滤 rtp 包,然后 ctrl+A 全选, ctrl+C 复制, ctrl+V 粘贴,得到下边这样内容的文件
2777	2023-10-11 18:13:39.870534	34.203.218.59	10.221.136.184	RTP	230	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6140, Time=2892404731
2780	2023-10-11 18:13:39.870724	34.203.218.59	192.168.68.165	RTP	226	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6140, Time=2892404731
2781	2023-10-11 18:13:39.874006	192.168.68.165	34.203.218.59	RTP	84	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=0, Time=140163930
2789	2023-10-11 18:13:39.876967	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=2, Time=140163930[Malformed Packet]
2797	2023-10-11 18:13:39.877428	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=4, Time=140163930
2833	2023-10-11 18:13:39.886494	192.168.68.165	34.203.218.59	RTP	259	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=12, Time=140163930, Mark[Malformed Packet]
2837	2023-10-11 18:13:39.886700	192.168.68.165	34.203.218.59	RTP	160	PT=DynamicRTP-Type-96, SSRC=0x1891074E, Seq=0, Time=74781072, Mark
2841	2023-10-11 18:13:39.887322	192.168.68.165	34.203.218.59	RTP	604	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=13, Time=140168430, Mark[Malformed Packet]
2845	2023-10-11 18:13:39.891111	34.203.218.59	10.221.136.184	RTP	230	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6141, Time=2892405691
2849	2023-10-11 18:13:39.892721	192.168.68.165	34.203.218.59	RTP	160	PT=DynamicRTP-Type-96, SSRC=0x1891074E, Seq=1, Time=74781072, Mark
2853	2023-10-11 18:13:39.893076	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=14, Time=140172930
2857	2023-10-11 18:13:39.893225	192.168.68.165	34.203.218.59	RTP	765	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=15, Time=140172930, Mark
2861	2023-10-11 18:13:39.900053	192.168.68.165	34.203.218.59	RTP	1197	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=16, Time=140177430, Mark
2865	2023-10-11 18:13:39.912624	34.203.218.59	10.221.136.184	RTP	230	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6142, Time=2892406651
2869	2023-10-11 18:13:39.914207	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=17, Time=140181930
2881	2023-10-11 18:13:39.914877	192.168.68.165	34.203.218.59	RTP	364	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=20, Time=140181930, Mark[Malformed Packet]
2887	2023-10-11 18:13:39.933842	34.203.218.59	10.221.136.184	RTP	230	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6143, Time=2892407611
2891	2023-10-11 18:13:39.950241	192.168.68.165	34.203.218.59	RTP	752	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=21, Time=140186430, Mark[Malformed Packet]
2895	2023-10-11 18:13:39.950409	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=22, Time=140190930
2899	2023-10-11 18:13:39.950592	192.168.68.165	34.203.218.59	RTP	121	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=23, Time=140190930, Mark[Malformed Packet]
2903	2023-10-11 18:13:39.950805	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=24, Time=140195430
2907	2023-10-11 18:13:39.951002	192.168.68.165	34.203.218.59	RTP	643	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=25, Time=140195430, Mark

代码

import sys
import os
import re
from datetime import datetime

# 定义 rtp 结构
class rtp_info:
    def __init__(self) -> None:
        self.seq = -1
        self.ts = 0  # timestamp
        self.st = None  # send time
        self.ssrc = ""
        self.pt = 0
        self.src_ip = None
        self.dst_ip = None
        self.len = 0
        self.protocol=""
        self.no=""

    def __str__(self):
        return f"seq: {self.seq}" \
        + f", ts: {self.ts}" \
        + f", st: {self.st}" \
        + f", ssrc: {self.ssrc}" \
        + f", pt: {self.pt}" \
        + f", src_ip: {self.src_ip}" \
        + f", dst_ip: {self.dst_ip}" \
        + f", len: {self.len}" \
        + f", protocol: {self.protocol}" \
        + f", no: {self.no}"

    def is_valid(self):
        if self.seq >= 0 and self.ts >= 0 and self.ssrc != "" and self.pt >= 0 and self.src_ip != "" and \
            self.dst_ip != "" and self.len > 0:
            return True
        return False

    def is_same_stream(self, info):
        if self.ssrc == info.ssrc and self.src_ip == info.src_ip and self.dst_ip == info.dst_ip and self.pt == info.pt:
            return True
        return False

# 构造 rtp 结构
def gen_rtp_info(linebits):
    info = rtp_info()
    info.seq = int(linebits["seq"])
    info.ts = int(linebits["time"])
    info.st = datetime.strptime(linebits["stime"], "%Y-%m-%d %H:%M:%S.%f")
    info.ssrc = linebits["ssrc"]
    info.pt = int(linebits["pt"])
    info.src_ip = linebits["src_ip"]
    info.dst_ip = linebits["dst_ip"]
    info.len = int(linebits["len"])
    info.protocol = linebits["protocol"]
    info.no = linebits["no"]
    if info.is_valid():
        return info
    return None

# 解析 rtp 数据
def get_cap_info(file_path):
    infos = []  # seq,time,datas
    line_count = 0
    for line in open(file_path): 
        line_count += 1
        # No.   Time                        Source          Destination     Protocol
        #                                                                       length  Info
        # 6309	2023-10-11 10:55:03.049429	192.168.68.34	54.197.199.30	RTP	1264	PT=DynamicRTP-Type-99, SSRC=0x4AF40405, Seq=913, Time=4447350
        # ([0-9]+)\t(.*\.[0-9]{6})\t(.*)\t(.*)\t(.*)\t([0-9]+)\tPT=DynamicRTP-Type-([0-9]+), SSRC=(.*), Seq=([0-9]+), Time=([0-9]+).*
        reg = re.compile('(?P<no>[0-9]+)\t(?P<stime>.*\.[0-9]{6})\t(?P<src_ip>.*)\t(?P<dst_ip>.*)\t(?P<protocol>.*)\t(?P<len>[0-9]+)\tPT=DynamicRTP-Type-(?P<pt>[0-9]+), SSRC=(?P<ssrc>.*), Seq=(?P<seq>[0-9]+), Time=(?P<time>[0-9]+).*')
        regMatch = reg.match(line)
        if regMatch:
            linebits = regMatch.groupdict()
            info = gen_rtp_info(linebits)
            if info != None:
                infos.append(info)
            else:
                print(f"not right rtp: {line}")
        else:
            print(f"not filter: {line}", end="")
    return infos

# asset 分组正确
def assert_same_stream(infos):
    if len(infos) == 1:
        return
    for info in infos:
        if ~info.is_same_stream(infos[0]):
            assert("is not stream")

# 按照指定字段对 rtp 进行分组,默认是按照 pt 分组,也可以指定为 ssrc
def filter_rtp(infos, pt=True, ssrc=None, protocol=None):
    result = {}
    for info in infos:
        key = info.pt
        if ssrc:
            key = info.ssrc
        elif protocol:
            key = info.protocol
        if key in result:
            result[key].append(info)
        else:
            result[key] = [info]

    for k,v in result.items():
        print(f"check pt: {k}")
        assert_same_stream(v)
    
    return result

# 获取抓包数据
def get_cap_data(file_path):
    infos = get_cap_info(file_path)
    print(len(infos))
    if len(infos) < 2:
        print("only have one item data")
        return

    result = filter_rtp(infos)
    for k,v in result.items():
        print(f"==========================: {k}, {len(v)}")
        # for val in v:
        #     print(val)

    result = filter_rtp(infos, ssrc=True)
    for k,v in result.items():
        print(f"==========================: {k}, {len(v)}")
    
    result = filter_rtp(infos, protocol=True)
    for k,v in result.items():
        print(f"==========================: {k}, {len(v)}")

if __name__ == "__main__":
    cur_path = os.path.dirname(os.path.realpath(__file__))
    for file_path in sys.argv[1:]:
        print(f"======= {file_path} ==========")
        get_cap_data(os.path.join(cur_path, file_path))

执行结果

>> python3 parse-rtp.py rtp.data
======= rtp.data ==========
not filter: 575 2023-10-12 13:37:56.931789      192.168.68.34   18.234.241.117  MPEG-1  1264    MPEG-1 message
not filter: 590 2023-10-12 13:37:56.962260      192.168.68.34   18.234.241.117  JPEG    1264    JPEG message
not filter: 598 2023-10-12 13:37:56.975779      192.168.68.34   18.234.241.117  MPEG-1  1264    MPEG-1 message[Malformed Packet]
not filter: 1581        2023-10-12 13:38:02.594095      192.168.68.34   18.234.241.117  MPEG TS 1264    Scrambled TS payload[Malformed Packet]
not filter: 1571        2023-10-12 13:38:02.562176      192.168.68.34   18.234.241.117  MPEG TS 1264    Scrambled TS payload
not filter: 1637        2023-10-12 13:38:03.107120      192.168.68.34   18.234.241.117  RTP EVENT       1264    Payload type=RTP Event, DTMF Eight 8
not filter: 1701        2023-10-12 13:38:03.650000      192.168.68.34   18.234.241.117  RTP EVENT       1264    Payload type=RTP Event, DTMF D
not filter: 1706        2023-10-12 13:38:03.667186      192.168.68.34   18.234.241.117  H.261   1264    H.261 message
102
check pt: 96
check pt: 99
==========================: 96, 22
==========================: 99, 80
check pt: 0x211ADEDA
check pt: 0x587068D1
check pt: 0x1891074E
check pt: 0x6246AE6A
==========================: 0x211ADEDA, 16
==========================: 0x587068D1, 78
==========================: 0x1891074E, 6
==========================: 0x6246AE6A, 2
check pt: RTP
check pt: G.723.1
==========================: RTP, 100
==========================: G.723.1, 2

rtp.data 内容如下

2777	2023-10-11 18:13:39.870534	34.203.218.59	10.221.136.184	RTP	230	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6140, Time=2892404731
2778	2023-10-11 18:13:39.870534	34.203.218.59	10.221.136.184	RTP	226	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6140, Time=2892404731
2779	2023-10-11 18:13:39.870694	34.203.218.59	192.168.68.165	RTP	226	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6140, Time=2892404731
2780	2023-10-11 18:13:39.870724	34.203.218.59	192.168.68.165	RTP	226	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6140, Time=2892404731
2781	2023-10-11 18:13:39.874006	192.168.68.165	34.203.218.59	RTP	84	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=0, Time=140163930
2782	2023-10-11 18:13:39.874006	192.168.68.165	34.203.218.59	RTP	84	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=0, Time=140163930
2783	2023-10-11 18:13:39.874272	10.221.136.184	34.203.218.59	RTP	84	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=0, Time=140163930
2785	2023-10-11 18:13:39.874382	192.168.68.165	34.203.218.59	RTP	70	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=1, Time=140163930
2786	2023-10-11 18:13:39.874382	192.168.68.165	34.203.218.59	RTP	70	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=1, Time=140163930
2787	2023-10-11 18:13:39.874515	10.221.136.184	34.203.218.59	RTP	70	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=1, Time=140163930
2789	2023-10-11 18:13:39.876967	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=2, Time=140163930[Malformed Packet]
2790	2023-10-11 18:13:39.876967	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=2, Time=140163930[Malformed Packet]
2791	2023-10-11 18:13:39.877059	10.221.136.184	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=2, Time=140163930[Malformed Packet]
2793	2023-10-11 18:13:39.877265	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=3, Time=140163930[Malformed Packet]
2794	2023-10-11 18:13:39.877265	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=3, Time=140163930[Malformed Packet]
2795	2023-10-11 18:13:39.877378	10.221.136.184	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=3, Time=140163930[Malformed Packet]
2797	2023-10-11 18:13:39.877428	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=4, Time=140163930
2798	2023-10-11 18:13:39.877428	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=4, Time=140163930
2799	2023-10-11 18:13:39.877494	10.221.136.184	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=4, Time=140163930
2801	2023-10-11 18:13:39.880152	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=5, Time=140163930
2802	2023-10-11 18:13:39.880152	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=5, Time=140163930
2803	2023-10-11 18:13:39.880370	10.221.136.184	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=5, Time=140163930
2805	2023-10-11 18:13:39.880445	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=6, Time=140163930
2806	2023-10-11 18:13:39.880445	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=6, Time=140163930
2807	2023-10-11 18:13:39.880523	10.221.136.184	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=6, Time=140163930
2813	2023-10-11 18:13:39.884747	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=7, Time=140163930
2814	2023-10-11 18:13:39.884747	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=7, Time=140163930
2815	2023-10-11 18:13:39.884930	10.221.136.184	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=7, Time=140163930
2817	2023-10-11 18:13:39.885123	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=8, Time=140163930
2818	2023-10-11 18:13:39.885123	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=8, Time=140163930
2819	2023-10-11 18:13:39.885262	10.221.136.184	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=8, Time=140163930
2821	2023-10-11 18:13:39.885525	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=9, Time=140163930
2822	2023-10-11 18:13:39.885525	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=9, Time=140163930
2823	2023-10-11 18:13:39.885630	10.221.136.184	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=9, Time=140163930
2825	2023-10-11 18:13:39.885880	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=10, Time=140163930
2826	2023-10-11 18:13:39.885880	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=10, Time=140163930
2827	2023-10-11 18:13:39.885966	10.221.136.184	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=10, Time=140163930
2829	2023-10-11 18:13:39.886283	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=11, Time=140163930[Malformed Packet]
2830	2023-10-11 18:13:39.886283	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=11, Time=140163930[Malformed Packet]
2831	2023-10-11 18:13:39.886420	10.221.136.184	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=11, Time=140163930[Malformed Packet]
2833	2023-10-11 18:13:39.886494	192.168.68.165	34.203.218.59	RTP	259	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=12, Time=140163930, Mark[Malformed Packet]
2834	2023-10-11 18:13:39.886494	192.168.68.165	34.203.218.59	RTP	259	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=12, Time=140163930, Mark[Malformed Packet]
2835	2023-10-11 18:13:39.886646	10.221.136.184	34.203.218.59	RTP	259	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=12, Time=140163930, Mark[Malformed Packet]
2837	2023-10-11 18:13:39.886700	192.168.68.165	34.203.218.59	RTP	160	PT=DynamicRTP-Type-96, SSRC=0x1891074E, Seq=0, Time=74781072, Mark
2838	2023-10-11 18:13:39.886700	192.168.68.165	34.203.218.59	RTP	160	PT=DynamicRTP-Type-96, SSRC=0x1891074E, Seq=0, Time=74781072, Mark
2839	2023-10-11 18:13:39.886754	10.221.136.184	34.203.218.59	RTP	160	PT=DynamicRTP-Type-96, SSRC=0x1891074E, Seq=0, Time=74781072, Mark
2841	2023-10-11 18:13:39.887322	192.168.68.165	34.203.218.59	RTP	604	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=13, Time=140168430, Mark[Malformed Packet]
2842	2023-10-11 18:13:39.887322	192.168.68.165	34.203.218.59	RTP	604	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=13, Time=140168430, Mark[Malformed Packet]
2843	2023-10-11 18:13:39.887411	10.221.136.184	34.203.218.59	RTP	604	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=13, Time=140168430, Mark[Malformed Packet]
2845	2023-10-11 18:13:39.891111	34.203.218.59	10.221.136.184	RTP	230	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6141, Time=2892405691
2846	2023-10-11 18:13:39.891111	34.203.218.59	10.221.136.184	RTP	226	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6141, Time=2892405691
2847	2023-10-11 18:13:39.891159	34.203.218.59	192.168.68.165	RTP	226	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6141, Time=2892405691
2848	2023-10-11 18:13:39.891183	34.203.218.59	192.168.68.165	RTP	226	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6141, Time=2892405691
2849	2023-10-11 18:13:39.892721	192.168.68.165	34.203.218.59	RTP	160	PT=DynamicRTP-Type-96, SSRC=0x1891074E, Seq=1, Time=74781072, Mark
2850	2023-10-11 18:13:39.892721	192.168.68.165	34.203.218.59	RTP	160	PT=DynamicRTP-Type-96, SSRC=0x1891074E, Seq=1, Time=74781072, Mark
2851	2023-10-11 18:13:39.892926	10.221.136.184	34.203.218.59	RTP	160	PT=DynamicRTP-Type-96, SSRC=0x1891074E, Seq=1, Time=74781072, Mark
2853	2023-10-11 18:13:39.893076	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=14, Time=140172930
2854	2023-10-11 18:13:39.893076	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=14, Time=140172930
2855	2023-10-11 18:13:39.893174	10.221.136.184	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=14, Time=140172930
2857	2023-10-11 18:13:39.893225	192.168.68.165	34.203.218.59	RTP	765	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=15, Time=140172930, Mark
2858	2023-10-11 18:13:39.893225	192.168.68.165	34.203.218.59	RTP	765	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=15, Time=140172930, Mark
2859	2023-10-11 18:13:39.893290	10.221.136.184	34.203.218.59	RTP	765	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=15, Time=140172930, Mark
2861	2023-10-11 18:13:39.900053	192.168.68.165	34.203.218.59	RTP	1197	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=16, Time=140177430, Mark
2862	2023-10-11 18:13:39.900053	192.168.68.165	34.203.218.59	RTP	1197	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=16, Time=140177430, Mark
2863	2023-10-11 18:13:39.900228	10.221.136.184	34.203.218.59	RTP	1197	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=16, Time=140177430, Mark
2865	2023-10-11 18:13:39.912624	34.203.218.59	10.221.136.184	RTP	230	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6142, Time=2892406651
2866	2023-10-11 18:13:39.912624	34.203.218.59	10.221.136.184	RTP	226	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6142, Time=2892406651
2867	2023-10-11 18:13:39.912740	34.203.218.59	192.168.68.165	RTP	226	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6142, Time=2892406651
2868	2023-10-11 18:13:39.912769	34.203.218.59	192.168.68.165	RTP	226	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6142, Time=2892406651
2869	2023-10-11 18:13:39.914207	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=17, Time=140181930
2870	2023-10-11 18:13:39.914207	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=17, Time=140181930
2871	2023-10-11 18:13:39.914403	10.221.136.184	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=17, Time=140181930
2873	2023-10-11 18:13:39.914512	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=18, Time=140181930
2874	2023-10-11 18:13:39.914512	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=18, Time=140181930
2875	2023-10-11 18:13:39.914628	10.221.136.184	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=18, Time=140181930
2877	2023-10-11 18:13:39.914737	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=19, Time=140181930
2878	2023-10-11 18:13:39.914737	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=19, Time=140181930
2879	2023-10-11 18:13:39.914827	10.221.136.184	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=19, Time=140181930
2881	2023-10-11 18:13:39.914877	192.168.68.165	34.203.218.59	RTP	364	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=20, Time=140181930, Mark[Malformed Packet]
2882	2023-10-11 18:13:39.914877	192.168.68.165	34.203.218.59	RTP	364	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=20, Time=140181930, Mark[Malformed Packet]
2883	2023-10-11 18:13:39.915050	10.221.136.184	34.203.218.59	RTP	364	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=20, Time=140181930, Mark[Malformed Packet]
2887	2023-10-11 18:13:39.933842	34.203.218.59	10.221.136.184	RTP	230	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6143, Time=2892407611
2888	2023-10-11 18:13:39.933842	34.203.218.59	10.221.136.184	RTP	226	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6143, Time=2892407611
2889	2023-10-11 18:13:39.933946	34.203.218.59	192.168.68.165	RTP	226	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6143, Time=2892407611
2890	2023-10-11 18:13:39.933978	34.203.218.59	192.168.68.165	RTP	226	PT=DynamicRTP-Type-96, SSRC=0x211ADEDA, Seq=6143, Time=2892407611
2891	2023-10-11 18:13:39.950241	192.168.68.165	34.203.218.59	RTP	752	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=21, Time=140186430, Mark[Malformed Packet]
2892	2023-10-11 18:13:39.950241	192.168.68.165	34.203.218.59	RTP	752	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=21, Time=140186430, Mark[Malformed Packet]
2893	2023-10-11 18:13:39.950355	10.221.136.184	34.203.218.59	RTP	752	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=21, Time=140186430, Mark[Malformed Packet]
2895	2023-10-11 18:13:39.950409	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=22, Time=140190930
2896	2023-10-11 18:13:39.950409	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=22, Time=140190930
2897	2023-10-11 18:13:39.950519	10.221.136.184	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=22, Time=140190930
2899	2023-10-11 18:13:39.950592	192.168.68.165	34.203.218.59	RTP	121	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=23, Time=140190930, Mark[Malformed Packet]
2900	2023-10-11 18:13:39.950592	192.168.68.165	34.203.218.59	RTP	121	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=23, Time=140190930, Mark[Malformed Packet]
2901	2023-10-11 18:13:39.950727	10.221.136.184	34.203.218.59	RTP	121	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=23, Time=140190930, Mark[Malformed Packet]
2903	2023-10-11 18:13:39.950805	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=24, Time=140195430
2904	2023-10-11 18:13:39.950805	192.168.68.165	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=24, Time=140195430
2905	2023-10-11 18:13:39.950925	10.221.136.184	34.203.218.59	RTP	1266	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=24, Time=140195430
2907	2023-10-11 18:13:39.951002	192.168.68.165	34.203.218.59	RTP	643	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=25, Time=140195430, Mark
2908	2023-10-11 18:13:39.951002	192.168.68.165	34.203.218.59	RTP	643	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=25, Time=140195430, Mark
2909	2023-10-11 18:13:39.951148	10.221.136.184	34.203.218.59	RTP	643	PT=DynamicRTP-Type-99, SSRC=0x587068D1, Seq=25, Time=140195430, Mark
575	2023-10-12 13:37:56.931789	192.168.68.34	18.234.241.117	MPEG-1	1264	MPEG-1 message
590	2023-10-12 13:37:56.962260	192.168.68.34	18.234.241.117	JPEG	1264	JPEG message
598	2023-10-12 13:37:56.975779	192.168.68.34	18.234.241.117	MPEG-1	1264	MPEG-1 message[Malformed Packet]
1581	2023-10-12 13:38:02.594095	192.168.68.34	18.234.241.117	MPEG TS	1264	Scrambled TS payload[Malformed Packet]
1571	2023-10-12 13:38:02.562176	192.168.68.34	18.234.241.117	MPEG TS	1264	Scrambled TS payload
1637	2023-10-12 13:38:03.107120	192.168.68.34	18.234.241.117	RTP EVENT	1264	Payload type=RTP Event, DTMF Eight 8
1701	2023-10-12 13:38:03.650000	192.168.68.34	18.234.241.117	RTP EVENT	1264	Payload type=RTP Event, DTMF D
1702	2023-10-12 13:38:03.651116	192.168.68.34	18.234.241.117	G.723.1	1264	PT=DynamicRTP-Type-99, SSRC=0x6246AE6A, Seq=525, Time=2203470
1706	2023-10-12 13:38:03.667186	192.168.68.34	18.234.241.117	H.261	1264	H.261 message
3201	2023-10-12 13:38:14.011646	192.168.68.34	18.234.241.117	G.723.1	1264	PT=DynamicRTP-Type-99, SSRC=0x6246AE6A, Seq=1092, Time=3139559
从SPS/PPS到NALU:手把手解析H264码流中的关键帧结构 本文深入解析H264码流中的关键帧结构,从SPS/PPS到NALU的详细拆解,帮助开发者掌握音视频编解码的核心技术。通过Wireshark实战案例和Python代码示例,演示如何识别和重组NALU,解决常见的视频传输问题,提升音视频处理能力。 阅读详情

相关推荐

Wireshark抓包解析RTP流实战:从网络报文到H.264视频播放

实时流媒体传输是音视频通信、网络监控和多媒体开发的核心技术领域,其底层依赖于RTP(Real-time Transport Protocol)协议进行数据封装与传输。理解RTP协议的原理,对于排查直播卡顿、视频花屏等实际问题具有关键价值。通过抓包分析,可以透视数据包的序列号、负载类型及时间戳同步等细节,从而精准定位网络传输问题。在工程实践中,结合Wireshark这一网络协议分析工具,能够高效捕获并解析RTP流,提取其中的H.264视频数据。H.264作为主流的视频编码标准,其NAL单元结构(包括SPS、P

ciya3282的博客 295

RTP有效负载(载荷)类型,RTP Payload Type

PTEncoding NameAudio/Video (A/V)Clock Rate (Hz)ChannelsReference0PCMUA80001[RFC3551]1Reserved2Reserved3GSMA80001[RFC3551]4G723A80001[Vineet_Kumar][RFC3551]5DVI4A80001[RFC3551]6DVI4A16000...

草上爬的博客 4万+

RTP/RTCP 协议抓包实战:Wireshark 解析 12 字节头部与 H.264 负载

本文深入解析RTP/RTCP协议,通过Wireshark实战演示如何抓包分析12字节头部与H.264负载。从协议架构到H.264封装模式,再到典型问题诊断,提供完整的实时传输协议分析指南,帮助开发者快速定位音视频传输问题。

weixin_30698527的博客 364

IPTV抓包工具合集:Wireshark、parse_cap_channels_v2、IPTV全能工具箱

分享一个刚刚大佬那里转存过来的IPTV工具箱v5.2版本。先叠个甲,这仅仅是一个单纯的源检测和管理工具分享,不包含任何IPTV源地址,也不涉及任何违规。不需要你自己有服务器,也不用去折腾复杂的Docker容器、PHP环境或者Python脚本,下载解压就能运行,真正的开箱即用。如果版主认为违规请直接删帖。另外昨天找到了一些工具和。

m0_46624389的博客 698

Wireshark实战:深度解析RTP协议与音视频流质量分析

实时传输协议(RTP)是音视频通信和流媒体传输的核心协议,它定义了在IP网络上传输音频和视频等实时数据的封装格式和时序信息。其工作原理基于UDP,通过序列号、时间戳、同步源标识符等头部字段,为接收端提供数据包排序、同步和丢包检测能力。掌握RTP协议分析对于保障音视频服务质量至关重要,它能帮助开发者从网络层面精准定位卡顿、花屏、无声等问题的根源。在实际的工程实践中,网络抓包与分析是排查此类问题的关键手段。通过专业的网络协议分析工具,工程师可以深入洞察RTP流的传输细节,评估网络抖动、丢包率等关键指标,从而优化

weixin_30814329的博客 452

Wireshark RTP协议分析实战:解码音频通话质量与网络问题排查

在实时音视频通信领域,RTP(实时传输协议)是承载音频流的核心网络协议,它运行在UDP之上,通过序列号、时间戳等关键字段管理数据包的顺序和时序。理解RTP协议原理是进行音质评估的基础,其核心价值在于能够量化网络传输对音频质量的影响,例如通过分析丢包和抖动来定位卡顿、杂音等问题的根源。这一技术广泛应用于音视频开发、运维和QA测试等场景,帮助工程师从网络报文层面精准诊断音质问题。本文聚焦于利用Wireshark这一抓包工具,结合RTP协议分析,提供一套从捕获、解码到量化评估音频流质量的完整实战方法,并深入探讨如

weixin_33672109的博客 486

Wireshark网络协议分析工具:从入门到实战

网络协议分析是网络工程师和开发人员必备的核心技能之一,它能够帮助诊断网络故障、优化性能并保障安全。Wireshark作为最主流的开源网络协议分析工具,支持超过2000种协议的深度解码,包括TCP/IP、HTTP等常见协议以及Modbus、IEC61850等工业协议。其跨平台特性(Windows、Linux、macOS)和丰富的分析功能集(流量统计、会话重组、IO图表等)使其成为网络分析的瑞士军刀。通过Wireshark,工程师可以精确分析DNS解析延迟、TCP连接问题或HTTP响应异常,从而快速定位网络性能

weixin_33617691的博客 201

别再死记硬背了!用Wireshark抓包实战,5分钟搞懂RTP打包H264的三种模式(附避坑指南)

本文通过Wireshark抓包实战,详细解析RTP打包H264的三种模式(单一NALU、STAP-A、FU-A),帮助开发者快速掌握视频传输协议的核心技术。文章包含实验环境搭建、关键字段解析、避坑指南及实用调试技巧,适合网络工程师和视频开发人员学习参考。

weixin_30820077的博客 350

ONVIF协议验证测试与Wireshark实战指南

网络视频接口标准ONVIF是安防监控领域实现设备互联互通的关键协议,其核心价值在于解决多厂商设备的互操作问题。协议分析工具Wireshark作为网络诊断的事实标准,支持2000多种协议的深度解析,通过实时抓包和自定义过滤规则,可有效验证ONVIF协议的WS-Discovery、能力协商等关键流程。在视频监控系统集成中,ONVIF协议测试能发现约35%的兼容性问题,特别是设备发现阶段的时钟同步异常。本文结合Wireshark抓包技巧和ONVIF测试矩阵,详细展示从基础环境搭建到高级故障排查的全套工程实践方案。

weixin_34245749的博客 365

RTP编程】使用Python实现基于实时传输协议的音视频传输

我们使用了python-rtp库来处理RTP数据包的封装、解析和发送,以及UDP套接字来进行数据包的发送和接收。在这个函数中,我们首先绑定接收端口,然后进入一个无限循环,不断接收RTP数据包。在这个函数中,我们首先将数据包封装为RTP数据包对象,然后设置序列号和时间戳,最后将RTP数据包通过UDP套接字发送到目标地址。最后,我们编写了一个主函数来调用发送和接收函数,实现了一个简单的基于RTP的音视频传输程序。在主函数中,我们首先调用发送RTP数据包的函数,然后调用接收RTP数据包的函数。

CodeNexus的博客 1829

【RTCP】malformed packet

malformed packet

突围 1265

别再死记硬背了!用Wireshark抓包实战,5分钟搞懂RTP打包H264的三种模式

本文通过Wireshark抓包实战,详细解析RTP打包H264的三种模式:单一NALU、STAP-A组合包和FU-A分片模式。从实验环境搭建到具体数据包分析,帮助读者快速掌握H264视频流的封装原理与调试技巧,告别枯燥的理论背诵。

weixin_30897079的博客 327

Wireshark深度解析RTP丢包率:从统计值到业务根因

RTP丢包率是音视频通信质量评估的核心指标,其本质是基于序列号连续性推演的网络传输完整性度量。Wireshark通过解析RTP头中的sequence number、timestamp和SSRC字段,在滑动窗口内计算预期与实际包数之差,但该结果受wraparound处理、RTCP干扰、本地socket丢弃等多因素影响。真正具备工程价值的丢包分析,必须结合时间轴切片、抖动(jitter)与端到端时延协同研判——例如高丢包+高jitter指向网络拥塞,而高丢包+低时延则提示终端侧编码或驱动异常。本文聚焦Wires

weixin_34295316的博客 379

RTP扩展头深度解析:从RFC 5285到Wireshark抓包实战

实时音视频传输中,RTP协议是承载媒体数据的核心。然而,固定的12字节RTP头不足以传递音频级别、拥塞反馈、帧标记等动态元数据。RTP扩展头(Header Extension)通过X标志位和可协商的容器结构,在包头与负载之间灵活携带辅助信息。RFC 5285定义了One-Byte/Two-Byte编码,使多个扩展元素能够在一个RTP包中共存,并可通过SIP/SDP或WebRTC协商语义。这一机制解决了跨设备互通中的延迟统计、QoS监控和音画同步等难题。借助Wireshark抓包分析,可直观解析0xBEDE标

weixin_33178839的博客 212

RTP PayloadType类型整理

RTP PayloadType类型整理 RTP PayloadType类型整理

UFS Write Booster技术解析:原理、配置与故障排查实战

在存储技术领域,缓存机制是提升I/O性能的核心手段之一,其原理是通过高速存储介质暂存数据,减少对低速主存储的直接访问,从而降低延迟、提升吞吐。Write Booster正是这一原理在UFS(通用闪存存储)规范中的具体实现,它通过引入独立的易失性高速缓存区(Write Booster Buffer),将主机写入命令快速响应与后台数据持久化分离,技术价值在于显著改善随机写入性能,消除由垃圾回收等后台操作引发的写入卡顿。该技术广泛应用于智能手机应用安装、相机连拍、固件升级(OTA)等对写入流畅性要求高的场景。本文

weixin_42561143的博客 356

Wireshark中RTP包保存后变UDP的根源与四种解决方案详解

在计算机网络协议分析中,协议解码是网络流量分析的基础环节,它决定了数据包在分析工具中的呈现方式。其核心原理在于分析工具需要根据数据包特征(如端口、负载结构)动态匹配对应的协议解析器。这一过程的技术价值在于将原始二进制数据转化为可读的、结构化的信息,是进行网络性能分析、故障排查和安全审计的前提。在实际应用场景中,尤其是在实时音视频(RTP)和VoIP通信分析领域,协议解码的准确性直接影响到对通话质量、抖动和丢包等关键指标的判断。本文聚焦于Wireshark工具中一个典型问题:RTP数据包在保存后解码状态丢失,

weixin_30647065的博客 463

Unity获取透明物体深度数据

Unity获取透明物体深度数据前言透明&景深需求模型透明度部分带透明通道图片/视频部分半透明模型获取深度的具体实现方法带透明度图片/视频获取深度的具体实现方法结束语 前言 最近在做的项目有很多奇怪的需求,甚至之前在unity里用插件写了一个类似于蓝图的行为树插件,之后有时间给大家讲一讲相关的实现方法,今天刚解决了unity里透明物体无法获得深度数据的问题。所以分享给大家。 透明&景...

可以吃的妙脆角的博客 2631
上一篇: python工具-内存采集展示
下一篇: 数字趣事-组合差恒等于某个值
knowledgebao
博客等级 码龄15年 401粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值