从 Wireshark 中提取 Mpeg TS

Extract Mpeg TS from Wireshark

我需要从 Wireshark 捕获中提取 MPEG-TS 流。我设法做到了这一点,但是当我使用 VLC 播放它时,输出很糟糕,它只是绿色 window,顶行有些抖动。

我是这样做的:

  1. 使用 ip.dest 多播流过滤器捕获。
  2. 分析 -> 解码为 -> UDP 端口(字段),端口号(值),MP2T(当前)
  3. 工具转储 MPEG TS 数据包。

播放不正确。还有其他方法吗

当我需要从 pcap 文件转储 TS 时,我会执行以下操作:

  1. 如果 TS 在纯 UDP 中(协议列显示每个数据包的 MPEG TS)跳转到步骤 3
  2. 如果TS是用RTP打包的,右击任意包->解码为->选择字段"Current"下的RTP
  3. 使用工具MPEG Dump,工具 -> 转储 MPEG TS 数据包

我不使用MP2T包解码,一般是不行的。

如果 TS 是纯 UDP,则 TS 数据包可能会被打乱,并且用作连续性计数器的 4 位长 TS 数据包字段的长度不足以正确排序 TS 数据包。这可能会导致转储 TS 的播放损坏。

不使用 Wireshark,可以使用 pcap2mpeg.pl。我测试了它,如果只有一个 MPEG,它就可以正常工作 PCAP 中的流。

这是成功提取的具有 2 个流的 mpeg 文件的 ffprobe 输出:

Input #0, mpegts, from 'test.mpeg':
  Duration: 00:27:59.90, start: 4171.400000, bitrate: 8665 kb/s
  Program 1 
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #0:0[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(progressive), 4096x2176 [SAR 1:1 DAR 32:17], 10 fps, 10 tbr, 90k tbn, 20 tbc
    Stream #0:1[0x1001]: Data: bin_data ([6][0][0][0] / 0x0006)

我在原来的 pcap2mpeg 中添加了两个过滤选项。

您可以在以下位置找到它:https://github.com/bugre/pcap2mpegts

所以你可以:

  • 按 udp 目标端口过滤
  • 按 mcast 组 IP 和目标端口过滤

对于捕获的文件在同一 IP 但在不同端口或不同 mcast IP 上有多个 TS 的情况。

你会运行它为:

pcap2mpegts.pl -y -i 239.100.0.1 -p 2000 -l multi_ts_capture.pcap -o single-stream-output.ts