用Ffmpeg运输SEI

时间:2015-11-14 06:36:33

标签: c++ ffmpeg h.264 rtp multimedia

我需要通过Ffmpeg的帮助从无人机传输一些数据。数据包括帧数据和一些其他参数,例如无人机的定时滚动/俯仰/高度/方向,以及当我得到帧的图像时,相应的参数也应该拉出来,所以我骰子把这些参数作为SEI发送。   然后问题来了,在发送sps pps后,我发送了自己的SEI数据包,例如:

MainActivity

但是,在接收终止时,我只找到API:av_read_frame .API只解码AVFormatContext中的每个完整帧。我的SEI什么也没有!   此外,我还尝试将我的参数放在AVFrame的side_data或metadate中,但在rtp tansporting之后,收到AVFrame的side_data和元数据再次为0x00。   有人能给我一些思路吗?

1 个答案:

答案 0 :(得分:1)

在接收终端,你是否检查过使用av_read_frame()获得的AVPackets是否在他们的数据上有你的SEI消息?     除了编码部分之外,我为每个帧保存SEI的方法与您类似。我的步骤是:

  1. 首先,我使用x264库编码帧(我不认为这会产生影响)
  2. 然后,像我一样,我将fwrite()一个数据包然后一个SEI(您不必明确声明一个AVPacket用于SEI并使用数据包>数据用于SEI,只需声明uchar *或uint8_t *)
  3. 使用av_read_frame()后,SEI消息会在数据包>数据上与编码帧一起显示。
  4. 我在编码帧的最后一个字节之后从packet->数据中获取SEI消息。 (实际上,你不能确定编码帧的最后一个字节。但你可以做一个技巧并在SEI上指出它的长度)
  5. 最后,在不修改数据包>数据的情况下,我用通常的方式对帧进行解码。