2015-11-14 19 views
0

我需要通过Ffmpeg.The数据的帮助下从传输雄蜂一些数据包括帧数据和一些其它参数,例如定时辊/俯仰/高度/无人驾驶飞机的方向,并且当我得到的帧的图像,相应的参数也应该拉出来,所以我dicede发送这些参数作为SEI。 然后快到了,送SPS PPS后的问题,我把我自己的SEI包,如:运输SEI有关ffmpeg

if(pkt->size>10&&pkt->data[0] ==0 
     &&pkt->data[1] ==0 
     &&pkt->data[2] ==0 
     &&pkt->data[3] ==1 
     &&(pkt->data[4] == 103 || pkt->data[4] == 104)){ 
     i++; 
    } 
    AVPacket *newPacket = nullptr; 
    // 0 0 0 1 6 8*16 
    if(i == 2){ 
     i = 0; 
     newPacket = (AVPacket *)av_malloc(sizeof(AVPacket)); 
     av_init_packet(newPacket); 
     newPacket->data = new uint8_t[8]; 
     newPacket->data[0] = 0; 
     newPacket->data[1] = 0; 
     newPacket->data[2] = 0; 
     newPacket->data[3] = 1; 
     newPacket->data[4] = 6; 
     newPacket->data[5] = 123; 
     newPacket->data[6] = 134; 
     newPacket->data[7] = 128; 
     newPacket->size = 8; 
    } 
av_write_frame(*it , pkt); 
     av_free_packet(pkt); 
     if(newPacket){ 
      av_write_frame(*it , newPacket); 
      av_free_packet(newPacket); 
     } 

但是,在接收终止,我只找到API:av_read_frame.The API只是解码来自每一个完整的帧AVFormatContext.My SEI什么都不做! 此外,我也试图把我的参数side_data或AVFrame的沿革资料,但RTP tansporting后,收到AVFrame的side_data和元数据为0x00一次。 有人能给我一些思路吗?

回答

1

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

  1. 首先,我用编码的x264库框架(我不认为这会有所作为)
  2. 然后,像你我fwrite()将一个数据包,然后一个SEI(你不”吨必须明确地声明为SEI一个AVPacket并使用分组>数据SEI,简单地声明UCHAR *或uint8_t *)
  3. 使用av_read_frame()之后,将出现SEI消息与经编码帧一起分组>数据。
  4. 我获得从分组数据只是经编码的帧的最后一个字节之后SEI消息>。 (实际上,你无法确定编码帧的最后一个字节。但是你可以做一招,并表明其长度上SEI)
  5. 最后,而无需修改分组>数据,我解码与通常的方法框架。