Video streaming 检测MPEG TS流中的视频帧类型

Video streaming 检测MPEG TS流中的视频帧类型,video-streaming,frame,mpeg,Video Streaming,Frame,Mpeg,我试图提取TS数据包中帧类型的信息。 我使用FFMEPG发送MPEG TS封装的视频(用x264压缩),在另一端,我用Wireshark记录接收到的数据包。我的数据包长188字节,相当于一个MPEG TS数据包。现在我需要找出哪些TS包携带I、P或B帧数据 我试图在我的数据(00 01 00)中检测图片标题,基于以下帖子: 但是我找不到它。我只能注册PES数据包的开始(00 00 01 E0)。 我完全搞不懂格式。PES的哪个部分表示TS数据包传输的是哪种帧类型 谢谢。只需捕获ts表单中的所有内

我试图提取TS数据包中帧类型的信息。 我使用FFMEPG发送MPEG TS封装的视频(用x264压缩),在另一端,我用Wireshark记录接收到的数据包。我的数据包长188字节,相当于一个MPEG TS数据包。现在我需要找出哪些TS包携带I、P或B帧数据

我试图在我的数据(00 01 00)中检测图片标题,基于以下帖子: 但是我找不到它。我只能注册PES数据包的开始(00 00 01 E0)。 我完全搞不懂格式。PES的哪个部分表示TS数据包传输的是哪种帧类型


谢谢。

只需捕获ts表单中的所有内容,然后运行ffprobe即可

ffprobe-显示视频帧并在视频帧中查找pict类型。编写一个小脚本来解析输出并给出输出。如果你懒得那么做

ffprobe-显示帧| grep pict|u type | grep-ni
应该直接给你帧号


只要是有效的视频文件,就可以使用任何格式。

忘了提到ffprobe是ffmpeg实用程序的一部分。非常感谢您的回答。我尝试按照您的建议使用ffprobe(使用-show_frames选项),但它为我提供了每个帧的信息,并且我需要关于每个数据包中存储的帧类型数据的信息。使用-show_packet选项不提供数据包中的数据是否为帧类型I、P或B。您可以将数据包与帧关联。写一个小脚本为你做到这一点!作为传输流,每个数据包将为188字节。因此,从ffprobe可以获得每个帧的帧大小。您现在有了一种直接关联这两者的方法,因为您知道每个帧和数据包的大小是188。请记住,当没有帧数据[frame ends before of packet]时,数据包被填充到188字节,因此新帧从新数据包开始。我还尝试使用MPEG2-TS数据包分析器2.4.1.2(来自www.pjdaniel.org.uk/mpeg/),它将读取PES头,但找不到图片头——它给出:“视频序列头代码未在此数据包中找到AFD未在此数据包中找到”。那么解码器(或ffprobe)如何处理知道每个数据包包含什么帧类型的数据吗?我明白了。这似乎是一种很难做到的方法,但它是可行的。我想通过逐包读取数据包来做到这一点,因为后来我想尝试一下我故意丢弃一些数据包的情况,看看丢弃数据包对视频质量的影响。谢谢。你能使用ff吗探测是否要执行此操作?检测ts数据包中的帧开始代码并非易事。首先,可能会发生开始代码模拟(例如,在PES报头的私有数据部分)。此外,起始代码可以在两个ts数据包之间断开,例如,“00 00”是第一个ts数据包的结尾,“01”是ts数据包数据的开头。您可以尝试使用: