c - 解析RTP流以从松下相机获取MPEG4编解码器的I帧

标签 c rtsp rtp mpeg-4

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

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

我认为 packet.data 包含 RTP 格式,其中包括 RTP header + RTP 数据。

我研究了其他一些主题,例如:how to process draw data packetparsing 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/

相关文章:

c - 打印 float 的整数部分

javascript - native 客户端 : How to use Messaging_HandleMessage in C

c - 警告 - Expected ‘struct node **’ but argument is of type ‘struct node **’ 是什么意思?

sip - RTP 中的证监会和 SSRC

delphi - 如何使用 Indy 组件构建 RTSP 服务器?

c - 为什么在 Socket Programming - C 中将位移动 8?

java - 如何使用Java使RTSP服务器流/发送H264格式

video - 如何在 libavformat 中设置 RTP 有效负载类型?

ios - 在 iOS 中构建允许 WiFi 扬声器流式传输音乐的 RTP 服务器

video - RTP解包