0

我正在使用 ffmpeg 从相机记录 RTSP MPEG4 流

  1. 通过调用 avformat_open_input 函数建立 RTSP
  2. av_read_packet使用(contest, & packet )从相机接收帧,并将其存储在 AVPacket 结构中。
  3. 现在我想解析这个帧以确定哪个是 I 帧,然后再将其存储到文件中。使用avcodec_decode_videofunc 在这种情况下可能对我有帮助,但因为存在延迟解码,所以对我来说不是一个好选择。无论如何,我想用另一种方式

简单地说,我认为 packet.data 包含一种 RTP 格式,其中包括 RTP 标头 + RTP 数据。

我研究了其他一些主题,例如:如何处理绘制数据包从 rtp 数据包解析 MPEG-4。实际上它们看起来非常接近我需要的东西,也许我做错了什么。因此,我仍然无法弄清楚数据包.data 中 RTP 标头的 12 个字节在哪里,然后我真正需要的是 I、P 或 B 视频对象平面信息。

尝试解析 RTP 格式,但似乎数据包.data 包含一些额外信息而不是纯 RTP 格式,或者不包含 RTP 标头。我不确定。

射击:

How can I parse the frame to get frame info (I, P or B) in AVPacket
4

1 回答 1

0

我不使用 FFmpeg,但根据文档,您可以使用 AVPacket.data 访问原始数据

在这一点上,也许你可以这样做:

int nalType = packet->data[0] & 0x1F;
if (naType == 5) // iFrame
于 2013-10-08T08:14:21.777 回答