我正在使用 ffmpeg 从相机录制 RTSP MPEG4 流
- 已通过调用avformat_open_input函数建立RTSP
- 通过
av_read_packet
(contest,&packet)从摄像头接收帧,并将其存储在 AVPacket 结构中。 - 现在我想解析该帧以确定哪个是 I 帧,然后再将其存储到文件中。
使用
avcodec_decode_video
函数在这种情况下可能对我有帮助,但因为存在延迟解码,所以这对我来说不是一个好的选择。不管怎样,我想用另一种方式
我认为 packet.data 包含 RTP 格式,其中包括 RTP header + RTP 数据。
我研究了其他一些主题,例如:how to process draw data packet和 parsing MPEG-4 from rtp packet 。实际上它们看起来非常接近我需要的东西,也许我做错了什么。因此,我仍然无法弄清楚 packet.data 中 RTP header 的 12 个字节在哪里,然后是什么我真正需要的是 I、P 或 B 视频对象平面信息。
尝试解析 RTP 格式,但似乎 packet.data 要么包含一些比纯 RTP 格式更多的额外信息,要么不包含 RTP header 。我不确定。
射击:
How can I parse the frame to get frame info (I, P or B) in AVPacket
最佳答案
我不使用 FFmpeg,但根据 to the doc您可以使用 AVPacket.data 访问原始数据
此时也许你可以这样做:
int nalType = packet->data[0] & 0x1F;
if (naType == 5) // iFrame
关于c - 解析RTP流以从松下相机获取MPEG4编解码器的I帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19092739/